栈和队列习题答案

合集下载

数据结构栈和队列习题及答案

数据结构栈和队列习题及答案

习题三栈和队列

一单项选择题

1. 在作进栈运算时,应先判别栈是否(① ),在作退栈运算时应先判别栈是否(② )。当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为(③ )。

①, ②: A. 空 B. 满 C. 上溢 D. 下溢

③: A. n-1 B. n C. n+1 D. n/2

2.若已知一个栈的进栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,...,pn,若p1=3,则p2为( )。

A 可能是2

B 一定是2

C 可能是1

D 一定是1

3. 有六个元素6,5,4,3,2,1 的顺序进栈,问下列哪一个不是合法的出栈序列?()

A. 5 4 3 6 1 2

B. 4 5 3 1 2 6

C. 3 4 6 5 2 1

D. 2 3 4 1 5 6

4.设有一顺序栈S,元素s1,s2,s3,s4,s5,s6依次进栈,如果6个元素出栈的顺序是s2,s3,s4, s6, s5,s1,则栈的容量至少应该是()

A.2

B. 3

C. 5

D.6

5. 若栈采用顺序存储方式存储,现两栈共享空间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]

6. 执行完下列语句段后,i值为:()

int f(int x)

{ return ((x>0) ? x* f(x-1):2);}

int i ;

栈、队列练习题(答案)

栈、队列练习题(答案)

栈、队列练习题(答案)

栈、队列练习题

一、选择题

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

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

B.都是先进后出

C.都是先进先出

D.没有共同点

2.若让元素1、2、3、4依次入栈,则出栈次序不可能出现()

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

3.栈的插入和删除操作在( )进行。

A. 栈顶

B. 栈底

C. 任意位置

D. 指定位置

4.用单链表表示的链式队列的队头在链表的()位置。

A. 链头

B. 链尾

C. 链中

D. 以上都不是

5.在双向循环链表中,在p所指的结点之后插入s指针所指的结点,其操作是()。

A. p->next=s; s->prior=p;

p->next->prior=s; s->next=p->next;

B. s->prior=p; s->next=p->next;

p->next=s; p->next->prior=s;

C. p->next=s; p->next->prior=s;

s->prior=p; s->next=p->next;

D. s->prior=p; s->next=p->next;

p->next->prior=s; p->next=s;

6.设有一个栈,元素的进栈次序为A, B, C, D, E,下列是不可能的出栈序列( )。

A.A, B, C, D, E B.B, C, D, E, A

《数据结构》习题集:第3章栈和队列

《数据结构》习题集:第3章栈和队列

《数据结构》习题集:第3章栈和队列

第3章栈和队列

一、选择题

1.栈结构通常采用的两种存储结构是()。

A、顺序存储结构和链表存储结构

B、散列和索引方式

C、链表存储结构和数组

D、线性链表结构和非线性存储结构

2.设栈ST 用顺序存储结构表示,则栈ST 为空的条件是()

A、ST.top-ST.base<>0

B、ST.top-ST.base==0

C、ST.top-ST.base<>n

D、ST.top-ST.base==n

3.向一个栈顶指针为HS 的链栈中插入一个s 结点时,则执行()

A、HS->next=s;

B、s->next=HS->next;HS->next=s;

C、s->next=HS;HS=s;

D、s->next=HS;HS=HS->next;

4.从一个栈顶指针为HS 的链栈中删除一个结点,用x 保存被删除结点的值,则执行()

A 、x=HS;HS=HS->next;

B 、HS=HS->next;x=HS->data;

C 、x=HS->data;HS=HS->next;

D 、s->next=Hs;Hs=HS->next;

5.表达式a*(b+c)-d 的后缀表达式为()

A、abcdd+-

B、abc+*d-

C、abc*+d-

D、-+*abcd

6.中缀表达式A-(B+C/D)*E 的后缀形式是()

A、AB-C+D/E*

B、ABC+D/E*

C、ABCD/E*+-

D、ABCD/+E*-

7.一个队列的入列序列是1,2,3,4,则队列的输出序列是()

栈和队列习题及答案

栈和队列习题及答案

栈和队列习题及答案

【篇一:栈和队列练习题答案】

xt>一、填空题

