数据结构习题集答案(c版)(清华大学 严蔚敏)【内容充实】

上传人:s9****2 文档编号:562787790 上传时间:2023-08-31 格式:DOC 页数:77 大小:199.50KB
返回 下载 相关 举报
数据结构习题集答案(c版)(清华大学 严蔚敏)【内容充实】_第1页
第1页 / 共77页
数据结构习题集答案(c版)(清华大学 严蔚敏)【内容充实】_第2页
第2页 / 共77页
数据结构习题集答案(c版)(清华大学 严蔚敏)【内容充实】_第3页
第3页 / 共77页
数据结构习题集答案(c版)(清华大学 严蔚敏)【内容充实】_第4页
第4页 / 共77页
数据结构习题集答案(c版)(清华大学 严蔚敏)【内容充实】_第5页
第5页 / 共77页
点击查看更多>>
资源描述

《数据结构习题集答案(c版)(清华大学 严蔚敏)【内容充实】》由会员分享,可在线阅读,更多相关《数据结构习题集答案(c版)(清华大学 严蔚敏)【内容充实】(77页珍藏版)》请在金锄头文库上搜索。

1、1.16 void print_descending(int x,int y,int z)/按从大到小顺序输出三个数scanf(%d,%d,%d,&x,&y,&z);if(xy) xy; /为表示交换的双目运算符,以下同if(yz) yz;if(xy) xy; /冒泡排序printf(%d %d %d,x,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;elsef

2、or(i=0;i=k-2;i+) temp=0;tempk-1=1; /初始化for(i=k;i=m;i+) /求出序列第k至第m个元素的值sum=0;for(j=i-k;ji;j+) sum+=tempj;temp=sum;f=tempm;return OK;/fib分析:通过保存已经计算出来的结果,此方法的时间复杂度仅为O(m2).如果采用递归编程(大多数人都会首先想到递归方法),则时间复杂度将高达O(km). 1.18 typedef structchar *sport;enummale,female gender;char schoolname; /校名为A,B,C,D或Echar *

3、result;int score; resulttype; typedef structint malescore;int femalescore;int totalscore; scoretype; void summary(resulttype result )/求各校的男女总分和团体总分,假设结果已经储存在result 数组中scoretype score;i=0;while(result.sport!=NULL)switch(result.schoolname)case A:score 0 .totalscore+=result.score;if(result.gender=0) sc

4、ore 0 .malescore+=result.score;else score 0 .femalescore+=result.score;break;case B:score.totalscore+=result.score;if(result.gender=0) score.malescore+=result.score;else score.femalescore+=result.score;break;?i+;for(i=0;i5;i+)printf(School %d:n,i);printf(Total score of male:%dn,score.malescore);prin

5、tf(Total score of female:%dn,score.femalescore);printf(Total score of all:%dnn,score.totalscore);/summary 1.19 Status algo119(int aARRSIZE)/求i!*2i序列的值且不超过maxintlast=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分析:当某一项的结果超过了maxint时,它除以前面一项的商会发生异

6、常. 1.20 void polyvalue()float ad;float *p=a;printf(Input number of terms:);scanf(%d,&n);printf(Input the %d coefficients from a0 to a%d:n,n,n);for(i=0;i=n;i+) scanf(%f,p+);printf(Input value of x:);scanf(%f,&x);p=a;xp=1;sum=0; /xp用于存放x的i次方for(i=0;i=n;i+)sum+=xp*(*p+);xp*=x;printf(Value is:%f,sum);/p

7、olyvalue2.10 Status DeleteK(SqList &a,int i,int k)/删除线性表a中第i个元素起的k个元素if(i1|ka.length) return INFEASIBLE;for(count=1;i+count-1va.listsize) return ERROR;va.length+;for(i=va.length-1;va.elemx&i=0;i-)va.elemi+1=va.elem;va.elemi+1=x;return OK;/Insert_SqList 2.12 int ListComp(SqList A,SqList B)/比较字符表A和B,并

8、用返回值表示结果,值为正,表示AB;值为负,表示Anext;p&p-data!=x;p=p-next);return p;/Locate 2.14 int Length(LinkList L)/求链表的长度for(k=0,p=L;p-next;p=p-next,k+);return k;/Length 2.15 void ListConcat(LinkList ha,LinkList hb,LinkList &hc)/把链表hb接在ha后面形成链表hchc=ha;p=ha;while(p-next) p=p-next;p-next=hb;/ListConcat 2.16 见书后答案. 2.17

9、 Status Insert(LinkList &L,int i,int b)/在无头结点链表L的第i个元素之前插入元素bp=L;q=(LinkList*)malloc(sizeof(LNode);q.data=b;if(i=1)q.next=p;L=q; /插入在链表头部elsewhile(-i1) p=p-next;q-next=p-next;p-next=q; /插入在第i个元素的位置/Insert 2.18 Status Delete(LinkList &L,int i)/在无头结点链表L中删除第i个元素if(i=1) L=L-next; /删除第一个元素elsep=L;while(-

10、i1) p=p-next;p-next=p-next-next; /删除第i个元素/Delete 2.19 Status Delete_Between(Linklist &L,int mink,int maxk)/删除元素递增排列的链表L中值大于mink且小于maxk的所有元素p=L;while(p-next-datanext; /p是最后一个不大于mink的元素if(p-next) /如果还有比mink更大的元素q=p-next;while(q-datanext; /q是第一个不小于maxk的元素p-next=q;/Delete_Between 2.20 Status Delete_Equa

11、l(Linklist &L)/删除元素递增排列的链表L中所有值相同的元素p=L-next;q=p-next; /p,q指向相邻两元素while(p-next)if(p-data!=q-data)p=p-next;q=p-next; /当相邻两元素不相等时,p,q都向后推一步elsewhile(q-data=p-data) free(q);q=q-next; p-next=q;p=q;q=p-next; /当相邻元素相等时删除多余元素/else/while/Delete_Equal 2.21 void reverse(SqList &A)/顺序表的就地逆置for(i=1,j=A.length;i

12、j;i+,j-)A.elemA.elemj;/reverse 2.22 void LinkList_reverse(Linklist &L)/链表的就地逆置;为简化算法,假设表长大于2p=L-next;q=p-next;s=q-next;p-next=NULL;while(s-next)q-next=p;p=q;q=s;s=s-next; /把L的元素逐个插入新表表头q-next=p;s-next=q;L-next=s;/LinkList_reverse分析:本算法的思想是,逐个地把L的当前元素q插入新的链表头部,p为新表表头. 2.23 void merge1(LinkList &A,LinkList &B,LinkList &C)/把链表A和B合并为C,A和B的元素间隔排列,且使用原存储空间p=A-next;q=B-next;C=A;while(p&q)s=p-next;p-next=q; /将B的元素插入if(s)t=q-next;q-next=s; /如A非空,将A的元素插入p=s;q=t;/while/merge1 2.24 void reverse_merge(LinkLis

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 习题/试题

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