数据结构第三章 栈和队列题目答案

一、选择题
1.栈结构通常采用的两种存储结构是( A )。
A.顺序存储结构和链表存储结构 B.散列方式和索引方式
C.链表存储结构和数组 D.线性链表结构和非线性存储结构
2.在栈操作中,输入序列为(A,B,C,D),不可能得到的输出数列是( D )。
A.(A,B,C,D) B.(D,C,B,A)
C.(A,C,D,B) D.(C,A,B,D)
3.设栈ST用顺序存储结构表示,则栈ST为空的条件是(B)。
A.ST.top-ST.base<>0    B.ST.top-ST.base= =0
C.ST.top-ST.base<>n    D.ST.top-ST.base= =n
4.向一个栈顶指针为HS的链接中插入一个s结点时,则执行(C)。
A.HS->next=s; B.s->next=HS->next;HS->next=s;
C.s->next=HS;HS=s; D.s->next=HS;HS=HS->next;
5.从一个栈顶为HS的链接中删除一个结点,用x保存被删结点的值,则执行(C)。
A.x=HS;HS=HS->next; B.HS=HS->next;x=HS->data;
C.x=HS->data;HS=HS->next; D.s->next=HS;HS=HS->next;
6.用不带头结点的单链表存储队列,其对头指针指向对头结点,对尾指针指向队尾结点,则在进行出队操作时(D)。
A.仅修改队头指针 B.仅修改队尾指针
C.队头、队尾指针都要修改 D.队头、队尾指针都可能要修改
7.栈和队列的共同点(C)。
A.都是先进后出 B.都是先进先出
C.只允许在端点处插入和删除元素 D.没有共同点
8.一个队列的入列序列是1,2,3,4,则队列的输出序列是(B)。
A.4, 3, 2, 1 B.1, 2, 3, 4 C.1, 4, 3, 2 D.3, 2, 4, 1
9.循环队列SQ采用数组空间SQ.base[0,n-1]存放其元素值,已知其头尾指针分别是front和rear,则判定此循环队列Q为空的条件是(C)。
A.Q.rear-Q.front= =n B.Q.rear-Q.front-1= =n
C.Q.front= =Q.rear D.Q.front= =Q.rear+1
10.循环队列SQ采用数组空间SQ.base[0,n-1]存放其元素值,已知其头尾指针分别是front和rear,则判定此循环队列Q为满队列的条件是(C)。
A.Q.front= =Q.rear B.Q.front!=Q.rear
C.Q.front= =(Q.rear+1)%n D.Q.front!=(Q.rear+1)%n
11.若在一个大小为6的数组上实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为(A)。
A.1和5 B.2和4
C.4和2 D.5和1
12.用单链表表示的链式队列的队头在链表的(A)位置。
A.链头 B.链尾 C.链中
13.判定一个链队列Q(最多元素个数为n)为空的条件是(A)。
A.Q.front= =Q.rear B.Q.front!=Q.rear
C.Q.front= =(Q.rear+1)%n D.Q.front!=(Q.rear+1)%n
14.在链队列Q中,插入s所指结点需顺序执行的指令是(C)。
A.Q.front->next=s;f=s; B.Q.rear->next=s;Q.rear=s;
C.s->next=Q.rear;Q.rear=s; D.s->next=Q.front;Q.front=s;
15.在一个链队列Q中,删除一个结点需要执行的指令是(C)。
A.Q.rear=Q.front->next; B.Q.rear->next=Q.rear->next->next;
C.Q.front->next=Q.front->next->next; D.Q.front=Q.rear->next;

二.填空题
1.栈的特点是___先进后出___,队列的特点是__先进先出____。
2.线性表、栈和队列都是__线性____结构,可以在线性表的__任意____位置插入和删除元素;对于栈只能在___栈顶___位置插入和删除元素;对于队列只能在___队尾___插入和在_队头_____删除元素。
3.有程序如下,则此程序的输出结果(其中栈的元素类型SelemType为char)是_stack_____。
void main()
{ stack s;
char x,y;
initstack (s);
x=’c’;y=’k’;
push(s,x);push(s,’a’);push(s,y);
pop(s,x);push(s,’t’);push(s,x);
pop(s,x);push(s,’s’);
while(!stackempty(s)){pop(s,y);printf(y);}
printf(x);
}
4.在栈顶指针为HS的链栈中,判定栈空的条件是___HS==NULL___。
5.向栈中压入元素和操作是先__存入元素____,后_移动栈顶指针_____。
6.对栈进行退栈时的操作是先__移动栈顶指针____,后_取出元素_____。
7.用循环链表表示和队列长度为n,若只设头指针,则出队和入队的时间复杂度分别是____1__和__n____;若只设尾指针,则出队和入队的时间复杂度分别是__1____和___1___。
8.从循环队列中,删除一个元素时,其操作是__先取出元素,后移动队尾指针___。
9.在一个循环队列中,队首指针指向队首元素的___前一位___。
10.在具有n 个单元的循环队列中,队满时共有___n-1___个元素。
11.在HQ的链队列中,判定只有一个结点和条件是_HQ.front=HQ.rear_____。
12.设栈S和队列Q的初始状态为空,元素a、b、c、d、e、f依次通过栈S,一个元素出栈后即进入队列Q,若这6个元素出队列的顺序是b、d、c、f、e、a则栈S的容量至少应该是___3___。
13.有程序如下,则此程序的输出结果(其中队列的元素类型QSelemType为char)是___char___。
void main()
{ char x=’e’;y=’c’;
enqueue(q,’h’);enqueue(q,’r’);enqueue(q,y);
dequeue(q,x);enqueue(q,x);
dequeue(q,x);enqueue(q,’a’)
while(!queueempty(q))
{dequeue(q,y);printf(y);}
Printf(x);
}

猜你喜欢

转载自blog.csdn.net/qq_43663263/article/details/105904858