堆栈的定义和实现
2017-08-08 15:52
141 查看
**
代码实现:
栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
**代码实现:
/* 数据结构:stack (数组实现) 功能:push // 进栈 void push (const Type& val); pop //出栈 void pop(); top //返回栈顶元素 const_reference& top() const; size //返回栈大小 size_type size() const; empty //判断栈是否为空 bool empty() const; /*********附加功能(未实现)**********//* emplace //在堆栈的顶部添加一个新元素(类似push,但避免了构造临时对象) swap //交换容器内容 */ #include <iostream> #include <cstdlib> template <typename Type> class Stack { public: Stack() { S=new Type[MAX_Stack]; Size=-1; Push=0; Pop=0; // std::cout<<"栈已构造完毕"<<std::endl; } ~Stack() { delete[] S; // std::cout<<"栈已析构"<<std::endl; } void push(const Type& val) { if(Size<MAX_Stack-1) S[++Size]=val; else { upstepStack(); push(val); } } void pop() { if(!empty()) { std::cout<<"栈为空强制退出"<<std::endl; exit(0); } else Size--; } Type& top()const { if(!empty()) { std::cout<<"栈为空强制退出"<<std::endl; exit(0); } else return S[Size]; } int size() const { return Size; } bool empty() const { if(Size==-1) return false; else return true; } void upstepStack() { Type *temp = S; MAX_Stack+=increment; S = new Type[MAX_Stack]; for(int i = 0;i<Size;i++) S[i] = temp[i]; delete[] temp; } private: Type *S; int Size; int Push; int Pop; int MAX_Stack=50; const int increment=20; };
相关文章推荐
- PHP栈的定义、入栈出栈方法及基于堆栈实现的计算器完整实例
- 使用链表定义堆栈,实现pop,push
- 2个堆栈实现自定义队列的入队出队方法 - 调用者定义2个栈的容量
- 2个堆栈实现自定义队列的入队出队方法 - 调用者定义2个栈的容量
- 数据结构之堆栈8定义的实现
- C++模板实现二叉查找树(一 树的数据结构定义与节点插入)
- java 重定义数组的实现方法(与VB的ReDim相像)
- 【第十二章】零配置 之 12.3 注解实现Bean定义 ——跟我学spring3
- 数据结构:堆栈的链式存储实现
- 基于 自己定义注解 和 aop 实现使用memcache 对数据库的缓存 演示样例
- Android自己定义对话框实现QQ退出界面
- java安卓如何实现定义接口
- 利用堆栈实现表达式求值
- Android 实现形态各异的双向側滑菜单 自己定义控件来袭
- java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类HashMap Hashtable LinkedHashMap 和TreeMap.
- 用堆栈和用递归分别实现倒序打印
- 全局静态函数的定义和实现
- 学习C++ -> 类(Classes)的定义与实现
- java中接口的定义与实现
- 实现C语言的拷贝函数且将复制后的字符串逆序,不能使用库函数,不能定义其他的变量。