C++实现一个栈

我们先说下栈的知识,先看下我们之前写的文章

栈,C语言实现

如何自己实现一个栈

堆和栈的区别(转过无数次的文章)

这是一个栈

这是我们把数据入栈的操作

这是数据出栈的操作

之前僚机号里面发了一个用C++实现的栈文章,比较简单,基于上一次的代码再升华一下,我认为在熟悉快速写出一个栈代码,对大家在面试笔试中帮助是非常大的。

下面写了两段代码实现栈,代码不一定是完美的,肯定存在问题,但是基本思路我觉得还是可以的,有两种方法来实现,第一种是用数组来实现栈,还有一种是用指针实现。

如果在面试,面试官说让你用代码实现一个栈,因为面试的时间比较紧,而且大多数人在面试的时候可能会比较紧张,我建议用数组实现,用数组实现一个栈会简单很多,说白了有手就行,当然了,你要是可以用指针实现,而且写得比较全面,这个是加分的地方。

用数组实现的时候,我们一个元素就是一个数组的值,数组的下标可以把整个栈串联起来。

#用数组实现栈

#include <iostream>
using namespace std;class IntStack{enum {ssize = 100};int stack[ssize];int top;public:/*构造函数,初始化top变量的值*/IntStack():top(0){}/*插入数据*/void push(int i){stack[top++] = i;}/*遍历*/void TraverseStack(){cout << "---" << endl;for(int i = 0;i<top; ++i){ if(i != top -1)cout <<stack[i] << "->";elsecout <<stack[i] << endl;   } } /*弹出数据*/int pop(){return stack[--top];}
};int main()
{IntStack is;for(int i = 0; i< 20; i++){is.push(i*i);}is.TraverseStack();is.pop();is.TraverseStack();is.pop();is.TraverseStack();is.push(77);is.push(77);is.push(77);is.TraverseStack();
}

程序输出

---
0->1->4->9->16->25->36->49->64->81->100->121->144->169->196->225->256->289->324->361
---
0->1->4->9->16->25->36->49->64->81->100->121->144->169->196->225->256->289->324
---
0->1->4->9->16->25->36->49->64->81->100->121->144->169->196->225->256->289
---
0->1->4->9->16->25->36->49->64->81->100->121->144->169->196->225->256->289->77->77->77--------------------------------
Process exited after 0.03563 seconds with return value 0
请按任意键继续. . .

上图是用数组来实现的,用数组实现的栈有一个缺陷,就是栈的大小在定义数组的时候已经确定了,不能做到动态增长。

链表有点不一样,每个节点都需要有一个地址,用来保存下一个节点的地址,我们还需要一个head节点,来保存整个栈的头,这样不至于让我们的栈失去方向。

#用链表来实现一个栈

#include <iostream>
using namespace std;class Node{public:int data;Node *next;
};class Stack{/*指向栈顶的指针*/Node *top;/*栈长度*/int size; public:/*构造函数,初始化top变量的值*/Stack(){top = new Node;top->next = NULL;/*栈长度设置为0*/size = 0;cout << "Stack()"<<endl;}~Stack(){cout << "~Stack()"<<endl;Node *pTemp = top;while(top != NULL){pTemp = top;top = top->next;delete pTemp;}size = 0;}/*插入数据*/void push(int i){if(top == NULL){cout << "stack is null" << endl;return;}/*搞一个temp节点出来*/Node *temp = new Node;temp->data = i;temp->next = NULL;/*把temp节点连接到栈里面去*/if(size == 0){top = temp; } else{temp->next = top;top = temp;}size++;}/*遍历*/void TraverseStack(){if(top->next == NULL){cout << "stack is null" << endl;return;}cout << "---" << endl;Node *pTemp = top;while(pTemp != NULL){if(pTemp->next!=NULL)cout << pTemp->data <<"->";elsecout << pTemp->data <<endl;pTemp = pTemp->next;}} /*弹出数据*/int pop(){if(size == 0){cout << "stack is empty" << endl;return (0);}if(top == NULL){cout << "stack is empty" << endl;return (0);}Node *temp = top;top=top->next;cout <<"pop->data:"<< temp->data <<endl;delete temp;size--;return (0);}/*获取栈长度*/int getLength(){return size;}
};int main()
{Stack *pStack = new Stack();pStack->push(12);pStack->push(13);pStack->push(14);pStack->push(15);pStack->TraverseStack();pStack->pop();pStack->TraverseStack();pStack->pop();pStack->TraverseStack();delete pStack; 
}

