Chapter3-栈和队列
1.栈和队列是两种常用的线性存储表。
2.都限定关于插入和删除元素的操作在表的端点进行。栈只能在栈顶进行操作,队列仅能在队首和队尾进行操作。
3.1 栈
3.1.1 栈的基本概念
1.只允许在一段插入和删除元素的线性表。
2.允许插入和删除元素的一段成为栈顶top,另一端成为栈底bottom.
3.遵循后进先出(LIFO)规则。
3.1.2 顺序栈——栈的数组表示
在实现过程中主要通过向数组中依次插入元素即可(前提是不溢出)。需要注意的是:**因为采用数组的时候必须指定一个特定的大小size,则需要一个技术器count来根据插入和删除元素的情况进行判断是否溢出。同时这也是循序栈的一个缺点。
3.1.3 链式栈
1.借助链表的方式解决了顺序栈空间不足的问题,可以根据实际需求进行动态扩容。
2.在实现过程中与单链表的实现方式类似。栈底的后继是NULL,在栈顶需要一个top指针指向栈顶元素。

3.2 队列
3.2.1 队列的基本概念
1.队列是只允许在一端对头front删除,一端插入队尾rear的线性表。
2.遵循先进先出(FIFO)规则。
3.2.2 链队列
链式队列在入队是无队满的问题,但有队空的问题。队空的条件为:
front == rear

3.2.3 循环队列——队列的顺序存储结构
相较于链队列,循环队列的入队和出队规则以及状态判定都要变得更为复杂一些:
1.顺序队列的入队和出队原则
(1)入队时将新元素按rear指示位置加入再将队尾rear自加一:rear = rear + 1
(2)出队时将下表为front的元素去除,再将对头front自加一:front = front + 1
(3)队满时再入队将溢出错误。
(4)队空时再出队将队空处理。
(5)解决假溢出方法:将队列元素存放数组首位相连,形成循环队列。
2.循环队列的计算判断
对头front和队尾rear自加一时从maxSize - 1直接进到0,可用mod运算实现:
(1)对头front自加一:front = (front +1) % maxSize.
(2)队尾rear自加一:rear = (rear + 1) % maxSize.
(3)队列初始化:front == rear == 0.
(4)队空条件:count == 0或front == rear.
(5)队满条件:count == maxSize或(rear + 1) % maxSize = front.
1798

被折叠的 条评论
为什么被折叠?



