数据结构题集C语言版算法设计题答案.docx
- 文档编号:1764278
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:168
- 大小:84.18KB
数据结构题集C语言版算法设计题答案.docx
《数据结构题集C语言版算法设计题答案.docx》由会员分享,可在线阅读,更多相关《数据结构题集C语言版算法设计题答案.docx(168页珍藏版)》请在冰豆网上搜索。
数据结构题集数据结构题集C语言版算法设计题答案语言版算法设计题答案第一章绪论1.16voidprint_descending(intx,inty,intz)/按从大到小顺序输出三个数scanf(%d,%d,%d,&x,&y,&z);if(xy)xy;/为表示交换的双目运算符,以下同if(yz)yz;if(xy)xy;/冒泡排序printf(%d%d%d,x,y,z);/print_descending1.17Statusfib(intk,intm,int&f)/求k阶斐波那契序列的第m项的值finttempd;if(k2|m0)returnERROR;if(mk-1)f=0;elseif(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;returnOK;/fib分析:
通过保存已经计算出来的结果,此方法的时间复杂度仅为O(m2).如果采用递归编程(大多数人都会首先想到递归方法),则时间复杂度将高达O(km).1.18typedefstructchar*sport;enummale,femalegender;charschoolname;/校名为A,B,C,D或Echar*result;intscore;resulttype;typedefstructintmalescore;intfemalescore;inttotalscore;scoretype;voidsummary(resulttyperesult)/求各校的男女总分和团体总分,假设结果已经储存在result数组中scoretypescore;i=0;while(resulti.sport!
=NULL)switch(resulti.schoolname)caseA:
score0.totalscore+=resulti.score;if(resulti.gender=0)score0.malescore+=resulti.score;elsescore0.femalescore+=resulti.score;break;caseB:
score.totalscore+=resulti.score;if(resulti.gender=0)score.malescore+=resulti.score;elsescore.femalescore+=resulti.score;break;i+;for(i=0;i5;i+)printf(School%d:
n,i);printf(Totalscoreofmale:
%dn,scorei.malescore);printf(Totalscoreoffemale:
%dn,scorei.femalescore);printf(Totalscoreofall:
%dnn,scorei.totalscore);/summary1.19Statusalgo119(intaARRSIZE)/求i!
*2i序列的值且不超过maxintlast=1;for(i=1;i=ARRSIZE;i+)ai-1=last*2*i;if(ai-1/last)!
=(2*i)reurnOVERFLOW;last=ai-1;returnOK;/algo119分析:
当某一项的结果超过了maxint时,它除以前面一项的商会发生异常.1.20voidpolyvalue()floatad;float*p=a;printf(Inputnumberofterms:
);scanf(%d,&n);printf(Inputthe%dcoefficientsfroma0toa%d:
n,n,n);for(i=0;i=n;i+)scanf(%f,p+);printf(Inputvalueofx:
);scanf(%f,&x);p=a;xp=1;sum=0;/xp用于存放x的i次方for(i=0;i=n;i+)sum+=xp*(*p+);xp*=x;printf(Valueis:
%f,sum);/polyvalue第二章线性表2.10StatusDeleteK(SqList&a,inti,intk)/删除线性表a中第i个元素起的k个元素if(i1|ka.length)returnINFEASIBLE;for(count=1;i+count-1va.listsize)returnERROR;va.length+;for(i=va.length-1;va.elemix&i=0;i-)va.elemi+1=va.elemi;va.elemi+1=x;returnOK;/Insert_SqList2.12intListComp(SqListA,SqListB)/比较字符表A和B,并用返回值表示结果,值为正,表示AB;值为负,表示Anext;p&p-data!
=x;p=p-next);returnp;/Locate2.14intLength(LinkListL)/求链表的长度for(k=0,p=L;p-next;p=p-next,k+);returnk;/Length2.15voidListConcat(LinkListha,LinkListhb,LinkList&hc)/把链表hb接在ha后面形成链表hchc=ha;p=ha;while(p-next)p=p-next;p-next=hb;/ListConcat2.16见书后答案.2.17StatusInsert(LinkList&L,inti,intb)/在无头结点链表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个元素的位置/Insert2.18StatusDelete(LinkList&L,inti)/在无头结点链表L中删除第i个元素if(i=1)L=L-next;/删除第一个元素elsep=L;while(-i1)p=p-next;p-next=p-next-next;/删除第i个元素/Delete2.19StatusDelete_Between(Linklist&L,intmink,intmaxk)/删除元素递增排列的链表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_Between2.20StatusDelete_Equal(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_Equal2.21voidreverse(SqList&A)/顺序表的就地逆置for(i=1,j=A.length;ij;i+,j-)A.elemiA.elemj;/reverse2.22voidLinkList_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.23voidmerge1(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/merge12.24voidreverse_merge(LinkList&A,LinkList&B,LinkList&C)/把元素递增排列的链表A和B合并为C,且C中元素递减排列,使用原空间pa=A-next;pb=B-next;pre=NULL;/pa和pb分别指向A,B的当前元素while(pa|pb)if(pa-datadata|!
pb)pc=pa;q=pa-next;pa-next=pre;pa=q;/将A的元素插入新表elsepc=pb;q=pb-next;pb-next=pre;pb=q;/将B的元素插入新表pre=pc;C=A;A-next=pc;/构造新表头/reverse_merge分析:
本算法的思想是,按从小到大的顺序依次把A和B的元素插入新表的头部pc处,最后处理A或B的剩余元素.2.25voidSqList_Intersect(SqListA,SqListB,SqList&C)/求元素递增排列的线性表A和B的元素的交集并存入C中i=1;j=1;k=0;while(A.elemi&B.elemj)if(A.elemiB.elemj)j+;if(A.elemi=B.elemj)C.elem+k=A.elemi;/当发现了一个在A,B中都存在的元素,i+;j+;/就添加到C中/while/SqList_Intersect2.26voidLinkList_Intersect(LinkListA,LinkListB,LinkList&C)/在链表结构上重做上题p=A-next;q=B-next;pc=(LNode*)malloc(sizeof(LNode);while(p&q)if(p-datadata)p=p-next;elseif(p-dataq-data)q=q-next;elses=(LNode*)malloc(sizeof(LNode);s-data=p-data;pc-next=s;pc=s;p=p-next;q=q-next;/whileC=pc;/LinkList_Intersect2.27voidSqList_Intersect_True(SqList&A,SqListB)/求元素递增排列的线性表A和B的元素的交集并存回A中i=1;j=1;k=0;while(A.elemi&B.elemj)if(A.elemiB.elemj)j+;elseif(A.elemi!
=A.elemk)A.ele
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 语言版 算法 设计 答案