数据结构
⚡️数据结构-第一章
⚡️抽象数据类型案例
⚡️数据结构-第二章(1)-线性结构
⚡️数据结构-第二章(2)-线性表的顺序表示和实现
⚡️数据结构-第二章(3)-顺序表(含代码)
⚡️数据结构-第二章(4)-顺序表案例(含代码)
⚡️数据结构-第二章(5)-链式存储结构
⚡️数据结构-第二章(6)-单链表基本操作的实现
⚡️数据结构-第二章(7)-双向链表和循环链表
⚡️数据结构-第二章(8)-线性表的应用(线性表合并)
⚡️数据结构-第三章-栈和队列(1)-定义和特点
数据结构-第三章-栈和队列(2)-栈的操作
栈操作
上一节,我们了解了栈和队列基本概念,这一节我们来对栈进行操作。
栈的抽象数据定义
栈的表示和实现
顺序栈
和线性表类似,栈也有两种存储表示方法。分别是顺序栈和链栈。
顺序栈,即栈的顺序存储结构是利用一组地址连续的存储单元依次自栈底到栈顶的数据元素,同时附设指针 top 指示栈顶元素在顺序栈中的位置,设base指针,指示栈底元素在顺序栈中的位置。
栈满了如果再插入元素就溢出了(上溢)
栈满如果还想插入元素的处理方法:
将原栈内容移入新栈比较费时尤其是数据量大的时候[不到万不得已不会这样操作]
栈里没有元素仍要出栈(将会产生下溢)
上溢(overflow):栈已满又要压入元素
下溢(underflow):栈已空,还要弹出元素
注:上溢是一种错误,使问题是处理无法进行,而下溢一般认为是一种结束条件,即问题处理结束。
使用数组作为顺序栈的存储方式的特点:简单、方便、易产生溢出(数组大小固定)
顺序栈的定义
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
stacksize表示栈的最大容量(栈最多可以存放的元素个数)C语言中下标不能越界否则就有语法错误,base为栈底指针,若base的值为NULL,则表明栈结构不存在。top为栈顶指针,初始指向栈底,top==base记为栈空的标志。
顺序栈的模块说明:
顺序栈的操作
【算法补充】:判断顺序栈是否为空
【算法补充】:求顺序栈的长度
【算法补充】:清空顺序栈
【算法补充】:销毁顺序栈
【算法3.2】:顺序栈的入栈
【算法3.3】:顺序栈的出栈
总结
栈的小结:
-
①定义:限定只能在表的一端进行插入和删除操作运算的线性表(只能在栈顶操作)
-
②逻辑结构:同线性表一样栈元素具有线性关系即前驱后继关系(一对一)
3.存储结构:顺序栈和链栈均可,顺序栈更常见
4.运算规则:只能在栈顶运算,且访问结点时依照后进后出的原则(LIFO)
5.实现方式:关键是编写入栈和出栈函数具体实现依顺序栈和链栈的不同而不同
期待大家和我交流,留言或者私信,一起学习,一起进步!