程序输出

Stack()
---
15->14->13->12
pop->data:15
---
14->13->12
pop->data:14
---
13->12
~Stack()--------------------------------
Process exited after 0.03555 seconds with return value 0
请按任意键继续. . .

推荐阅读:

    专辑|Linux文章汇总

    专辑|程序人生

    专辑|C语言

嵌入式Linux

微信扫描二维码,关注我的公众号 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466929.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ApiController得到服务器端绝对路径

System.Web.Hosting.HostingEnvironment.MapPath("路径"); MSDN资料 将虚拟路径映射到服务器上的物理路径。 命名空间&#xff1a; System.Web.Hosting程序集&#xff1a; System.Web&#xff08;在 System.Web.dll 中&#xff09; 语法 public static string Map…

SVN的恢复历险记

今天&#xff0c;同事的机器可能出问题了。自动将Subversion服务器上的Source目录删除并且还Commit了。这可是框架部分的全部代码啊。不过没关系&#xff0c;好在Subversion的功能很强大。 方法很多&#xff1a; 1、选择Subversion --> Show Log&#xff0c;打开Log对话框&a…

JavaScript——文档对象模型

一、基本概念 文档对象模型&#xff08;DOM&#xff09;是表示文档和访问、操作构成文档的各种元素的应用程序接口&#xff08;API&#xff09;。它解决了NetScape的JavaScript和Microsoft的JavaScript之间的冲突&#xff0c;给web设计师和开发者一个标准的方法&#xff0c;可让…

colinux的安装

colinux安装 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 一、在windows上模拟linux环境&#xff0c;主要有三种方法&#xff1a; 1.VMware等虚拟机&#xff0c;缺点&#xff1a;占用系统资源多&#xff0c;运行速度慢。 2.Cygwin等模拟环境&#…

你搞清楚「NULL」、「0」、「'0'」、「0」「\0」了吗?

我们先讨论NULL&#xff0c;平时使用指针的时候&#xff0c;会经常遇见这个家伙&#xff0c;这个家伙的值是是这样定义的#define NULL 0 或者 #define NULL (void *)0我们看一下下面这段代码#include <stdio.h>int main () {size_t ii;int *ptr NULL;unsigned long *nul…

【uoj#207】共价大爷游长沙 随机化+LCT维护子树信息

题目描述 给出一棵树和一个点对集合S&#xff0c;多次改变这棵树的形态、在集合中加入或删除点对&#xff0c;或询问集合内的每组点对之间的路径是否都经过某条给定边。 输入 输入的第一行包含一个整数 id&#xff0c;表示测试数据编号&#xff0c;如第一组数据的id1&#xff0…

ping 命令的几种使用方法?

ping命令的几种使用方法&#xff1f;它是最基本&#xff0c;最常用的&#xff0c;测试物理网络的命令&#xff0c;它的使用频率很高&#xff0c;主要用于确定本地主机和另一台主机能否成功进行发送或接收数据包&#xff0c;根据返回的信息&#xff0c;我们就可以判断TCP/IP参数…

MongoDB基本应用操作整理

启动服务&#xff1a;mongod --dbpathg:/mongo/data 访问服务器&#xff0c;如下&#xff1a; mongodb这个软件的端口是27017 可以把mongo服务配置成系统服务。 使用命令如下&#xff1a; mongod --dbpathg:/mongo/data --logpathg:/mongo/mongo.log --install 在Mongo中就三…

周五跟大佬喝酒,顺便打了个球

这是前天发生的事情&#xff0c;昨天写好了文章&#xff0c;今天才发出来&#xff0c;但是名字还是想写成昨晚小聚。昨晚逍遥和啊尚过来找我打球&#xff0c;很开心&#xff0c;虽然酝酿了好久关于这次的活动&#xff0c;但是它真的发生时&#xff0c;我还是显得有些突兀和紧张…

