0
点赞
收藏
分享

微信扫一扫

【数据结构】栈和队列

《数据结构(第二版)》清华大学出版社,严蔚敏,吴伟民 编.

从数据结构角度来看,栈和队列也是线性表,其特殊性在于栈和队列的基本操作是线性表操作的子集,它们是操作受限的线性表,因此,可称为限定性的数据结构。

限定仅在表尾进行插入或删除操作的线性表。因此,对栈来说,表尾端有特殊含义,称为栈顶,相应地,表头端称为栈底。栈的修改是按后进先出的原则进行的。因此,栈又称为后进先出(LIFO)的线性表。

【数据结构】栈和队列_线性表

对栈的基本操作:

  1. INISTACK(S)初始化操作,设置一个空栈 S。
  2. EMPTY(S)判栈空函数。
  3. PUSH(S,x)入栈操作。本操作的结果是:若栈不空,则插入元素 x 为插入前的栈顶元素的后继,否则插入 x 为栈中第一个元素即栈顶元素。
  4. POP(S)出栈函数。已知 S 为栈,若栈 S 不空,则返回函数值为栈顶元素,且从栈中删除栈顶元素,否则返回函数值为空元素 NULL。
  5. GETTOP(S)取栈顶元素函数。已知 S 为栈,若栈 S 不空,则返回函数值为栈顶元素,否则返回函数值为空元素 NULL。
  6. CLEAR(S)栈置空操作。已知 S 为栈,不论操作之前的栈是否为空栈,本操作的结果都是将 S 置为空栈。
  7. CURRENT_SIZE(S)求当前栈中元素个数函数。

栈的两种存储结构

顺序栈

利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素。
【数据结构】栈和队列_数据结构_02
由于顺序栈的入栈操作受数组上界的约束,当对栈的最大使用空间估计不足时,有可能发生上溢,此时应该及时“报警”。

两个栈共享空间

栈的使用非常广泛,常常会出现在一个程序中需要同时使用多个栈的情形。为了不因栈上溢而产生错误中断,必须给每个栈预分配一个较大的空间,但这并不容易做到,因为各个栈实际所用最大空间很难估计。另一方面,各个栈的实际容量在使用期间是在变的,往往会有这样的情况,即其中某一个栈发生上溢,而另一个栈还是空的。解决方法:利用栈底位置不变的特性,将两个栈的栈底分别设置在数组空间的两端,然后各自向中间伸展,只有当两个栈的栈顶相遇时才可能发生上溢。
【数据结构】栈和队列_返回函数_03

链栈

若同时需要两个以上的栈,最好采用链表做存储结构。对栈这样一种元素多变的数据结构来说,链式存储结构似乎更适宜些,只有在创造新节点过程无法实现的时候才会发生上溢。
【数据结构】栈和队列_返回函数_04

队列

队列是一种先进先出的线性表,它允许在表的一端进行插入,而在另一端删除元素。在队列中,允许插入的一端叫做队尾,允许删除的一端称为队头

一个最典型的例子就是操作系统中的作业排队,在允许多道程序运行的计算机系统中,同时有几个作业运行,如果运行的结果都需要通过通道输出,那就要按请求输出的先后次序排队。

【数据结构】栈和队列_数据结构_05

队列的基本操作:

  1. INIQUEUE(Q)初始化操作,设置一个空的队列;
  2. EMPTY(Q)判空函数,若队列为空,则返回函数值 true,否则函数值返回 false;
  3. ENQUEUE(Q, x)入队列操作。Q 为已知队列,本操作的结果是,在队列的尾部插入元素 x,若队列非空,则 x 成为插入之前的队尾元素的后继,即 x 为新的队尾元素。
  4. DLQUEUE(Q)出队列函数。若已知队列 Q 不空,则删除队头元素并返回该队头元素,且其后继为新的队头元素,否则返回空元素 NULL。
  5. GETHEAD(Q)取队头元素函数,若已知队列 Q 不空,则返回队头元素,
  6. CLEAR(Q)队列置空操作,不论已知队列Q是否是空队列,本操作结果是将 Q 置空。
  7. CURRENT_SIZE(Q)求已知队列Q当前所含元素个数。

队列的两种存储结构

循环队列——队列的顺序存储结构

链式队列中每个节点设置有一个指针域,它比向量多占用存储空间,在有的情况下仍需要用顺序存储结构来表示队列。

和栈类似,在队列的顺序存储结构中,除了用一个能容纳最大容量元素的向量以外,还需要两个指针分别指示队头元素和队尾元素,并约定尾指针指示队尾元素在队列中的当前位置,头指针指示队列中队头元素的前一个位置。

【数据结构】栈和队列_数据结构_06

如何判断队满队空?

  1. 另设一个标志位以区别队列是空还是满。
  2. 少用一个元素区间,以尾指针加 1 等于头指针作为队列满的标志。


链式队列

用链表表示的队列简称为链队列。链表判空条件:头指针和尾指针均指向头节点。链队列的操作为单链表的插入和删除操作的特殊情况,只是尚需修改尾指针或头指针。

【数据结构】栈和队列_线性表_07

应用案例

  1. 表达式求值;
  2. 栈与递归过程;


举报

相关推荐

0 条评论