动态栈的创建
来源:互联网 发布:unity3d安装步骤 编辑:程序博客网 时间:2024/06/06 06:54
一、什么是栈
栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
栈可以是个容器,并且这个容器存放元素的特点是先进后出
栈的接口有 :
push(); //将元素压入栈
pop(); //删除栈顶元素
top(); //读取栈顶元素
size(); //栈内元素的个数
empty(); //栈是否为空,为空返回1,否则返回0
二、栈的实现
栈:(1)静态栈:
优点:实现简单。
缺点:栈大小固定,当空间存满后无法再存,或给的空间太大浪费空间
(2)动态栈
缺点:相比静态栈代码实现复杂容易出错
优点:大小不固定,当内存不足时可自己开辟空间
动态栈的实现:
#define Max_Stack 3 //1.动态栈template<class T>class Stack{public:Stack():_array((T*)malloc(sizeof(T)*Max_Stack)), _capacity(Max_Stack), _size(0){ }void Push(const T& data) //元素入栈{CheckCapacity();_array[_size] = data;_size++;}void Pop() //顶部元素出栈{if (Empty())return;_size--;}T Top() //读取顶部元素{if (Empty())return NULL;return _array[_size-1];}T Top()const {if (Empty())return NULL;return _array[_size-1];}size_t Size()const //获取当前元素个数{return _size;}bool Empty()const //判断栈是否为空{return _size == 0;}private:void CheckCapacity() //增容函数{if (_size < _capacity) return;else{T*ret = (T*)realloc(_array, (2 * _capacity + 3)*sizeof(T));if (ret != NULL){_array = ret;_capacity = 2 * _capacity + 3;}}}T* _array;size_t _capacity;size_t _size;};
栈的调用:
int main(){Stack<int> s;s.Push(1); //压栈s.Push(2); //压栈s.Push(3); //压栈s.Push(4); //压栈s.Push(5); //压栈cout << s.Size() << endl; //栈内元素个数cout<<s.Top()<<endl; //访问栈顶元素s.Pop(); //删除栈顶元素cout<<s.Top()<<endl; //访问栈顶元素s.Pop(); //删除栈顶元素system("pause");return 0;}
阅读全文
1 0
- 动态栈的创建
- 动态树的创建
- 动态菜单的创建
- mscomm的动态创建
- 动态对话框的创建
- 创建动态的表格
- 动态数组的创建
- 创建动态栈
- ProgressBar的使用方法动态创建,静态创建
- Fragment的静态创建、动态创建
- MFC的关键技术:动态创建
- 动态内表的创建
- 二维数组的动态创建
- 创建动态的XML数据
- 如何动态的创建类
- 动态链接库的创建
- 创建动态库的流程
- 动态链接库的创建
- NOIP普及组题解(能有民间数据的三题)
- java内存泄露分析方案
- 数据集总结(未完)
- 二叉树遍历
- Flipping Burned Pancakes --模拟
- 动态栈的创建
- 非Python的Web服务器之Apache WSGI模块安装
- Maven异常:Could not find artifact
- linux 中用vi编辑器替换字符
- 多重检验中的FDR错误控制方法与p-value的校正及Bonferroni校正
- 一个工厂的网络实践,原本简单的网络被搞得如此复杂
- Leetcode 5. Longest Palindromic Substring (第十周作业)
- 【JavaScript】数据类型检测
- 比较四个数的大小,并最后显示最大数和最小数