数据结构的几道小问题

来源:百度知道 编辑:UC知道 时间:2024/06/18 17:11:32
要求写出结果,并说明为什么!谢谢

3 若已知一个栈的进栈序列为1,2,3,…,n,其输出序列p1, p2, p3, …,pn,若p1=3,则p2为()
A 可能为2;B 一定不是2;C可能是; D一定是1

4 最不适合用作链栈的链表是()
A 只有表头指针没有表尾指针的循环双链表
B 只有表尾指针没有表头指针的循环双链表
C 只有表尾指针没有表头指针的循环单链表
D 只有表头指针没有表尾指针的循环单链表

5 从一个栈顶指针为top的链栈中插入一个s所指结点时,则执行( )
A. top->next=s B. s->next=top->next; top->next=s
C. s->next=top; top =s D. s->next=top; top=top->next

6 从一个栈顶指针为top的链栈中删除一个结点时,用x保存被删结点的值,则执行( )
A. x=top; top=top->next B. x=top->data;
C. top=top->next; x=top ->data D. x=top->data; top=top->next

7. 若使用一个大小为6的一维数组来实现循环队列,且当前rear和front的值分别为5和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为 。
A 1和4; B 2和5; C 0和4; D 1和5;
8. 循环队列用数组A[0,m-1]存放其元素值,已知头尾指针分别是front和rear,则当前队列中元素的个数是 。
A (rear – front + m) % m; B rear – front + 1;
C rear – front – 1; D rear – front
9. 最不适合做链队

3.A
4.D
5.C
6.D
7.A
8.A
9.A
10.B
6.A
您有哪个不明白啊?具体说一下吧..
我和hwuaxj的答案有分歧,我说下我的想法:
4.D 链栈在链表的头部进行操作(插入和删除结点),需要找到头结点的前驱结点.只有表头指针没有表尾指针的循环单链表,不方便找头结点的前驱结点.所以选D
10.B 向链队中插入一个结点就是在单链表表尾插入一个结点.
6.A 在循环队列插入下一个元素之前,要判断队列满否,即条件(Q.rear+1)%MaxSize==Q.front是否为真,所以与对头指针和队尾指针的值有关.

3.A.栈的特点先进后出,第一个输出为p1=3,那么肯定是1和2都进栈了,这时候有两种操作(1)出栈pop那么p2=2;(2)进栈push那么进去就是4,再pop有可能p2=4,所以选A
4.D.如果只有表头没有尾的话,入栈还是比较容易,但出栈的话就要遍历整个栈,然后才能找到栈顶,比较麻烦。而D有尾头,入出栈都不用遍历。
5.C.通常,都是从链头添加、删除元素的。所以s->next应该指向top,最后把top指向s;
6.D.这是出栈操作
7.A.队列是在rear添加,在front删除,当删除一个front前移=4,添加两个rear = (5+6)%6 =1
8.A.rear有可能比front小,所以其他的都不成立
9.A.删除要遍历链表。
10.B.在队尾插入,所以rear->next指向s,而s指向rear
6.C.循环队列插入元素之前一定要判满,所以只与数组大小有关。

第一个答案可能为2
记住栈是先进后出的就行了。