1 栈
大家都有将物品收纳进盒子里的经历,也一定有先放进去的物品需要在最后才能取出的认识。对栈的操作就如同使用这个盒子。栈是一种只能在一端进行插入与删除操作的线性表。此外,还有以下相关概念:
①允许进行插入、删除操作的一端称为栈顶。
②表的另一端称为栈底。
③当栈中没有数据元素时,称为空栈。
④栈的插入操作通常称为进栈或入栈。
⑤栈的删除操作通常称为退栈或出栈。
栈的主要特点是“后进先出”,即后进栈的元素先出栈。栈也称为后进先出表。我们知道存储结构主要有顺序存储结构、链式存储结构、索引存储结构和哈希存储结构,接下来我们就详细了解一下使用顺序存储结构实现的顺序栈。
2 顺序栈
(1)认识顺序栈
假设栈的的元素都具有同一数据类型ElemType,则可用下列方式来定义顺序栈类型SqStack:
参照顺序表,可以画出顺序栈的示意图。
说明:①约定top总是指向栈顶元素,初始值为-1(后边部分动画和图片为说明问题将-1画在了物理位序下,实则不属于);
②当top=MaxSize-1时不能再进栈,即栈满;
③进栈时top增1,出栈时top减1。
如此,我们可以得出以下四方面内容:
①栈空条件:top=-1;
②e进栈操作:top++,并将e放在top处;
③栈满条件:top=MaxSize-1;
④退栈操作:从top处取出元素e,且top--。
栈主要有初始化栈、销毁栈、判断栈是否为空、进栈、出栈、取栈顶元素等基本运算,限于篇幅,我们仅讲解初始化栈、进栈、出栈、取栈顶元素(全部详细算法关注公众号后回复004获取)。
(2)初始化栈
操作:建立一个新的空栈s,实际上是将栈顶指针指向-1即可。
总结:s为栈指针,top为s所指栈的栈顶指针。
主要代码:
(3)进栈
操作:在栈不满的条件下,先将栈指针增1,然后在该位置上插入元素e。
主要代码:
(4)出栈
操作:在栈不为空的条件下,先将栈顶元素赋给e,然后将栈指针减1。
主要代码:
(5)取栈顶元素
操作:在栈不为空的条件下,将栈顶元素赋给e。
主要代码:
END
![985a0c34a8e5c0e64ac46e8a01d4103f.png](https://i-blog.csdnimg.cn/blog_migrate/e76cb1bd288dbb6db59e856e2d11f377.jpeg)
![f3cf53461bcbd439f908c46b8c6295b0.gif](https://i-blog.csdnimg.cn/blog_migrate/d5445b0c33f35f944263564ef572a75f.gif)