数据结构习题及答案——严蔚敏

发布时间 : 星期四 文章数据结构习题及答案——严蔚敏更新完毕开始阅读

6.循环队列用数组A[0,m-1]存放其元素值,已知其头尾指针分别是front和rear则当前队列中的元素个数是( )

(A)(rear-front+m)%m (B) rear-front+1 (C)rear-front-1(D)rear-front

7.栈和队列的共同点是( )

(A) 都是先进后出 (B)都是先进先出

(C)只允许在端点处插入和删除元素(D)没有共同点 8.表达式a*(b+c)-d的后缀表达式是( )。

(A)abcd*+-(B)abc+*d- (C)abc*+d-(D)-+*abcd

9.4个元素a1,a2,a3和a4依次通过一个栈,在a4进栈前,栈的状态,则不可能的出栈序是( ) (A)a4,a3,a2,a1 (B)a3,a2,a4,a1 (C)a3,a1,a4,a2 (D)a3,a4,a2,a1

10.以数组Q[0..m-1]存放循环队列中的元素,变量rear和qulen分别指示循环队列中队尾元素的实际位置和当前队列中元素的个数,队列第一个元素的实际位置是( ) (A)rear-qulen (B)rear-qulen+m

(C)m-qulen (D)1+(rear+m-qulen)% m 二、填空题

1.栈的特点是_______________________,队列的特点是__________________________。

2.线性表、栈和队列都是_____________________结构,可以在线性表的______________位置插入和删除元素,对于栈只能在________

word文档 可自由复制编辑

插入和删除元素,对于队列只能在_______插入元素和_________删除元素。

3.一个栈的输入序列是12345,则栈有输出序列12345是____________。(正确/错误)

4.设栈S和队列Q的初始状态皆为空,元素a1,a2,a3,a4,a5和a6依次通过一个栈,一个元素出栈后即进入队列Q,若6个元素出队列的顺序是a3,a5,a4,a6,a2,a1则栈S至少应该容纳_____个元素。 三、算法设计题

1.假设有两个栈s1和s2共享一个数组stack[M],其中一个栈底设在stack[0]处,另一个栈底设在stack[M-1]处。试编写对任一栈作进栈和出栈运算的C函数push(x,i)和pop(i),i=l,2。其中i=1表示左边的栈,,i=2表示右边的栈。要求在整个数组元素都被占用时才产生溢出。

2.利用两个栈s1,s2模拟一个队列时,如何用栈的运算来实现该队列的运算?写出模拟队列的插入和删除的C函数。 一个栈s1用于插入元素,另一个栈s2用于删除元素. 参考答案: 一、选择题

1. C 2.A 3. B 4. B 5. B 6.B 7、C 8、C 9、C 10、D 二、填空题

word文档 可自由复制编辑

1、先进先出;先进后出2、线性 ; 任何 ;栈顶;队尾;对头3、正确的 4、3

三、算法设计题 1.

#define M 100 elemtype stack[M]; int top1=0,top2=m-1; int push(elemtype x,int i) {

if(top1-top2==1) return(1); /*else

if(i==1) stack[top1++]=x; if(i==2)stack[top2--]=x; return(0); }

int pop(elemtype *px,int i) { if(i==1)

if(top1==0) return(1); else {

word文档 可自由复制编辑

上溢处理*/

top1--;

*px=stack[top1]; return(0); } else if(i==2)

if(top2==M-1) return(1); else { top2++;

*px=stack[top2]; return(0); } } 2.

elemtype s1[MAXSIZE],s2[MAZSIZE]; int top1,top2;

void enqueue(elemtype x) {

if(top1==MAXSIZE) return(1); else {

push(s1,x);

word文档 可自由复制编辑

联系合同范文客服:xxxxx#qq.com(#替换为@)