ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:18.66KB ,
资源ID:7740053      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7740053.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构教程习题答案 李蓉蓉 安杨等编著第三版 第二章答案.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构教程习题答案 李蓉蓉 安杨等编著第三版 第二章答案.docx

1、数据结构教程习题答案 李蓉蓉 安杨等编著第三版 第二章答案 2.2/* 题目:设计一个算法,将x插入到有序表中的适当位置,并且使插入后仍未有序表 设计:狼影 时间:2012.9.14*/# include # define size 100/定义节点typedef struct node int datasize; int length;NODE;/函数的声明void insertlist(NODE *arrylist, int n);void creatlist(NODE *arrylist);main() NODE arrylist; int n, i; printf(输入数据的个数n);

2、 scanf(%d, &arrylist.length); creatlist(&arrylist); printf(请输入要插入的数字n); scanf(%d, &n); insertlist(&arrylist, n); /输出插入后的结果 printf(插入后的结果是n); for(i = 0; iarrylist.length; i+) printf(%d , arrylist.datai); printf(n);/创建线性表void creatlist(NODE *arrylist) int i; printf(输入有序的数据n); for(i = 0; ilength; i+) s

3、canf(%d, &arrylist-datai); /对数值进行插入void insertlist(NODE *arrylist, int n) int i; int j = arrylist-length; for(i = 0; ilength; i+) if(narrylist-datai); else for(; ji; j-) arrylist-dataj = arrylist-dataj-1; arrylist-datai = n; arrylist-length+; return; arrylist-dataarrylist-length = n; arrylist-length

4、+;/*输入数据的个数3输入有序的数据1 2 3请输入要插入的数字0插入后的结果是0 1 2 3Press any key to continue*/ 2.3/* 题目:将一个带头结点的数据域依次为a1 a2 a3 a4.an 的链表进行逆置 实践:狼影 时间:2012.9.14*/# include # include /定义节点typedef struct node int data; struct node *pNext;NODE;/创建链表void creatlist(NODE *pHead, int n);void traverse(NODE *pHead);void printli

