广东财经大学考研初试数据结构历年真题分类:栈、队列和数组

134 阅读4分钟

选择题

[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) 。

DataStructure-GDEF_PostGraduate_Exam_Question_2022_4_4.png

#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;
			}
		}
	}
}