栈和队列答案演示教学Word下载.docx

上传人:b****3 文档编号:14299790 上传时间:2022-10-21 格式:DOCX 页数:40 大小:51.72KB
下载 相关 举报
栈和队列答案演示教学Word下载.docx_第1页
第1页 / 共40页
栈和队列答案演示教学Word下载.docx_第2页
第2页 / 共40页
栈和队列答案演示教学Word下载.docx_第3页
第3页 / 共40页
栈和队列答案演示教学Word下载.docx_第4页
第4页 / 共40页
栈和队列答案演示教学Word下载.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

栈和队列答案演示教学Word下载.docx

《栈和队列答案演示教学Word下载.docx》由会员分享,可在线阅读,更多相关《栈和队列答案演示教学Word下载.docx(40页珍藏版)》请在冰豆网上搜索。

栈和队列答案演示教学Word下载.docx

Push(S,‘s’);

while(!

StackEmpty(S)){Pop(S,y);

printf(y);

}

printf(x);

stack

3.4简述以下算法的功能(栈的元素类型SElemType为int)。

(1)statusalgo1(StackS)

inti,n,A[255];

n=0;

while(!

StackEmpty(S)){n++;

Pop(S,A[n]);

for(i=1;

i<

=n;

i++)Push(S,A[i]);

}

(2)statusalgo2(StackS,inte)

{

StackT;

intd;

InitStack(T);

StackEmpty(S)){

Pop(S,d);

if(d!

=e)Push(T,d);

}