1. 线性表、栈和队列都是结构,可以在线性表的在栈顶插入和删除元素;对于队列只能在队尾插入和队首删除元素。

2. 栈是一种特殊的线性表,允许插入和删除运算的一端称为。不允许插入和删除运算的一端称为栈底。

3. 是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。

二、判断正误

(√)1. 栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。(√)2. 对于不同的使用者,一个表结构既可以是栈,也可以是队列,也可以是线性表。

正确,都是线性逻辑结构,栈和队列其实是特殊的线性表,对运算的定义略有不同而已。

错,他们都是线性逻辑结构,栈和队列其实是特殊的线性表,对运算的定义略有不同而已。

(√)4. 栈和队列的存储方式既可是顺序方式,也可是链接方式。(√)5. 两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底

分别设在这片内存空间的两端。

错,有可能。

三、单项选择题

(b)1.栈中元素的进出原则是

A.先进先出B.后进先出C.栈空则进D.栈满则出

(c)2.若已知一个栈的入栈序列是1,2,3,?,n,其输出序列为p1,p2,p3,?,pn,若p1=n,则pi为

A.i B.n-iC.n-i+1 D.不确定

解释:当p1=n,即n是最先出栈的,根据栈的原理,n必定是最后入栈的(事实上题目已经表明了),那么输入顺序必定是1,2,3,?,n,则出栈的序列是n,?,3,2,1。

(若不要求顺序出栈,则输出序列不确定)

栈和队列练习题答案

栈和队列练习题答案

栈和队列(答案)

1. 一个栈的入栈序列a,b,c,d,e,则栈的不可能的输出序列是__ C __。

A. edcba

B. decba

C. dceab

D. abcde

2. 若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为__ C __。

A. i

B. n=i

C. n-i+1

D. 不确定

3. 栈结构通常采用的两种存储结构是__ A __。

A. 顺序存储结构和链式存储结构

散列方式和索引方式

链表存储结构和数组

线性存储结构和非线性存储结构

4. 判定一个顺序栈ST(最多元素为m0)为空的条件是_ B ___。

A. top !=0

B. top= =0

C. top !=m0

D. top= =m0-1

5. 判定一个顺序栈ST(最多元素为m0)为栈满的条件是__ D __。

A. top!=0

B. top= =0

C. top!=m0

D. top= =m0-1

6. PUSH 和POP 命令常用于(C)操作。

A 队列

B 数组

C 栈

D 记录

7. 向一个栈顶指针为HS的链栈中插入一个s所指结点时,则执行__ C __。(不带空的头结点)

A. HS—>next=s;

B. s—>next= HS—>next; HS—>next=s;

C. s—>next= HS; HS=s;

D. s—>next= HS; HS= HS—>next;

8. 从一个栈顶指针为HS的链栈中删除一个结点时,用x 保存被删结点的值,则执行_ B _ __。(不带空的头结点)

栈和队列习题及答案

栈和队列习题及答案

栈和队列习题及答案

第三章栈和队列

⼀、选择题

1、⼀个栈的输⼊序列为:a,b,c,d,e,则栈的不可能输出的序列是()。

A. a,b,c,d,e

B. d,e,c,b,a

C. d,c,e,a,b

D. e,d,c,b,a

2、判断⼀个循环队列Q(最多n个元素)为满的条件是()。

A. Q->rear==Q->front

B. Q->rear==Q->front+1

C. Q->front==(Q->rear+1)%n

D. Q->front==(Q->rear-1)%n

3、设计⼀个判别表达式中括号是否配对的算法,采⽤()数据结构最佳。

A. 顺序表

B. 链表

C. 队列

D. 栈

4、带头结点的单链表head为空的判定条件是()。

A. head==NULL

B. head->next==NULL

C. head->next!=NULL

D. head!=NULL

5、⼀个栈的输⼊序列为:1,2,3,4,则栈的不可能输出的序列是()。

A. 1243

B. 2134

C. 1432

D. 4312

E. 3214

6、若⽤⼀个⼤⼩为6的数组来实现循环队列,且当rear和front的值分别为0,3。当从队列中删除⼀个元素,再加⼊两个元素后,rear和front 的值分别为()。

A. 1和5

B. 2和4

C. 4和2

D. 5和1

7、队列的插⼊操作是在()。

A. 队尾

