第三次数据结构作业20101029

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第三次作业

第三章栈和队列

一、选择题

1. 若一个栈的输入序列为1,2,3,…,n,输出序列的第一个元素是i,则第j个输出元素是()。

A. i-j-1

B. i-j

C. j-i+1

D. 不确定的

2. 若栈采用顺序存储方式存储,现两栈共享空间V[1..m],top[i]代表第i个栈( i =1,2)

栈顶,栈1的底在v[1],栈2的底在V[m],则栈满的条件是()。

A. |top[2]-top[1]|=0

B. top[1]+1=top[2]

C. top[1]+top[2]=m

D.

top[1]=top[2]

3. 栈在()中应用。

A. 递归调用

B. 子程序调用

C. 表达式求值

D. A,B,C

4. 表达式3* 2^(4+2*2-6*3)-5求值过程中当扫描到6时,对象栈和算符栈为(),其中

^为乘幂。

A. 3,2,4,1,1;(*^(+*-

B. 3,2,8;(*^-

C. 3,2,4,2,2;(*^(-

D. 3,2,8;

(*^(-

5. 用链接方式存储的队列,在进行删除运算时()。

A. 仅修改头指针

B. 仅修改尾指针

C. 头、尾指针都要修改

D. 头、尾指针

可能都要修改

6. 假设以数组A[m]存放循环队列的元素,其头尾指针分别为front和rear,则当前队列中

的元素个数为()。

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

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

A. 都是先进先出

B. 都是先进后出

C. 只允许在端点处插入和删除元素

D. 没有共同点

8. 设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,一个元

素出栈后即进队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1则栈S的容量至少应

该是( )。

A. 6 B. 4 C. 3 D. 2

二、应用题

24. 有字符串次序为3*-y-a/y^2,利用栈,给出将次序改为3y-*ay2^/-的操作步骤。(可用X代表扫描该字符串过程中顺序取一个字符进栈的操作,用S代表从栈中取出一个字符加入到新字符串尾的出栈操作。例如,ABC变为BCA的操作步骤为XXSXSS)

【东北大学2001 一、4 ( 4分)】

24、XSXXXSSSXXSXXSXXSSSS

2. 有两个栈s1和s2共享存储空间c[1,m],其中一个栈底设在c[1]处,另一个栈底设在c[m0] 处,分别编写s1和s2的进栈push( i,x)、退栈pop(i)和设置栈空setnull(i)的函数,其中i=1,2。注意:仅当整个空间c[1,m0]占满时才产生上溢。

解:该共享栈的结构如图2.3所示,两栈的最多元素个数为m0, top1是栈1的栈指针,

top2 是栈2的栈指针,当top2=top1+1时出现上溢出,当top1=0时栈1出现下溢出,当top2=m0+1时栈2出现下溢出。根据上述原理得到如下

函数:

top1 top2

c的元素序号1 2 …….. n …….. m0-1 m0

a1 a2 …… a n ………. bm ……… b2 b1

栈1底栈1顶栈2顶栈2底

图2.3 共享栈

/*top1,top2 和m0均为已赋初值的int型全局变量*/

void push(x,i)

int x,I

{

if (top1==top2-1) printf("上溢出!\n");

else

if(i==1)/*对第一个栈进行入栈操作*/

{

top1++; c[top1]=x;

else /*对第二个栈进行入栈操作*/

{

top2--; c[top2]=x;

}

}

/*函数pop*/

void pop(i)

int i ;

{

if (i ==1 )/*对第一个栈进行出栈操作*/

if(top1==0)printf("栈1下溢出!\n");

else

{

pop=c[top1]; top1--;

}

else /*对第二个栈进行出栈操作*/

if (top2==m0+1) printf("栈2下溢出!\n");

else

{

pop=c[top2];top2++;

}

}

/*函数setnull*/

setnull(i)

int i ;

{

if(i ==1 )top1=0;

else top2=m0+1;

}

#define m0 100 /*m0为算术表达式中最多字符个数*/ correct(exp,tag)

charexp[m0];int tag;

{

charst[m0]; int top=0,i=1;

tag=1;

while(i<=m0&&tag)

{ if(exp[i]==‘(’||exp[i]==‘[’||exp[i]==‘{’) /*此时入栈*/ {top++;st[top]=exp[i];}

if(exp[i]==‘)’)

if(st[top]==‘(’) top- -; else tag=0;

相关文档
最新文档