栈和队列是两种重要的线性结构。
栈和队列也是线性表,只不过栈和队列的基本操作是线性表操作的子集。
栈
栈是限定仅能在表尾进行插入和删除的线性表
栈顶:表尾
栈底:表头
栈先进后出
栈的表示和实现
顺序栈:栈的顺序存储结构是利用一组地址连续的存储单元依次存放自栈底到栈顶
一般来说,在初始化设空栈不应该限定栈的最大容量。在应用过程中,栈的空间不够使用再逐渐扩大。
栈顶指针永远指向下一个元素。
base指针指向栈底元素
队列
和栈相反,队列是一种先进先出的线性表。
只允许在一端进行插入,一端进行删除。
在队列中允许插入的一端叫做队尾,允许删除的一端叫对头。
链队列
用链表表示的队列。
和单链表类似,有一个头指针和一个尾指针(Q.front和Q.rear).
头指针指向头结点(如果有),尾指针指向尾结点
双端队列:限定删除和插入在表两端的线性表。
输入受限的双端队列:一端可以插入和删除,另一端只能删除
输出受限的双端队列:一端可以插入和删除,另一端只能插入
循环队列
和顺序栈类似。
front和rear分别指向队列的头和尾
初始化时:front=rear=0;
添加元素:尾指针加1
删除元素 :头指针加1
所以在非空的队列中,尾指针始终指向最后一个元素的下一个元素,头指针始终指向第一个元素