vs2019不能更改栈_干货!栈的知识点综述——附C++实现与分析

83fc126389954d57ea0b2f213de66bd5.png

栈(stack)是计算机中常用的一种线性数据结构,经常有资料使用“操作受限”来形容栈,因为它的压入栈和弹出栈操作只能在栈顶进行。

一、栈的概念

栈的英文为stack,译为一叠或者一摞。栈是一种采用先进后出FILO(first in last out)或称为后进先出LIFO(last in first out)策略进行元素访问的数据结构。栈经常被比作是一摞碟子,最上面的碟子是最后放上去的,却是最先被拿走的。

9a28e37f7bbcf294f595ca3dd926b917.png

二、栈的基本组成和操作

如果要正确的使用栈,则必须保证其含有栈顶指针和栈元素。此外,栈的基本操作含有:

  • 初始化;
  • 入栈;
  • 出栈;
  • 清空栈;
  • 访问栈顶元素;
  • 检测栈的状态;

其中,栈包含三种状态:栈空、一般状态、栈满。检测栈满是非常重要的步骤,防止在栈容量不能扩充时出现溢出现象,此时称为上溢。如果在栈空时进行出栈操作,此时会出现下溢。所以在入栈和出栈时,必须对栈的状态进行检查。

三、栈元素的存储方式

常用的实现方式分为两种,第一种策略是使用静态数组实现,此时栈的容量是有限的;第二种策略是使用动态数组或者链表,此时栈的容量可以动态扩充。

四、C++实现静态栈

使用静态数组实现栈结构时,栈底固定不变,栈顶随着压栈和出栈操作进行自加和自减。一般采用整型变量来表示栈顶,压栈时栈顶变量加一,出栈时栈顶变量减一。

(1)栈类的设计

根据前面对栈基本功能和组成的描述,栈类应该包含下述的公有函数成员和私有数据成员。其中currentSize为栈顶指针,用于压栈、入栈、判空、判满等操作;T表示模板参数类型,栈元素为T类型数组,可以在隐式或显式实例化时指定;SIZE表示栈的容量,一旦确定就不能更改。代码如下:

template 

(1)isEmpty()判断是否为空

如果栈顶指针值为0,则表示为栈为空,代码如下:

template

(2)isFull()判断是否已满

如果栈顶指针值等于栈的存储容量SIZE时,栈满:

template

(3)push()压栈

将数据压栈时,栈顶指针同步加一;

template

(4)pop()出栈

将数据弹出后,栈顶指针需要减一:

template

(5)getTop()获取栈顶元素

获取栈顶数据并不需要对栈顶指针进行移动:

template

(6)clear()清空栈

由于采用的是静态数组,所以清空栈时无需进行内存释放,将栈顶指针归零即可:

template
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值