严蔚敏数据结构c语言版习题集全答案

上传人:夏** 文档编号:508374595 上传时间:2023-01-29 格式:DOC 页数:80 大小:199KB
返回 下载 相关 举报
严蔚敏数据结构c语言版习题集全答案_第1页
第1页 / 共80页
严蔚敏数据结构c语言版习题集全答案_第2页
第2页 / 共80页
严蔚敏数据结构c语言版习题集全答案_第3页
第3页 / 共80页
严蔚敏数据结构c语言版习题集全答案_第4页
第4页 / 共80页
严蔚敏数据结构c语言版习题集全答案_第5页
第5页 / 共80页
点击查看更多>>
资源描述

《严蔚敏数据结构c语言版习题集全答案》由会员分享,可在线阅读,更多相关《严蔚敏数据结构c语言版习题集全答案(80页珍藏版)》请在金锄头文库上搜索。

1、-说明: 1. 本文是对严蔚敏数据构造(c语言版)习题集一书中所有算法设计题目的解决方案,主要作者为kaoyan.计算机版版主一具.以下网友:siice,龙抬头,iamkent,zames,birdthinking等为答案的修订和完善工作提出了珍贵意见,在此表示感;2. 本解答中的所有算法均采用类c语言描述,设计原则为面向交流、面向阅读,作者不保证程序能够上机正常运行(这种保证实际上也没有任何意义);3. 本解答原则上只给出源代码以及必要的注释,对于一些难度较高或思路特殊的题目将给出简要的分析说明,对于作者无法解决的题目将给出必要的讨论.目前尚未解决的题目有: 5.20, 10.40;4. 请

2、读者在自己已经解决了*个题目或进展了充分的思考之后,再参考本解答,以保证复习效果;5. 由于作者水平所限,本解答中一定存在不少这样或者那样的错误和缺乏,希望读者们在阅读中多动脑、勤思考,争取发现和纠正这些错误,写出更好的算法来.请将你发现的错误或其它值得改良之处向作者报告: yi- 第一章 绪论 1.16 void print_descending(int *,int y,int z)/按从大到小顺序输出三个数 scanf(%d,%d,%d,&*,&y,&z); if(*y) *y; /为表示交换的双目运算符,以下同 if(yz) yz; if(*y) *y; /冒泡排序 printf(%d

3、%d %d,*,y,z);/print_descending 1.17 Status fib(int k,int m,int &f)/求k阶斐波那契序列的第m项的值fint tempd;if(k2|m0) return ERROR;if(mk-1) f=0;else if (m=k-1) f=1;elsefor(i=0;i=k-2;i+) tempi=0;tempk-1=1; /初始化for(i=k;i=m;i+) /求出序列第k至第m个元素的值sum=0;for(j=i-k;ji;j+) sum+=tempj;tempi=sum;f=tempm;return OK;/fib分析:通过保存已经

4、计算出来的结果,此方法的时间复杂度仅为O(m2).如果采用递归编程(大多数人都会首先想到递归方法),则时间复杂度将高达O(km). 1.18 typedef structchar *sport;enummale,female gender; char schoolname; /校名为A,B,C,D或Echar *result;int score; resulttype; typedef structint malescore;int femalescore;int totalscore; scoretype; void summary(resulttype result )/求各校的男女总分和

5、团体总分,假设结果已经储存在result 数组中scoretype score;i=0;while(resulti.sport!=NULL)switch(resulti.schoolname)case A:score 0 .totalscore+=resulti.score;if(resulti.gender=0) score 0 .malescore+=resulti.score;else score 0 .femalescore+=resulti.score;break;case B:score.totalscore+=resulti.score;if(resulti.gender=0)

6、score.malescore+=resulti.score;else score.femalescore+=resulti.score;break;i+;for(i=0;i5;i+)printf(School %d:n,i);printf(Total score of male:%dn,scorei.malescore);printf(Total score of female:%dn,scorei.femalescore);printf(Total score of all:%dnn,scorei.totalscore);/summary1.19 Status algo119(int aA

7、RRSIZE)/求i!*2i序列的值且不超过ma*intlast=1;for(i=1;i=ARRSIZE;i+) ai-1=last*2*i; if(ai-1/last)!=(2*i) reurn OVERFLOW; last=ai-1; return OK;/algo119分析:当*一项的结果超过了ma*int时,它除以前面一项的商会发生异常. 1.20 void polyvalue()float ad;float *p=a;printf(Input number of terms:);scanf(%d,&n);printf(Input the %d coefficients from a0

8、 to a%d:n,n,n);for(i=0;i=n;i+) scanf(%f,p+);printf(Input value of *:);scanf(%f,&*);p=a;*p=1;sum=0; /*p用于存放*的i次方for(i=0;i=n;i+)sum+=*p*(*p+);*p*=*;printf(Value is:%f,sum);/polyvalue第二章 线性表 2.10 Status DeleteK(SqList &a,int i,int k)/删除线性表a中第i个元素起的k个元素if(i1|ka.length) return INFEASIBLE;for(count=1;i+co

9、unt-1va.listsize) return ERROR;va.length+;for(i=va.length-1;va.elemi*&i=0;i-)va.elemi+1=va.elemi;va.elemi+1=*;return OK;/Insert_SqList 2.12 int Listp(SqList A,SqList B)/比拟字符表A和B,并用返回值表示结果,值为正,表示AB;值为负,表示Ane*t;p&p-data!=*;p=p-ne*t);return p;/Locate 2.14 int Length(LinkList L)/求链表的长度for(k=0,p=L;p-ne*t

10、;p=p-ne*t,k+);return k;/Length 2.15 void ListConcat(LinkList ha,LinkList hb,LinkList &hc)/把链表hb接在ha后面形成链表hchc=ha;p=ha;while(p-ne*t) p=p-ne*t;p-ne*t=hb;/ListConcat 2.16 见书后答案. 2.17 Status Insert(LinkList &L,int i,int b)/在无头结点链表L的第i个元素之前插入元素bp=L;q=(LinkList*)malloc(sizeof(LNode);q.data=b;if(i=1)q.ne*t

11、=p;L=q; /插入在链表头部elsewhile(-i1) p=p-ne*t;q-ne*t=p-ne*t;p-ne*t=q; /插入在第i个元素的位置/Insert 2.18 Status Delete(LinkList &L,int i)/在无头结点链表L中删除第i个元素if(i=1) L=L-ne*t; /删除第一个元素elsep=L;while(-i1) p=p-ne*t;p-ne*t=p-ne*t-ne*t; /删除第i个元素/Delete 2.19 Status Delete_Between(Linklist &L,int mink,int ma*k)/删除元素递增排列的链表L中值

12、大于mink且小于ma*k的所有元素p=L;while(p-ne*t-datane*t; /p是最后一个不大于mink的元素if(p-ne*t)/如果还有比mink更大的元素q=p-ne*t;while(q-datane*t; /q是第一个不小于ma*k的元素p-ne*t=q;/Delete_Between 2.20 Status Delete_Equal(Linklist &L)/删除元素递增排列的链表L中所有值一样的元素p=L-ne*t;q=p-ne*t; /p,q指向相邻两元素while(p-ne*t)if(p-data!=q-data)p=p-ne*t;q=p-ne*t; /当相邻两元素不相等时,p,q都向后推一步elsewhile(q-data=p-data) free(q); q=q-ne*t; p-ne*t=q;p=q;q=p-ne*t; /当相邻元素相等时删除多余元素/else/while/Delete_Equal 2.21 void reverse(SqList &A)/顺序表的就地逆置for(i=1,j=A.length;ij;i+,j-)A.elemi

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号