C++实现栈与分析栈的知识点
目录
- 一、栈的概念
- 二、栈的基本组成和操作
- 三、栈元素的存储方式
- 四、C++实现静态栈
- (1)栈类的设计
- (1)isEmpty()判断是否为空
- (2)isFull()判断是否已满
- (3)push()压栈
- (4)pop()出栈
- (5)getTop()获取栈顶元素
- (6)clear()清空栈
一、栈的概念 栈的英文为
stack
,译为一叠或者一摞。栈是一种采用先进后出FILO(first in last out)或称为后进先出LIFO(last in first out)策略进行元素访问的数据结构。栈经常被比作是一摞碟子,最上面的碟子是最后放上去的,却是最先被拿走的。文章图片
二、栈的基本组成和操作 如果要正确的使用栈,则必须保证其含有栈顶指针和栈元素。此外,栈的基本操作含有:
- 初始化;
- 入栈;
- 出栈;
- 清空栈;
- 访问栈顶元素;
- 检测栈的状态;
三、栈元素的存储方式 常用的实现方式分为两种;
- 第一种策略是使用静态数组实现,此时栈的容量是有限的;
- 第二种策略是使用动态数组或者链表,此时栈的容量可以动态扩充。
四、C++实现静态栈 【C++实现栈与分析栈的知识点】使用静态数组实现栈结构时,栈底固定不变,栈顶随着压栈和出栈操作进行自加和自减。一般采用整型变量来表示栈顶,压栈时栈顶变量加一,出栈时栈顶变量减一。
(1)栈类的设计
根据前面对栈基本功能和组成的描述,栈类应该包含下述的公有函数成员和私有数据成员。其中
currentSize
为栈顶指针,用于压栈、入栈、判空、判满等操作;T表示模板参数类型,栈元素为T类型数组,可以在隐式或显式实例化时指定;SIZE表示栈的容量,一旦确定就不能更改。代码如下:
templateclass Stack {public:bool isEmpty(); bool isFull(); void push(const T &data); T pop(); void clear(); T getTop(); private:// 栈顶指针int currentSize=-1; T array[SIZE]; };
(1)isEmpty()判断是否为空
如果栈顶指针值为0,则表示为栈为空,代码如下:
templatebool Stack ::isEmpty() {if (currentSize == 0) {return true; }else {return false; }}
(2)isFull()判断是否已满
如果栈顶指针值等于栈的存储容量SIZE时,栈满:
templatebool Stack ::isFull() {if (currentSize == SIZE) {return true; }else { return false; }}
(3)push()压栈
将数据压栈时,栈顶指针同步加一;
templatevoid Stack ::push(const T &data) {// 栈顶压入currentSize++; array[currentSize] = data; }
(4)pop()出栈
将数据弹出后,栈顶指针需要减一:
templateT Stack ::pop() {if(currentSize>=1){return array[currentSize--]; }}
(5)getTop()获取栈顶元素
获取栈顶数据并不需要对栈顶指针进行移动:
templateT Stack ::getTop() {return array[currentSize]; }
(6)clear()清空栈
由于采用的是静态数组,所以清空栈时无需进行内存释放,将栈顶指针归零即可:
templatevoid Stack ::clear() {currentSize = -1; }
到此这篇关于C++实现栈与分析栈的知识点的文章就介绍到这了,更多相关C++栈内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- C++实现LeetCode(80.有序数组中去除重复项之二)
- 在数组中查找第二大元素(详细代码实现)
- C++ STL中的accumulate()和partial_sum()(数字标头)
- 左偏树/左偏堆实现原理和代码实现指南
- 晓多机器人无需API开发连接企微群机器人,实现自动同步客户数据
- 希尔密码指南和代码实现详解
- 在C++中使用STL进行数组的所有排列
- 算法设计(将所有零移动到数组末尾详细代码实现)
- Springboot|Springboot +redis+谷歌开源Kaptcha实现图片验证码功能
- Python爬取百度翻译实现中英互译功能