第一范文网 - 专业文章范例文档资料分享平台

数据结构第三章习题答案

来源:用户分享 时间:2025/7/24 11:54:21 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

数据结构第三章习题答案

【篇一:数据结构(c语言版)第三章习题解答】

分别写出对链栈的入栈和出栈操作的算法。 链栈的结点类型定义如下: typedef struct stacknode { selemtype data;

struct stacknode *next; }stacknode, *linkstack; 入栈操作:

status push( linkstack s, selemtype e)

{ p=(linkstack)malloc(sizeof(stacknode)); if (!p) return error; p-data=e; p-next=s; s=p;

return ok; }

出栈操作:

status pop(linkstack s, selemtype e) { if (!s) return error; p=s;

s=p-next; free(p); return ok; }

p24/3.15

假设以顺序存储结构实现一个双向栈,即在一维数组的存储空间中存在着两个栈,它们的栈底分别设在数组的两个端点。试编写实现这个双向栈tws的三个操作:初始化inistack(tws),入栈

push(tws,i,x)和出栈pop(tws,i)的算法,其中i为0或1,用以分别指示设在数组两端的两个栈,并讨论按过程(正/误状态变量可设为变参)或函数设计这些操作算法各有什么优缺点。 双栈的结构类型定义如下: typedef struct{

elemtype *base[2]; elemtype *top[2];

}bdstacktype; //双向栈类型 栈的初始化操作:

status init_stack(bdstacktype tws,int m) //初始化一个大小为m的双向栈tws

{ tws.base[0]=(elemtype*)malloc(m*sizeof(elemtype)); tws.base[1]=tws.base[0]+m-1; tws.top[0]=tws.base[0]; tws.top[1]=tws.base[1]; return ok; }

入栈操作:

status push(bdstacktype tws,int i,elemtype x) // x入栈,i=0表示低端栈,i=1表示高端栈

{ if (tws.top[0]tws.top[1]) return overflow; //注意此时的栈满条件

if (i==0) *tws.top[0]++=x; else

if (i==1) *tws.top[1]--=x; else return error; return ok; }

出栈操作:

status pop(bdstacktype tws, int i, elemtype x) // x出栈,i=0表示低端栈,i=1表示高端栈 { if (i==0)

{ if (tws.top[0]==tws.base[0]) return overflow; x=*--tws.top[0]; }

else if (i==1)

{ if (tws.top[1]==tws.base[1]) return overflow; x=*++tws.top[1]; }

else return error; return ok; }

p24/3.18

试写一个判别表达式中开、闭括号是否配对出现的算法。 status bracket_test(char *exp) //判别表达式中小括号是否匹配

{

count=0;

for (p=exp; *p; p++) {

if (*p== ( ) count++;

else if (*p== ) ) count--; if (count0) return error; }

if (count) return error; //注意括号不匹配的两种情况 return ok; }

p25/3.28

假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的队列初始化、八队列和出队列的算法。

依题意,定义本题队列的结点类型如下typedef struct cqnode { int data;

struct linknode *next; }cqnode ,*cqlink; 初始化操作:

void initciqueue(cqlink rear)

rear=(cqnode*)malloc(sizeof(cqnode)); //产生一个头结点,并使队尾指针指向它 rear-next=rear;//形成循环 }

入队操作:

void enciqueue(ciqueue rear, int x)

//把元素x插入循环链表表示的队列rear, rear指向队尾元素, //rear-next指向头结点, rear-next-next指向队头元素

【篇二:数据结构第三章习题】

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-top0 b. st-top=0 c.st-topm0 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

搜索更多关于: 数据结构第三章习题答案 的文档
数据结构第三章习题答案.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c2b9h82xsrm37lyd0yjbf83hrt8bf1m008u0_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top