B. 队头

C. 队列任意位置

D. 队头元素后

8、循环队列的队头和队尾指针分别为front和rear,则判断循环队列为空的条件是()。

栈和队列习题

栈和队列习题

栈和队列习题

第三章栈和队列

1.栈的特点是(),队列的特点是().

A.先进先出

B.先进后出

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

A.都是先进后出

B.都是先进先出

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

D.没有共同点

3.一个栈的进栈序列是a,b,c,d,e,则栈的不可能的输出序列是().

A.edcba

B.decba

C.dceab

D.abcde

4.若已知一个栈的进栈序列是1,2,3,……,n,其输出序列为p1,p2,p3,……,p n。若p1=n,则p i(1≤i<n)为().< p="">

A.i

B.n=i

C.n-i+1

D.不确定

5.若已知一个栈的进栈序列是1,2,3,……,n,其输出序列为p1,p2,p3,……,p n。若p n=n,则p i(1≤i<n)为().< p="">

A.i

B.n=i

C.n-i+1

D.不确定

6.若已知一个栈的进栈序列是1,2,3,……,n,其输出序列为p1,p2,p3,……,p n。若p1=3,则p2为().

A.可能是2

B.不可能是2

C.可能是1

D.一定是1

7. 若已知一个栈的进栈序列是p1,p2,p3,……,p n,其输出序列为1,2,3,……,n。若p3=1,则p1为().

A.可能是2

B.一定是2

C.不可能是2

D.不可能是3

8.若已知一个栈的进栈序列是p1,p2,p3,……,p n,其输出序列为1,2,3,……,n。若p n=1,则p i(1≤i<n)为()< p="">

A.i

B.n=i

C.n-i+1

D.不确定

9.一个队列的入队序列是1,2,3,4,则队列的输出序列是().

第3章栈和队列习题参考答案

第3章栈和队列习题参考答案

第3章栈和队列习题参考答案

第3章栈和队列

一、基础知识题

3.1有五个数依次进栈:1,2,3,4,5。在各种出栈的序列中,以3,4先出的

序列有哪几个。(3在4之前出栈)。

【解答】34215 ,34251,34521

3.2铁路进行列车调度时,常把站台设计成栈式结构,若进站的六辆列车顺序为:

1,2,3,4,5,6,那么是否能够得到435612,325641,154623和135426的出站序列,如果不能,说明为什么不能;如果能,说明如何得到(即写出"进栈"或"出栈"的序列)。

【解答】输入序列为123456,不能得出435612和154623。不能得到435612的理由是,输出序列最后两元素是12,前面4个元素(4356)得到后,栈中元素剩12,且2在栈顶,不可能让栈底元素1在栈顶元素2之前出栈。不能得到154623的理由类似,当栈中元素只剩23,且3在栈顶,2不可能先于3出栈。

得到325641的过程如下:1 2 3顺序入栈,32出栈,得到部分输出序列32;然后45入栈,5出栈,部分输出序列变为325;接着6入栈并退栈,部分输出序列变为3256;最后41退栈,得最终结果325641。

得到135426的过程如下:1入栈并出栈,得到部分输出序列1;然后2和3入栈,3出栈,部分输出序列变为13;接着4和5入栈,5,4和2依次出栈,部分输出序列变为13542;最后6入栈并退栈,得最终结果135426。

3.3若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别

为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?

栈和队列练习题答案

栈和队列练习题答案

第3章栈和队列练习题答案

一、填空题

1. 线性表、栈和队列都是线性结构,可以在线性表的任何位置插入和删除元素;对于栈只能在栈顶插入和删除元素;对于队列只能在队尾插入和队首删除元素。

2. 栈是一种特殊的线性表,允许插入和删除运算的一端称为栈顶。不允许插入和删除运算的一端称为栈底。

3. 队列是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。

二、判断正误

(√)1. 栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。(√)2. 对于不同的使用者,一个表结构既可以是栈,也可以是队列,也可以是线性表。

正确,都是线性逻辑结构,栈和队列其实是特殊的线性表,对运算的定义略有不同而已。

(×)3. 栈和队列是一种非线性数据结构。

错,他们都是线性逻辑结构,栈和队列其实是特殊的线性表,对运算的定义略有不同而已。

