1.已知循环队列存储在一维数组A0…n-1]中,且队列非空时front和rear分别指向队头元素和队尾元素。若初始时队列为空,且要求第一个进入队列的元素存储在A[0]处,则初始时front和rear的值分别是( )。
A.0,0
B. 0,n-1
C. n-1, 0
D. n-1,n-1
2.循环队列存储在数组A[0…n]中,入队时的操作为( )。
A. rear=rear+1
B. rear= (rear+1) mod (n-1)
C. rear= (rear+1) mod n
D. rear= (rear+1) mod (n+1)
3.最适合用做链队的链表是( )。
A.带队首指针和队尾指针的循环单链表
B.带队首指针和队尾指针的非循环单链表
C.只带队首指针的非循环单链表
D.只带队首指针的循环单链表
4.最不适合用做链式队列的链表是( )。
A.只带队首指针的非循环双链表
B.只带队首指针的循环双链表
C.只带队尾指针的循环双链表
D.只带队尾指针的循环单链表
5.用链式存储方式的队列进行删除操作时需要( )。
A.仅修改头指针
B.仅修改尾指针
C.头尾指针都要修改
D.头尾指针可能都要修改
6.在一个链队列中,假设队头指针为front,队尾指针为rear, x所指向的元素需要入队,则需要执行的操作为( )。
A. front=x,front= front->next
B. x->next=front->next, front=x
C. rear->next=x, rear=x
D. rear->next=x, x->next=null, rear=x .
7.Q是一个队列,S是一个空栈,实现将队列中的元素逆置的算法。
int Reverse(Queue Q,Stack S){
while(!QueueEmpty(Q)){
x=DeQueue(Q);
Push(S,x);
}
while(!StackEmpty(S){
Pop(S,x);
EnQueue(Q,x);
}
}
8.请设计一个队列,要求满足:①初始时队列为空;②入队时,允许增加
队列占用空间;③出队后,出队元素所占用的空间可重复使用,即整个队列所占用的空间
只增不减;④入队操作和出队操作的时间复杂度始终保持为0(1)。请回答下列问题: .
1)该队列是应选择链式存储结构,还是应选择顺序存储结构?
2)画出队列的初始状态,并给出判断队空和队满的条件。
3)画出第一个元素入队后的队列状态。
4)给出入队操作和出队操作的基本过程。
答案:
1)链式存储结构
2)
3)
4)