二:栈和队列


1.两个栈共享一片连续空间,可以将两个栈的栈底分别设在这片空间的两端。 T   2.Non recursive programs are generally faster than equivalent recursive programs. However, recursive programs are in general much simpler and easier to understand.  T 非递归程序通常比等价的递归程序快。然而,递归程序通常要简单得多,也更容易理解。   3.When n elements are pushed into a stack, they may be popped in a different order. But if they are inserted into a queue, they will always be deleted in the same order as the insertions. T 当n个元素被推入堆栈时,它们可能会以不同的顺序弹出。但是,如果将它们插入到队列中,它们将始终按照与插入相同的顺序被删除。   4."Circular Queue" is defined to be a queue implemented by a circularly linked list or a circular array. F “循环队列”定义为由循环链表或循环数组实现的队列。 循环队列是一个抽象的概念,不局限于实现方式。也就是说,可以可以用各种数据结构实现   5. 若已知一队列用单向链表表示,该单向链表的当前状态(含3个对象)是:1->2->3,其中x->y表示x的下一节点是y。此时,如果将对象4入队,然后队列头的对象出队,则单向链表的状态是:   6.

若用大小为6的数组来实现循环队列,且当前frontrear的值分别为0和4。当从队列中删除两个元素,再加入两个元素后,frontrear的值分别为多少?

2和0

7.

现有队列 Q 与栈 S,初始时 Q 中的元素依次是{ 1, 2, 3, 4, 5, 6 }(1在队头),S 为空。若允许下列3种操作:(1)出队并输出出队元素;(2)出队并将出队元素入栈;(3)出栈并输出出栈元素,则不能得到的输出序列是:

  8.循环队列的队满条件为  (sq.rear+1) % maxsize ==sq.front   9.

已知初始为空的队列 Q 的一端仅能进行入队操作,另外一端既能进行入队操作又能进行出队操作。若 Q 的入队序列是 1、2、3、4、5,则不能得到的出队序列是:

  10.

若采用带头、尾指针的单向链表表示一个堆栈,那么该堆栈的栈顶指针top应该如何设置?

  11.

利用大小为n的数组(下标从0n-1)存储一个栈时,假定栈从数组另一头开始且top==n表示栈空,则向这个栈插入一个元素时,修改top指针应当执行:top--

12.To delete a node from a linked stack with ST being its top pointer, and save the key value of the deleted node into X, we must do:X= ST->data; ST = ST->next;

要从链接堆栈中删除以ST为顶部指针的节点,并将删除节点的键值保存到X中,必须执行以下操作:

13.

  1. 采用非递归方式重写递归程序时必须使用栈  F
  2. 函数调用时,系统要用栈保存必要的信息 T

14.

若栈S1?中保存整数,栈S2?中保存运算符,函数F()依次执行下述各步操作:

  • (1)从S1?中依次弹出两个操作数ab
  • (2)从S2?中弹出一个运算符op
  • (3)执行相应的运算b op a
  • (4)将运算结果压入S1?中。1假定S1?中的操作数依次是{ 5, 8, 3, 2 }(2在栈顶),S2?中的运算符依次是{ *-+ }(+在栈顶)。调用3次F()后,S1?栈顶保存的值是:15、

15.