(√)4. 栈和队列的存储方式既可是顺序方式,也可是链接方式。

(√)5. 两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。

(×)6. 队是一种插入与删除操作分别在表的两端进行的线性表,是一种先进后出型结构。

错,后半句不对。

(×)7. 一个栈的输入序列是12345,则栈的输出序列不可能是12345。

错,有可能。

三、单项选择题

(B)1.栈中元素的进出原则是

A.先进先出B.后进先出C.栈空则进D.栈满则出

(C)2.若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为

数据结构(栈和队列)习题与答案

数据结构(栈和队列)习题与答案

一、单选题

1、元素A、B、C、D依次进栈后,栈顶元素是 _______。

A.B

B.D

C.C

D.A

正确答案:B

2、经过以下运算后, x的值是 _______。

InitStack (s); Push(s, a); Push(s, b); Pop(s, x); GetTop(s,x)

A.0

B.b

C.a

D.1

正确答案:C

3、经过以下栈运算后,StackEmpty(s)的值是 _______。

InitStack (s); Push(s, a); Push(s, b); Pop(s, x); Pop(s,y)

A.0

B.b

C.a

D.1

正确答案:D

4、已知一个栈的进栈序列是ABC,出栈序列为CBA,经过栈的操作是 _______。

A.push, push, push, pop, pop, pop

B.push,pop,push, push,pop, pop

C.push, push,pop, pop,push,pop

D.push,pop,push,pop,push,pop

正确答案:A

5、若元素a、b、c、d、e、f依次进栈,允许进栈、退栈的操作交替进行,但不允许

连续3次退栈工作,则不可能得到的出栈序列是 _______。

A. bcaefd

B.afedcb

C.cbdaef

D.dcebfa

正确答案:B

6、设一个栈的输入序列为A、B、C、D,则借助一个栈所得的输出序列不可能是

_______。

A.DCBA

B.DABC

C.ACDB

D.ABCD

正确答案:B

7、一个栈的进栈序列是abcde,则栈的不可能的输出序列是 _______。

第三章栈和队列习题答案

第三章栈和队列习题答案

第三章栈和队列习题答案

一、基础知识题

3.1 设将整数1,2,3,4 依次进栈,但只要出栈时栈非空,则可将出栈操作按任何次序夹入其中,请回答下述问题:

(1) 若入、出栈次序为Push(1), Pop(),Push(2),Push(3), Pop(), Pop( ),Push(4), Pop( ),则出栈的数字序列为何(这里Push(i)表示i进栈,Pop()表示出栈)?

(2) 能否得到出栈序列1423 和1432?并说明为什么不能得到或者如何得到。

(3) 请分析1,2 ,3 ,4 的24 种排列中,哪些序列是可以通过相应的入出栈操作得到的。

答:(1)出栈序列为:1324

(2) 不能得到1423 序列。因为要得到14 的出栈序列,则应做

Push(1),Pop(),Push(2),Push (3),Push(4),Pop()o这样,3在栈顶,2在栈底,所以不能得到23的出栈序列。能得到1432 的出栈序列。具体操作为:Push(1), Pop(),Push(2),Push(3),Push(4),Pop(),Pop(),Pop()

(3) 在1,2 ,3 ,4 的24 种排列中,可通过相应入出栈操作得到的序列是:

1234,1243,1324,1342,1432,2134,2143,2314,2341,2431,3214,3241,3421,4321

不能得到的序列是:

1423,2413,3124,3142,3412,4123,4132,4213,4231,4312

3.2 链栈中为何不设置头结点? 答:链栈不需要在头部附加头结点,因为栈都是在头部进行操作的,如果加了头结点,等于要对头结点之后的结点进行操作,反而使算法更复杂,所以只要有链表的头指针就可以了。

数据结构第3章 栈与队列习题

数据结构第3章 栈与队列习题

第3章栈与队列

一、单项选择题

1.元素A、B、C、D依次进顺序栈后,栈顶元素是,栈底元素是。

A.A B.B

C.C D.D

2.经过以下栈运算后,x的值是。

InitStack(s);Push(s,a);Push(s,b);Pop(s,x);GetTop(s,x);

A.a B.b

C.1 D.0

3.已知一个栈的进栈序列是ABC,出栈序列为CBA,经过的栈操作是。

