数据结构第三章习题

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

数据结构第三章习题

3.1 单项选择题

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

A. edcba

B. Decba

C. Dceab

D. abcde

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

A.i.

B. n=I

C. n- i+1

D.不确定4.栈结构通常采用的两种存储结构是。

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

B. 散链方式和索引方式

C.链表存储结构和数组

D. 线性存储结构和非线性存储结构5.判定一个栈ST(最多元素为m0)为空的条件是。

A. ST->top<>0

B. ST->top=0

C.ST->top<>m0

D.ST->top=m0

6.判定一个栈ST(最多元素为m0)为栈满的条件是。

A. ST->top!=0

B.ST->top==0

C.ST->top!=m0

D.ST->top==m0

7.栈的特点是,队列的特点是。

A先进先出 B. 先进后出

8. 一个队列的入栈序列是1,2,3,4,则队列的输出序列是。

A. 4,3,2,1

B. 1,2,3,4

C. 1,4,3,2

D. 3,2,4,1

9. 判定一个队列QU(最多元素为m0)为空的条件是。

A.QU->rear- QU->front==m0

B.QU->rear- QU->front-1==m0

C.QU->front== QU->rear

D. QU->front== QU->rear+1

10.判定一个队列QU(最多元素为m0)为满队列的条件是。

A.QU->rear- QU->front==m0

B.QU->rear- QU->front-1==m0

C.QU->front== QU->rear

D.QU->front== QU->rear+1

11. 判定一个循环队列QU(最多元素为m0)为空的条件是。

A. QU->front== (QU->rear+1)%m0

B. QU->front!= (QU->rear+1)%m0

C.QU->front== QU->rear

D.QU->front!= QU->rear

12. 判定一个循环队列QU(最多元素为m0)为满队列的条件是。

A. QU->front== (QU->rear+1)%m0

B. QU->front!= (QU->rear+1)%m0

C.QU->front== QU->rear

D.QU->front!= QU->rear+1

12. 向一个栈顶指针为HS的链栈中插入一个s所指结点时,则执行。

HS->next=s;

A. s->next=HS->next; HS->next=s;

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

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

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

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

B. x=HS->data;

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

D. x=HS->data; HS=HS->next;

14. 在一个链队中,假设f和r分别为队首和队尾指针,则插入s所指结点的运算时。

A. f->next=s; f=s;

B. r->next=s;r=s;

C. s->next=r; r=s;

D. s->next=f; f=s;

15. 在一个链队中,假设f和r分别为队首和队尾指针,则删除一个结点的运算时。

A. r=f->next;

B. r=r->next;

C. f=f->next;

D. f=r-next;

3.2 填空题

4.向栈中压入元素的操作是

5.对栈进行退栈的操作是

6.在一个循环队列中,队首指针指向队首元素的

7.从循环队列中删除一个元素时,其操作是

8.在具有个单元的循环队列中,队满时共有个元素

9. 在栈顶指针为HS的链栈中,判定栈空的条件是。

10. 在栈顶指针为HS的链栈中,计算该链站中结点个数的函数时。

11. 在HQ的链队中,判定只有一个结点的条件是。

12. 在HQ的链队中,计算该链队中结点个数的函数是。

3.3 顺序栈习题解析

1. 对于一个栈,给出输入项A,B,C. 如果输入项序列由A,B,C所组成,是给出

全部可能的输出序列。

解:本题利用栈的“后进先出”的特点,有如下几种情况:

A进A出B进B出C进C出产生输出序列ABC

A进A出B进C进C出B出产生输出序列ACB

A进B进B出 A出 C进C出产生输出序列BAC

A进B进B出C进C出A出产生输出序列BCA

A进B进C进C出B出 A出产生输出序列CBA

不可能产生的输出序列CAB

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底栈1顶栈2顶栈2底

图2.3 共享栈

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

void push(x,i)

int x,I

{

相关文档
最新文档