选择题
[2019年第3题]. 设栈 S 和队列 Q 的初始状态为空,元素 e1、e2、e3、e4、e5 和 e6 依次进入栈 S,一个元素出栈后即进入Q,若 6 个元素出队的序列是 e2、e4、e3、e6、e5 和 e1,则栈 S 的容量至少应该是________。
A.2 B.3 C. 4 D. 6
[2020年第4题]. 最大容量为 n 的循环队列,队尾指针是 rear,队头是 front,则队空的条件是________。
A. (rear+1)%n == front B. rear == front C. rear+1 == front D. (rear-l)%n == front
[2020年第5题]. 若让元素1,2,3,4,5依次进栈,则出栈次序不可能出现在________种情况。
A. 5,4,3,2,1 B. 4,3,1,2,5 C. 2,1,5,4,3 D. 2,3,5,4,1
[2021年第4题]. 设有一个递归算法如下所示,计算F(8)需要调用该递归函数的次数为( )。
int F(int n)
{ if(n<=3) return 1;
else return F(n-2)+F(n-4)+1; }
A.7 B.8 C.9 D.10
[2021年第5题]. 若循环队列Q存储在数组queue[0..n]中,front是队首位置,rear是队尾位置(初始rear=front=0),则元素e入队的操作是()。
A.Q.queue[Q.rear]=e; Q.rear=(Q.rear+1)%n;
B.Q.queue[Q.rear]=e; Q.rear=(Q.rear+1)%(n+1);
C.Q.rear=(Q.rear+1)%n; Q.queue[Q.rear]=e;
D.Q.rear=(Q.rear+1)%(n+1); Q.queue[Q.rear]=e;
[2022年第4题]. 若顺序栈S存储在数组stack[MAXSIZE]中,栈顶位置top初值为-1,则元素e进栈的操作是( )。
A.S.stack[S.top++]=e; B.S.stack[++S.top]=e;
C.S.stack[S.top--]=e; D.S.stack[--S.top]=e;
[2022年第5题]. 链队列Q的结点结构为:(data,link),指针front指向队首元素,rear指向队尾元素,则出队元素到变量x中的操作( )。
A.x=Q.front->data; Q.front=Q.front->link;
B.Q.front=Q.front->link; x=Q.front->link;
C.x=Q.rear->data; Q.rear=Q.rear->link;
D.x=Q.rear->data; Q.rear=Q.front;
[2023年第3题]. 设一个栈的输入序列是 1,2,3,4,5,则下列序列中,( )是栈的合法输出序列。
A. 5 1 2 3 4 B. 4 5 1 3 2 C. 4 3 1 2 5 D. 3 2 1 5 4
[2023年第4题]. 若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为( )。
A. 1和 5 B. 2和4 C. 4和2 D. 5和1
[2024年第1题]. 在数据处理过程中需要保存一些中间数据,如果要实现后保存的数据先处理,则应该采用( )来保存这些数据
A. 队列 B. 线性表 C. 栈 D. 单链表
[2024年第10题].若元素a、b、c、d、e、f依次进栈,允许进栈与退栈的操作交替进行,但不允许连续3次退栈工作,则不可能得到的出站序列是( )。 A. dcebfa B.cbdaef C.bcaefd D.afedcb
名词解释
[2020年第5题]. 栈及其特点
[2020年第7题]. 队列及其特点
[2022年第1题]. 队列
填空题
[2021年第1题]. 从逻辑结构上看,堆栈是操作受限的( )结构,遵循( )存取原则。
算法题
[2022年第3题]. 设计一个算法,判断给定的表达式中的括号是否匹配(表达式存储在字符串或字符数组中,可能包含三种类型的括号,即( )、[ ] 和{ })。如表达式“(3+2){[a+b] * (2+x)}”中的括号是匹配的,而表达式“(3+2)[a+b] * (2+x)}”和“(3+2){[a+b] * (2+x})”中的括号是不匹配的。算法可以采用伪代码结合文字注释的方式说明。
[2022年第4题]. 以下二叉树相关的程序中,函数TravLevel(BTNode *b)是对二叉树按层次遍历,例如对于如图-5所示的树b,TravLevel( b )的结果是输出“A B C D E F G H”。请补全程序中 (1) 和 (2) 和 (3) 空缺的部分,每个空格填入一条语句。函数XYZ(BTNode *b)的功能未知,若以如图-5所示的树b作为输入参数,则XYZ( b )的输出是 (4) ,函数XYZ(BTNode *b)的功能是 (5) 。
#define MaxSize (100)
typedef char ElementType;
typedef struct TreeNode {
ElementType Element;
struct TreeNode *Left;
struct TreeNode *Right;
} BTNode;
void TravLevel(BTNode *b) {
BTNode *Queue[MaxSize];//循环队列
int front, rear;//定义队首和队尾指针
front=rear=0;//置队列为空队列
rear++;
Queue[rear]=b;//根节点入队
while ( (1) ) {//队列不为空
front=(front+1) % MaxSize;
b=Queue[front];//队首元素出队
printf("%c ",b->Element);
if (b->Left!=NULL) {//左孩子入队
rear=(rear+1) % MaxSize;
(2) ;
}
if (b->Right!=NULL) {//右孩子入队
rear=(rear+1) % MaxSize;
(3) ;
}
}
}
void XYZ(BTNode *b) {
BTNode *Stack[MaxSize], *p;
int top = -1;
if (b!=NULL) {
top++;
Stack[top]=b;//根节点入栈
while (top > -1) {//栈非空时循环
p=Stack[top];
top--;
printf("%c ",p->Element);
if (p->Right!=NULL) {
top++;
Stack[top]=p->Right;
}
if (p->Left!=NULL) {
top++;
Stack[top]=p->Left;
}
}
}
}