A.push,pop,push,pop,push,pop B.push,push,push,pop,pop,pop C.push,push,pop,pop,push,pop D.push,pop,push,push,pop,pop 4.设一个栈的输入序列为A、B、C、D,则借助一个栈所得到的序列是。

A.A,B,C,D B.D,C,B,A

C.A,C,D,B D.D,A,B,C

5.一个栈的进栈序列是a,b,c,d,e,则栈的不可能的输出序列是。

A.edcba B.decba

C.dceab D.abcde

6.已知一个栈的进栈序列是1,2,3,……,n,其输出序列的第一个元素是i,则第j个出栈元素是。

A.i B.n-i

C.j-i+1 D.不确定

7.已知一个栈的进栈序列是1,2,3,……,n,其输出序列是p1,p2,…,Pn,若p1=n,则pi的值。

A.i B.n-i

C.n-i+1 D.不确定

8.设n个元素进栈序列是1,2,3,……,n,其输出序列是p

1,p

2

,…,p

n

,若p

1

=3,

则p

2

的值。

A.一定是2 B.一定是1 C.不可能是1 D.以上都不对

数据结构习题第三章栈和队列答案

数据结构习题第三章栈和队列答案

第三章栈和队列

一、选择题

二、判断题

部份答案解释如下。

1、尾递归的消除就不需用栈

2、这个数是前序序列为1,2,3,…,n,所能取得的不相似的二叉树的数量。

三、填空题

1、操作受限(或限定仅在表尾进行插入和删除操作)后进先出

2、栈

3、3 1 2

4、23 100CH

5、0 n+1 top[1]+1=top[2]

六、两栈顶指针值相减的绝对值为1(或两栈顶指针相邻)。

7、(1)满(2)空(3)n (4)栈底(5)两栈顶指针相邻(即值之差的绝对值为1)

八、链式存储结构九、S×SS×S××10、data[++top]=x;

1一、(注:表达式中的点(.)表示将数隔开,如是三个数)

1二、假溢出时大量移动数据元素。

13、(M+1) MOD N (M+1)% N;14、队列1五、先进先出1

六、先进先出

17、s=(LinkedList)malloc(sizeof(LNode));s->data=x;s->next=r->next;

r->next=s;r=s;

1八、捐躯一个存储单元设标记

1九、(TAIL+1)MOD M=FRONT (数组下标0到M-1,若必然利用1到M,则取模为0者,值改取M

20、=+1)%(M+1);return);+1)%(M+1)==;

2一、栈2二、(rear-front+m)% m;23、(R-P+N)% N;

24、(1)a[i]或a[1] (2)a[i] (3)pop(s)或s[1];

2五、(1)PUSH(OPTR,w)(2)POP(OPTR)(3)PUSH(OPND,operate (a,theta,b))

《数据结构》习题集:第3章栈和队列

《数据结构》习题集:第3章栈和队列

《数据结构》习题集:第3章栈和队列

第3章栈和队列

一、选择题

1.栈结构通常采用的两种存储结构是(A )。

A、顺序存储结构和链表存储结构

B、散列和索引方式

C、链表存储结构和数组

D、线性链表结构和非线性存储结构

2.设栈ST 用顺序存储结构表示,则栈ST 为空的条件是( B )

A、ST.top-ST.base<>0

B、ST.top-ST.base==0

C、ST.top-ST.base<>n

D、ST.top-ST.base==n

3.向一个栈顶指针为HS 的链栈中插入一个s 结点时,则执行( C )

A、HS->next=s;

B、s->next=HS->next;HS->next=s;

C、s->next=HS;HS=s;

D、s->next=HS;HS=HS->next;

4.从一个栈顶指针为HS 的链栈中删除一个结点,用x 保存被删除结点的值,则执行( C)

A 、x=HS;HS=HS->next;

B 、HS=HS->next;x=HS->data;

C 、x=HS->data;HS=HS->next;

D 、s->next=Hs;Hs=HS->next;

5.表达式a*(b+c)-d 的后缀表达式为( B )

A、abcdd+-

B、abc+*d-

C、abc*+d-

D、-+*abcd

6.中缀表达式A-(B+C/D)*E 的后缀形式是( D )

A、AB-C+D/E*

