旭说数据结构之栈
来源:互联网 发布:photoshop8软件下载 编辑:程序博客网 时间:2024/04/29 01:26
提到栈,首先想到的就是先进后出,就像堆盘子一样,最先放的盘子放在最下面,最先取出的盘子是最后放的在最上面的盘子。
在网上看到有人打了一个比方,觉得很形象,拿来分享一下。
你就想像栈是一个竹筒,一头封死了,一头有开口可以往里面放东西,这样第一个放进去的东西,就只能最后一个倒出来。第二个放进去的,就倒数批二个倒出来。
至于它有什么用:再打个比方,你在洗衣服,洗到一半,你妈叫你去扫地(妈妈的话不能不听),你怕忘了你洗到哪来了(当然现实中不会,这只是假设。),你在纸上写到“洗到第3件了”然后放到哪个竹筒里去。然后你去扫地,扫了一个房间,突然你爸又叫你,说“我下去买盒烟,炉子上的水快开了,开了你帮我把它灌一下”,水烧干了会出事的,当然比扫地重要,于是你又在纸上写到“我扫地扫到了第一个房间”,然后放进竹筒,然后你去处理水,把水的事处理完了,你再从竹筒里倒出第一张纸,看着上面写着“扫到第一间房”,于是你接着扫完后面的房间。再从竹筒里再倒出一张出来,看见上面写到“洗到第3件”于是你接着洗第4件。
当然上面事情比较简单,但是你想想,如果你做事情的时候千头万绪,有1000件事情,而且你又不能知道它们什么时候会发生,你能记得住每件事做到哪来了吗?所以就用上面的竹筒这种方法,遇到事情如果比当前的事情重要,就把它的进度写下来,然后丢进去,处理完了手头的事情,没事做的时候,就倒一个出来接着做。这就是一个栈的应用的模型。
栈的本质还是线性表,只不过它是有特殊的操作要求的线性表。拿到一个栈,我们就只能对其进行入栈、出栈操作,入栈就是把元素放到栈顶(就是往上摞盘子),出栈就是把栈顶的元素取出来(就是把最上面的盘子拿来扔了)。
我们想使用一个栈,就new一个,然后对其进行入栈和出栈操作即可。
Stack<int> * stack = new Stack<int>(6); stack->push(1); stack->push(2); stack->push(3); stack->push(4); stack->push(5); cout<<stack->pop()<<endl;//打印5 cout<<stack->pop()<<endl;//打印4 cout<<stack->pop()<<endl;//打印3 cout<<stack->pop()<<endl;//打印2 cout<<stack->pop()<<endl;//打印1
接着,我们就可以定义Stack
这个类了。可以用数组存储数据,用_top来标志栈顶。如下图:
具体的实现应该是很简单的:
template<typename DataType> class Stack{public: Stack(int capacity = 10) { _top = -1; _capacity = capacity; _datas = new DataType[capacity]; } ~Stack() { delete [] _datas; } bool push(DataType data) { //如果栈满了,返回false if (_top + 1 == _capacity )return false; _top++; _datas[_top]=data; return true; } DataType pop() { //如果栈为空,不能进行出栈操作,则退出 if (_top == -1)exit(1); return _datas[_top--]; }private: DataType* _datas; int _capacity;//栈的容量 int _top;//标志栈顶};
- 旭说数据结构之栈
- 旭说数据结构之队列
- 旭说数据结构之栈的小题目
- 旭说数据结构之用两个栈实现队列
- 旭说数据结构之线性表
- 旭说数据结构之树的简介
- 旭说数据结构之二叉树
- 旭说数据结构之二叉查找树
- 旭说数据结构之图的基本知识
- 旭说数据结构之散列表(哈希表)
- 数据结构线性表之顺序表解说
- 旭说数据结构之链表补充(双向链表)
- 红黑树 数据结构说解
- 二项堆 数据结构说解
- 万山千山都是情,你说行我就行之大型数据结构纪录篇之顺序
- 配对堆 数据结构说解
- 和core说再见之:栈溢出
- java数据结构之栈
- python搜索引擎之搜索系统的建立——根据关键字命中次数排分给出前若干个答案
- __stdcall,__cdcel,extern c 和导出函数名
- 解决Android Volley解析json,String数据中文乱码的问题
- hdu-1010
- Android Studio如何引用外部Library工程
- 旭说数据结构之栈
- Android客户端和服务端如何使用Token和Session
- 格式化TextView的文本
- OC错题总结
- Python学习分享
- 导航菜单效果 (熔岩灯 flash效果)
- POJ 1487:Single-Player Games 浮点数高斯消元
- 论文阅读《Hamming embedding and weak geometric consistency for large scale image search》
- Go指南中的练习:Stringers