StackEmpty(T)){

Pop(T,d);

Push(S,d);

(1)栈中的数据元素逆置

(2)如果栈中存在元素e,将其从栈中清除

3.5假设以S和X分别表示入栈和出栈的操作,则初态和终态均为空栈的入栈和出栈的操作序列可以表示为仅由S和X组成的序列。

称可以操作的序列为合法序列(例如,SXSX为合法序列,SXXS为非法序列)。

试给出区分给定序列为合法序列或非法序列的一般准则,并证明:

两个不同的合法(栈操作)序列(对同一输入序列)不可能得到相同的输出元素(注意:

在此指的是元素实体,而不是值)序列。

任何前n个序列中S的个数一定大于X的个数。

设两个合法序列为:

T1=S……X……S……

T2=S……X……X……

假定前n个操作都相同,从第n+1个操作开始,为序列不同的起始操作点。

由于前n个操作相同,故此时两个栈(不妨为栈A、B)的存储情况完全相同,假设此时栈顶元素均为a。

第n+1个操作不同,不妨T1的第n+1个操作为S,T2的第n+1个操作为X。

T1为入栈操作,假设将b压栈,则T1的输出顺序一定是先b后a;

而T2将a退栈,则其输出顺序一定是先a后b。

由于T1的输出为……ba……,而T2的输出顺序为……ab……,说明两个不同的合法栈操作序列的输出元素的序列一定不同。

3.6试证明:

若借助栈由输入序列12…n得到的输出序列为(它是输入序列的一个排列),则在输出序列中不可能出现这样的情形:

存在着i<

j<

k使<

<

这个问题和3.1题比较相似。

因为输入序列是从小到大排列的,所以若<

,则可以理解为通过输入序列可以得到输出序列,显然通过序列123是无法得到312的,参见3.1题。

所以不可能存在着i<

3.7按照四则运算加、减、乘、除和幂运算(↑)优先关系的惯例,并仿照教科书3.2节例3-2的格式,画出对下列算术表达式求值时操作数栈和运算符栈的变化过程:

A-B×

C/D+E↑F

BC=GG/D=HA-H=IE^F=JI+J=K

步骤

OPTR栈

OPND栈

输入字符

主要操作

1

#

A-B*C/D+E^F#

PUSH(OPND,A)

2

A

-B*C/D+E^F#

PUSH(OPTR,-)

3

#-

B*C/D+E^F#

PUSH(OPND,B)

4

AB

*C/D+E^F#

PUSH(OPTR,*)

5

#-*

C/D+E^F#

PUSH(OPND,C)

6

ABC

/D+E^F#

Operate(B,*,C)

7

AG

PUSH(OPTR,/)

8

#-/

D+E^F#

PUSH(OPND,D)

9

AGD

+E^F#

Operate(G,/,D)

10

AH

Operate(A,-,H)

11

I

PUSH(OPTR,+)

12

#+

E^F#

PUSH(OPND,E)

13

IE

^F#

PUSH(OPTR,^)

14

#+^

F#

PUSH(OPND,F)

15

IEF

Operate(E,^,F)

16

IJ

Operate(I,+,J)

17

K

RETURN

3.8试推导求解n阶梵塔问题至少要执行的move操作的次数。

3.9试将下列递推过程改写为递归过程。

voidditui(intn)

inti;

i=n;

while(i>

1)

cout<

i--;

voidditui(intj)

{

if(j>

1){

cout<

j;

ditui(j-1);

return;

}

3.10试将下列递归过程改写为非递归过程。

voidtest(int&

sum)

intx;

cin>

>

x;

if(x==0)sum=0;

else

test(sum);

sum+=x;

sum;

voidtest(int&

Stacks;

InitStack(s);

intx;

do{

Push(s,x);

}while(x>

0);

while(!

StackEmpty(s)){

Pop(s,x);

sum+=x;

sum<

endl;

DestoryStack(s);

3.11简述队列和堆栈这两种数据类型的相同点和差异处。

栈是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除运算。

队列也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除。

3.12写出以下程序段的输出结果(队列中的元素类型QElemType为char)。

QueueQ;

InitQueue(Q);

charx=‘e’,y=‘c’;

EnQueue(Q,‘h’);

EnQueue(Q,‘r’);

EnQueue(Q,y);

DeQueue(Q,x);

EnQueue(Q,x);

EnQueue(Q,‘a’);

While(!

QueueEmpty(Q))

DeQueue(Q,y);

y;

char

3.13简述以下算法的功能(栈和队列的元素类型均为int)。

voidalgo3(Queue&

Q)

intd;

DeQueue(Q,d);

Push(S,d);

StackEmpty(S))

Pop(S,d);

EnQueue(Q,d);

队列逆置

3.14若以1234作为双端队列的输入序列,试分别求出满足以下条件的输出序列:

(1)能由输入受限的双端队列得到,但不能由输出受限的双端队列得到的输出序列。

(2)能由输出受限的双端队列得到,但不能由输入受限的双端队列得到的输出序列。

(3)既不能由输入受限的双端队列得到,也不能由输出受限的双端队列得到的输出序列。

3.15假设以顺序存储结构实现一个双向栈,即在一维数组的存储空间中存在着两个栈,它们的栈底分别设在数组的两个端点。

试编写实现这个双向栈tws的三个操作:

初始化inistack(tws)、入栈push(tws,i,x)和出栈pop(tws,i)的算法,其中i为0或1,用以分别指示设在数组两端的两个栈,并讨论按过程(正/误状态变量可设为变参)或函数设计这些操作算法各有什么有缺点。

classDStack{

ElemType*top[2];

ElemType*p;

intstacksize;

intdi;

public:

DStack(intm)

p=newElemType[m];

if(!

p)exit(OVERFLOW);

top[0]=p+m/2;

top[1]=top[0];

stacksize=m;

~DStack(){deletep;

voidPush(inti,ElemTypex)

di=i;

if(di==0){

if(top[0]>

=p)*top[0]--=x;

elsecerr<

"

Stackoverflow!

;

else{

if(top[1]<

p+stacksize-1)*++top[1]=x;

ElemTypePop(inti)

if(top[0]<

top[1])return*++top[0];

Stackempty!

}else{

if(top[1]>

top[0])return*top[1]--;

returnOK;

};

//链栈的数据结构及方法的定义

typedefstructNodeType{

ElemTypedata;

NodeType*next;

}NodeType,*LinkType;

typedefstruct{

LinkTypetop;

intsize;

}S

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1