安装Cygwin

Cygwin安装 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 下载cygwin&#xff1a;https://www.cygwin.com/ 箭头指的地方点一下就是安装该软件&#xff0c;开始要安装的一些软件&#xff0c;gcc&#xff0c;gdb&#xff0c;make&#xff0c;ssh等等。…

修练8年C++面向对象程序设计之体会

面向对象程序设计语言很多&#xff0c;如Smalltalk、Ada、Eiffel、Object Pascal、Visual Basic、C等等。C语言最讨人喜欢&#xff0c;因为它兼容C 语言&#xff0c;并且具备C 语言的性能。近几年&#xff0c;一种叫Java 的纯面向对象语言红极一时&#xff0c;不少人叫喊着要用…

JavaScript——使用对话框

alert 该对话框只用于提醒&#xff0c;不能对脚本产生任何改变。它只有一个参数&#xff0c;即为需要提示的信息&#xff0c;没有返回confirm 该对话框一般用于确认信息&#xff0c;它只有一个参数&#xff0c;返回值为true或falseprompt 该对话框可以进行输入&#xff0c;并返…

飞机上一般是什么操作系统?

之前波音737MAX空难失事事件牵动人心&#xff0c;让人对航空出行又平添了一份不信任&#xff0c;根据最新消息显示&#xff0c;美国联邦航空局对737 MAX机型的大量评估授权给波音公司自身进行&#xff0c;安全评估存在严重缺陷。也传出了波音737 MAX客机的培训都是通过平板电脑…

地铁上怎么那么多钢管女郎?

每天早上拖着疲惫的身体&#xff0c;逆着人流走向地铁站&#xff0c;人好多。开门&#xff0c;上车&#xff0c;想找根钢管来平衡一下身体&#xff0c;没想到有美女在抱着钢管跳舞。。。换个钢管吧&#xff0c;又有一个抱着钢管的美女。。。请问一下各位女士&#xff0c;你们那…

排查一个触摸屏驱动问题

今天跟同事看一个TP驱动&#xff0c;上电后日志都正常&#xff0c;但是触摸没反应&#xff0c;然后开始排查。上电后可以正常读到芯片的chip ID&#xff0c;那说明I2C是通讯正常的&#xff0c;也可以说明触摸芯片的供电也是正常的。基于这个&#xff0c;我搬来示波器&#xff0…

javaScript——内置函数1

JavaScript中有两种函数&#xff1a;一种是语言内部事先定义好的函数叫内置函数&#xff0c;另一种是自己定义的 函数。使用内置函数&#xff0c;可提高编程效率&#xff0c;其中有六种内置函数。 eval函数 eval&#xff08;expr&#xff09;函数可以把一个字符串当作一个JavaS…

vmware安装ubuntu

vmware安装Ubuntu 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 &#xff08;1&#xff09; 单击”Power on this virtual machine”开始安装Ubuntu系统 经过一段时间的等待出现如下界面,单击”Install Ubuntu”进行安装 在安装的时候&#xff0…

SQL server挂了之后

今天在服务器上的SQL server挂了之后,重新装了,可老提示什么狗P程序被挂起的信息,最后不得不细找原因,功夫不负有心人,终于找出了病症所在,K,我要早知道这么简单,就再也不装系统了.....汗死,详情如下,做个备份,以便今后再碰到类似问题有地方查! 先运行你的安装程序&#xff0c;…

AWS 免费套餐

https://amazonaws-china.com/cn/free/ 需要的可以看下&#xff0c;我准备搞一个RDS。 转载于:https://www.cnblogs.com/hupo376787/p/8268562.html

C++指针的应用

C指针 文章中我们介绍了指针的基本概念和应用简介。我们有提到指针可以使用在链表、队列和二叉树&#xff0c;等等。但是这些都会比较复查&#xff0c;后面"数据结构” 时&#xff0c;我们会用专门的章节来讲解这些知识。这篇文章&#xff0c;详细的探讨一下指针和其他关联…