1.名词解释:栈和队列
栈是只允许在一端进行插入和删除操作的线性表,允许插入和删
除的一端叫栈顶,另一端叫栈底。最后插入的元素最先删除,故
栈也称后进先出(LIFO)表。
队列是允许在一端插入而在另一端删除的线性表,允许插入的一
端叫队尾,允许删除的一端叫队头。最先插入队的元素最先离开
(删除),故队列也常称先进先出(FIFO)表。
2. 假设以 S 和 X 分别表示入栈和出栈操作,则对初态和终态均
为空的栈操作可由 S 和 X 组成的序列表示(如 SXSX)。
(1)试指出判别给定序列是否合法的一般规则。
(2)两个不同合法序列(对同一输入序列)能否得到相同的输
出元素序列?如能得到,请举列说明。
【答案】(1)通常有两条规则。第一是给定序列中 S 的个数和 X
的个数相等;第二是从给定序列的开始,到给定序列中的任一位
置,S 的个数要大于或等于 X 的个数。(2)可以得到相同的输出
元素序列。例如,输入元素为 A,B,C,则两个输入的合法序列
ABC 和 BAC 均可得到输出元素序列 ABC。对于合法序列 ABC,我
们使用本题约定的 SXSXSX 操作序列;对于合法序列 BAC,我们
使用 SSXXSX 操作序列。
3. 如果输入序列为 123456,试问能否通过栈结构得到以下两个
序列:435612 和 13542 6,请说明为什么不能或如何才能得到。
【答案】输入序列为 123456,不能得出 435612,其理由是,输
出序列最后两元素是 12,前面 4 个元素(4356)得到后,栈中
元素剩 12,且 2 在栈顶,不可能栈底元素 1 在栈顶元素 2 之前
出栈。得到 135426 的过程如下:1 入栈并出栈,得到部分输出
序列 1;然后 2 和 3 入栈,3 出栈,部分输出序列变为:13;接
着 4 和 5 入栈,5,4 和 2 依次出栈,部分输出序列变为 13542;
最后 6 入栈并退栈,得最终结果 135426。
4. 简述顺序存储队列的假溢出的避免方法及队列满和空的条件。
【答案】设顺序存储队列用一维数组 q[m]表示,其中 m 为队列
中元素个数,队列中元素在向量中的下标从 0 到 m-1。设队头指
针为 front,队尾指针是 rear,约定 front 指向队头元素的前一
位置,rear 指向队尾元素。当 front 等于-1 时队空,rear 等于
m-1 时为队满。由于队列的性质(“删除”在队头而“插入”在
队尾),所以当队尾指针 rear 等于 m-1 时,若 front 不等于-1,
评论0
最新资源