数据结构总习题解答.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构总习题解答

二、算法设计题答案 1. 解:实现本题功能的算法如下,如果查找成功,则返回指向关键字为x的结点的指针,否则返回NULL。 node *sqsearch(node *head,int x) { node *p=head; while(p!=NULL) if(xp-key) p=p-link; 第十章 习题解答 else if(x==p-key) return p; else { p=NULL; return p; } } 虽然链表中的结点是按递增顺序排列的,但是其存储结构为单链表,查找结点时只能从头指针开始逐步进行搜索,所以不能用折半查找。 第十章 习题解答 2. 解:采用顺序存储结构的算法如下,设记录存储在线性表的1~n单元中。如果查找成功,返回关键字为k的记录在线性表中的位置,如果失败则返回0。 int seqsearch(sqlist r,int n,int k) { int i,j; i=1; while((r[i].key!=k) (i=n)) i++; if(i=n) 第十章 习题解答 { r[0]=r[i]; r[i]=r[i-1]; r[i-1]=r[i]; i--; return(i); } else return(0); } 第十章 习题解答 采用链式存储结构的算法如下。如果查找成功,则返回指向关键字为k的结点的指针,否则返回NULL。 node *seqsearch(node *head,int k) { if(head-key==k) return(head); else { node *p,*q; int x; 第十章 习题解答 p=head; q=head-link; while(q!=NULL q-key!=k) { p=q; q=q-link; } if(q!=NULL) 第十章 习题解答 { x=p-key; p-key=q-key; q-key=x; q=p; } return(q); } } 第十章 习题解答 3. 解:本题的算法思想是:首先计算要删除的关键字为k的记录所在的位置,将其置为空(即删除),然后利用线性探测法查找是否有与k发生冲突而存储到下一地址的记录,如果有则将记录移到原来k所在的位置,直至表中没有与k冲突的记录为止。实现本题功能的算法如下: void delete(sqlist r,int n,int k) { int h,h0,h1; h=k%n; while(r[h].key!=k) h=(h+1)%n; 第十章 习题解答 r[h]=NULL; h0=h; h1=(h+1)%n; while(h1!=h) { while(r[h1].key%n!=h) h1=(h1+1)%n; r[h0]=r[h1]; r[h1]=NULL; h0=h1; h1=(h1+1)%n; } } 第十章 习题解答 4. 解:本题的算法思想:先计算地址H(R.key),如果没有冲突,则直接填入;否则利用线性探测法求出下一地址,直到找到一个为零的地址,然后填入。实现本题功能的函数如下: void insert(record H,int m,record R) { int i; i=H(R.key); if(H[i]==NULL) H[i]=R; 第十章 习题解答 else {

文档评论(0)

rovend + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档