5、st(NODE *pHead);main() int n; NODE *pHead = (NODE *)malloc(sizeof(NODE); if(NULL = pHead) printf(内存分配错误n); exit(-1); pHead-pNext = NULL; printf(输入节点的个数n); scanf(%d, &n); creatlist(pHead, n); traverse(pHead); printf(转置后的数据是n); printlist(pHead);/创建链表void creatlist(NODE *pHead, int n) NODE *pNew; NODE

6、*pNow = pHead; int i; printf(输入数据n); for(i = 0; ipNext = NULL; scanf(%d, &pNew-data); pNow-pNext = pNew; pNow = pNew; /进行转置void traverse(NODE *pHead) NODE *pNow; NODE *pNew = pHead-pNext; pHead-pNext = NULL; while(pNew != NULL) pNow = pNew; pNew = pNow-pNext; pNow-pNext = pHead-pNext; pHead-pNext =

7、pNow; /进行输出void printlist(NODE *pHead) NODE *pNow = pHead-pNext; /利用前叉法进行表的重建 while(NULL != pNow) printf(%d , pNow-data); pNow = pNow-pNext; printf(n);/*输入节点的个数4输入数据1 2 3 4转置后的数据是4 3 2 1Press any key to continue*/2.4/*题目:设有一个双链表,每个节点中除有prior,data和next三个域外,还有一个访问频度域,在链表被启用之前,其值均初始化为0 ,每当进行定位操作时零元素值为x

8、的节点中的frep域的值加一,并调整表中节点的次序,使其按访问频度的递减排列 以便使频繁访问的节点总是靠近表头,尝试编写符合上述要求的算法设计:狼影时间:2012.9.14*/# include # include # define size 5 /在这修改查找的次数/定义节点typedef struct node int data; int frep; struct node *pRior; struct node *pNext;NODE;/函数声明NODE *initlist(void);void creatlist(NODE *pHead, int n);void printlist(N

9、ODE *pHead);int locatelist(NODE *pHead, int e);void Insertsort(NODE *pHead);main() int n; int i; int e; int pos; int number = size; NODE *pHead; pHead = initlist(); printf(输入节点个数n); scanf(%d, &n); creatlist(pHead, n); printf(你可以查找%d次数的位置n, number); for(i = 0; ipNext = NULL; pHead-pRior = NULL; retur

10、n pHead;/创建链表void creatlist(NODE*pHead, int n) int i; NODE *pNow = pHead; NODE *pNew; printf(输入数据n); for(i = 0; ifrep = 0; scanf(%d, &pNew-data); pNew-pNext = NULL; pNew-pRior = pNow; pNow-pNext = pNew; pNow = pNew; /对链表进行输出void printlist(NODE *pHead) NODE *pNow = pHead-pNext; while(NULL != pNow) pr

11、intf(节点的数据%d-, pNow-data); printf(被查的频率%dn, pNow-frep); printf(n); pNow = pNow-pNext; /对数据进行定位int locatelist(NODE *pHead, int e) int pos = 0; NODE *pNow = pHead-pNext; while(pNow != NULL) pos +; if( pNow-data = e) pNow-frep +; return pos; pNow = pNow-pNext; if(NULL = pNow) printf(没有要查找的数据n); return

12、0; /对链表进行排序void Insertsort(NODE *pHead) NODE *pNow1 = pHead-pNext; NODE *pNew = pHead; NODE *pNow2; if(NULL != pNow1) pNow2 = pNow1-pNext; pNow1-pNext = NULL; pNow1 = pNow2; while(NULL != pNow1) pNow2 = pNow1-pNext; pNew = pHead; while(pNew-pNext != NULL & pNew-pNext-frep = pNow1-frep) pNew = pNew-p

13、Next; pNow1-pNext = pNew-pNext; pNow1-pRior = pNew; if(NULL != pNew-pNext) pNew-pNext-pRior = pNow1; pNew-pNext = pNow1; pNow1 = pNow2; /*输入节点个数4输入数据1 2 3 4你可以查找5次数的位置输入要查找的数的1你要查找的数据的位置是1查找后链表的次序节点的数据1-被查的频率1节点的数据2-被查的频率0节点的数据3-被查的频率0节点的数据4-被查的频率0输入要查找的数的2你要查找的数据的位置是2查找后链表的次序节点的数据1-被查的频率1节点的数据2-被查的

14、频率1节点的数据3-被查的频率0节点的数据4-被查的频率0输入要查找的数的2你要查找的数据的位置是2查找后链表的次序节点的数据2-被查的频率2节点的数据1-被查的频率1节点的数据3-被查的频率0节点的数据4-被查的频率0输入要查找的数的3你要查找的数据的位置是3查找后链表的次序节点的数据2-被查的频率2节点的数据1-被查的频率1节点的数据3-被查的频率1节点的数据4-被查的频率0输入要查找的数的3你要查找的数据的位置是3查找后链表的次序节点的数据2-被查的频率2节点的数据3-被查的频率2节点的数据1-被查的频率1节点的数据4-被查的频率0Press any key to continue*/2

15、.5/* 题目:设ha = a1,a2, a3, a4.an, hb = b1, b2, b3, b4.bn是两个带头结点的循环单链表,将这两个表合并为带 头结点的循环单链表hc 设计:狼影 时间:2012.9.15*/# include # include # define size 5 /节点的个数/定义节点typedef struct node int s; int data; struct node *pNext;NODE;/函数声明void creatlist(NODE *pHead);void merge(NODE *pHead1, NODE *pHead2);void print

16、list(NODE *pHead);main() NODE *pHead1; NODE *pHead2; pHead1 = (NODE *)malloc(sizeof(NODE *); if(NULL = pHead1) printf(内存分配错误n); exit(-1); pHead1-pNext = NULL; pHead2 = (NODE *)malloc(sizeof(NODE *); if(NULL = pHead2) printf(内存分配错误n); exit(-1); pHead2-pNext = NULL; /创建链表 creatlist(pHead1); creatlist(

17、pHead2); /在这里我的理解只是将两个链表简单的连在一起并没有,其他判断是否有相同数据的条件 merge(pHead1, pHead2); printf(输出连接后的链表n); printlist(pHead1);/创建链表void creatlist(NODE *pHead) NODE *pNow = pHead; NODE *pNew; int i; printf(输入%d个数据n, size); for(i = 0; ipNext = NULL; scanf(%d, &pNew-data); if(i = size-1) pNew-s = 1; else pNew-s = 0; p

18、Now-pNext = pNew; pNow = pNew; pNow-pNext = pHead;/将两个链表合并(合并到pHead1的后面)void merge(NODE *pHead1, NODE *pHead2) NODE *pNow2 = pHead2-pNext; NODE *pNew = pHead2-pNext; NODE *pNow1 = pHead1-pNext; while(pNow1-s != 1) pNow1 = pNow1-pNext; while(pNow2-s != 1) pNow2 = pNow2-pNext; pNow1-pNext = pNew; pNow

19、1-s = 0; pNow2-pNext = pHead1; free(pHead2);/打印链表void printlist(NODE *pHead) NODE *pNow = pHead-pNext; while(pNow-s != 1) printf(%d , pNow-data); pNow = pNow-pNext; printf(%d, pNow-data); printf(n);/*输入5个数据1 2 3 4 5输入5个数据6 7 8 9 0输出连接后的链表1 2 3 4 5 6 7 8 9 0Press any key to continue*/2.6/* 题目:设非空线性表h

20、a,hb都用带头结点的循环双链表表示,设计一个算法Inset(ha, hb, i) i = 0, 将线性表hb插到线性表ha的最前面;当i0时,将线性表hb插入到线性表ha中第i个节点的 后面,当i大于等于线性表ha的长度,将线性表hb插入到线性表的最后面 设计;狼影 时间:2012.9.15*/# include # include /定义节点typedef struct node int data; struct node *pNext; struct node *pRior;NODE;typedef struct d NODE *pHead1; NODE *pHead2;DATA;int

21、 n; /函数声明void creatlist(DATA *elem);void printlist(NODE *pHead);void Insertlist(DATA *elem, int i);main() int i; DATA *elem = (DATA *)malloc(sizeof(DATA); if(NULL = elem) printf(内存分配失败n); exit(-1); elem-pHead1 = NULL; elem-pHead2 = NULL; creatlist(elem); printf(请输入插入的位置n); scanf(%d, &i); Insertlist(elem, i); if(i = 0) printlist(elem-pHead2); else if(i0) printlist(elem-pHead1); else printf(i应输入正值n); /创建非空链表void creatlist(DATA *elem) int i; NODE *pNow, *pNew; printf(输入结点的个数n); scanf(%d, &n); /创建第一个链表 printf(创建第一个链表n); printf(输入数据n); for(i = 0; in; i+) pNew = (NODE *)malloc(sizeof(NODE); if

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

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