B、ABC+D/E*

C、ABCD/E*+-

栈与队列习题参考附标准答案

栈与队列习题参考附标准答案

习题三参考答案

备注: 红色字体标明的是与书本内容有改动的内容。

一、选择题

1.在栈中存取数据的原则是( B )。

A.先进先出 B. 先进后出

C. 后进后出

D. 没有限制

2.若将整数1、2、3、4依次进栈,则不可能得到的出栈序列是( D )。

A.1234 B. 1324 C. 4321 D. 1423

3.在链栈中,进行出栈操作时(B )。

A.需要判断栈是否满 B. 需要判断栈是否为空

C. 需要判断栈元素的类型

D. 无需对栈作任何差别

4.在顺序栈中,若栈顶指针top指向栈顶元素的下一个存储单元,且顺序栈的最大容量是maxSize,则顺序栈的判空条件是( A )。

A.top==0 B.top==-1 C. top==maxSize D.top==maxSize-1

5.在顺序栈中,若栈顶指针top指向栈顶元素的下一个存储单元,且顺序栈的最大容量是maxSize。则顺序栈的判满的条件是( C )。

A.top==0 B.top==-1 C. top==maxSize D.top==maxSize-1

6.在队列中存取数据元素的原则是( A )。

A.先进先出 B. 先进后出

C. 后进后出

D. 没有限制

7.在循环顺序队列中,假设以少用一个存储单元的方法来区分队列判满和判空的条件,front 和rear分别为队首和队尾指针,它们分别指向队首元素和队尾元素的下一个存储单元,队列的最大存储容量为maxSize,则队列的判空条件是(A )。

A.front==rear B. front!=rear

C. front==rear+1

数据结构栈与队列习题

数据结构栈与队列习题

第3章栈与队列

一、单项选择题

1.元素A、B、C、D依次进顺序栈后,栈顶元素是,栈底元素是.

A. A

B. B

C. C

D. D

2.经过以下栈运算后,x的值是.

InitStack(s); Push(s,a) Push(s,b) Pop(s,x) GetTop(s,x);

A. a

B. b

C. 1

D. 0

3.一个栈的进栈序列是ABC,出栈序列为CBA经过的栈操作是.

A. push,pop,push,pop,push,pop

B. push,push,push,pop,pop,pop

C. push,push,pop,pop,push,pop

D. push,pop,push,push,pop,pop

4.设一个栈的输入序列为A、B、C、D,那么借助一个栈所得到的序列是 .

A. A,B,C,D

B. D,C,B,A

C. A,C,D,B

D. D,A,B,C

5.一个栈的进栈序列是a, b, c, d, e,那么栈的不可能的输出序列是 .

A. edcba

B. decba

C. dceab

D. abcde

6.一个栈的进栈序列是1 , 2, 3,……,n其输出序列的第一个元素是i,那么第j个出栈元

素是.

A. i

B. n-i

C. j-i+1

D.不确定

7.一个栈的进栈序列是 1 , 2, 3, ••…;n,其输出序列是

p1,p2,…印假设

p1=n,贝U pi 的值o

A. i

B. n-i

C. n-i+1

D.不确定

8. .......................................................................... 设n个兀素进栈序歹0是1, 2, 3, ;n,其输出序歹0是p1,p2, ;p n,假设p1=3,

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

第三章栈和队列习题答案

一、基础知识题

设将整数1,2,3,4依次进栈,但只要出栈时栈非空,则可将出栈操作按任何次序夹入其中,请回答下述问题:

(1)若入、出栈次序为Push(1), Pop(),Push(2),Push(3), Pop(), Pop( ),Push(4), Pop( ),则出栈的数字序列为何(这里Push(i)表示i进栈,Pop( )表示出栈)

(2)能否得到出栈序列1423和1432并说明为什么不能得到或者如何得到。

(3)请分析1,2 ,3 ,4 的24种排列中,哪些序列是可以通过相应的入出栈操作得到的。

答:(1)出栈序列为:1324

(2)不能得到1423序列。因为要得到14的出栈序列,则应做Push(1),Pop(),Push(2),Push

(3),Push(4),Pop()。这样,3在栈顶,2在栈底,所以不能得到23的出栈序列。能得到1432的出栈序列。具体操作为:Push(1), Pop(),Push(2),Push(3),Push(4),Pop(),Pop(),Pop()。

(3)在1,2 ,3 ,4 的24种排列中,可通过相应入出栈操作得到的序列是:

1234,1243,1324,1342,1432,2134,2143,2314,2341,2431,3214,3241,3421,4321

不能得到的序列是:

1423,2413,3124,3142,3412,4123,4132,4213,4231,4312

链栈中为何不设置头结点

答:链栈不需要在头部附加头结点,因为栈都是在头部进行操作的,如果加了头结点,等于要对头结点之后的结点进行操作,反而使算法更复杂,所以只要有链表的头指针就可以了。

循环队列的优点是什么如何判别它的空和满

答:循环队列的优点是:它可以克服顺序队列的"假上溢"现象,能够使存储队列的向量空间得到充分的利用。判别循环队列的"空"或"满"不能以头尾指针是否相等来确定,一般是通过以下几种方法:一是另设一布尔变量来区别队列的空和满。二是少用一个元素的空间,每次入队前测试入队后头尾指针是否会重合,如果会重合就认为队列已满。三是设置一计数器记录队列中元素总数,不仅可判别空或满,还可以得到队列中元素的个数。

设长度为n的链队用单循环链表表示,若设头指针,则入队出队操作的时间为何若只设尾指针呢答:当只设头指针时,出队的时间为1,而入队的时间需要n,因为每次入队均需从头指针开始查找,找到最后一个元素时方可进行入队操作。若只设尾指针,则出入队时间均为1。因为是循环链表,尾指针所指的下一个元素就是头指针所指元素,所以出队时不需要遍历整个队列。

指出下述程序段的功能是什么

(1) void Demo1(SeqStack *S){

int i; arr[64] ; n=0 ;

while ( StackEmpty(S)) arr[n++]=Pop(S);

for (i=0, i< n; i++) Push(S, arr[i]);

} .. // 设Q1已有内容,Q2已初始化过

while ( ! QueueEmpty( &Q1) )

{ x=DeQueue( &Q1 ) ; EnQueue(&Q2, x); n++;}

for (i=0; i< n; i++)

{ x=DeQueue(&Q2) ;

EnQueue( &Q1, x) ; EnQueue( &Q2, x);}

答:

(1)程序段的功能是将一栈中的元素按反序重新排列,也就是原来在栈顶的元素放到栈底,栈底的

元素放到栈顶。此栈中元素个数限制在64个以内。

(2)程序段的功能是利用tmp栈将一个非空栈s1的所有元素按原样复制到一个栈s2当中去。

(3)程序段的功能是利用栈T,将一个非空栈S中值等于m的元素全部删去。

(4)程序段的功能是将一个循环队列Q经过S栈的处理,反向排列,原来的队头变成队尾,原来的队尾变成队头。

(5)这段程序的功能是将队列1的所有元素复制到队列2中去,但其执行过程是先把队列1的元素全部出队,进入队列2,然后再把队列2的元素复制到队列1中。

二、算法设计题

回文是指正读反读均相同的字符序列,如"abba"和"abdba"均是回文,但"good"不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)

解:根据提示,算法可设计为:

//以下为顺序栈的存储结构定义

#define StackSize 100 //假定预分配的栈空间最多为100个元素

typedef char DataType;//假定栈元素的数据类型为字符

typedef struct{

DataType data[StackSize];

int top;

}SeqStack;

int IsHuiwen( char *t)

{//判断t字符向量是否为回文,若是,返回1,否则返回0

SeqStack s;

int i , len;

char temp;

InitStack( &s);

len=strlen(t); //求向量长度

for ( i=0; i

Push( &s, t[i]);

while( !EmptyStack( &s))

{// 每弹出一个字符与相应字符比较

temp=Pop (&s);

if( temp!=S[i]) return 0 ;// 不等则返回0

else i++;

}

return 1 ; // 比较完毕均相等则返回 1

}

利用栈的基本操作,写一个将栈S中所有结点均删去的算法void ClearStack( SeqStack *S),并说明S 为何要作为指针参数

解:算法如下

void ClearStack (SeqStack *S)

{ // 删除栈中所有结点

S->Top = -1; //其实只是将栈置空

}

相关文档
最新文档