c言语版 清华大学严蔚敏数据结构题集完整答案 (c语言清华大学)
创始人
2026-05-11 18:25:05
0

本文目录导航:

  • 清华大学严蔚敏数据结构题集完整答案(c言语版)
  • 求数据结构C言语版严蔚敏吴伟民PDF版 紫色封面
  • 有没有数据结构(c言语版)严蔚敏教员教学视频下载地址
c言语版

清华大学严蔚敏数据结构题集完整答案(c言语版)

第一章 绪论 1.16 void print_descending(int x,int y,int z)//按从大到小顺序输入三个数 { scanf(%d,%d,%d,&x,&y,&z); if(xy; //<->为示意替换的双目运算符,以下同 if(yz; if(xy; //冒泡排序 printf(%d %d %d,x,y,z); }//print_descending 1.17 Status fib(int k,int m,int &f)//求k阶斐波那契序列的第m项的值f { int tempd; if(k<2||m<0) return ERROR; if(m) return INFEASIBLE;for(count=1;i+count-1<=-k;count++) //留意循环完结的条件[i+count-1]=[i+count+k-1];-=k;return OK;}//DeleteK 2.11Status Insert_SqList(SqList &va,int x)//把x拔出递增有序表va中{if(+1>) return ERROR;++;for(i=-1;[i]>x&&i>=0;i--)[i+1]=[i];[i+1]=x;return OK;}//Insert_SqList 2.12 int ListComp(SqList A,SqList B)//比拟字符表A和B,并用前往值示意结果,值为正,示意A>B;值为负,示意AinkList L,int x)//链表上的元素查找,前往指针{for(p=l->next;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前面构成链表hc{hc=ha;p=ha;while(p->next) p=p->next;p->next=hb;}//ListConcat 2.16 见书后答案. 2.17 Status Insert(linkList &L,int i,int b)//在无头结点链表L的第i个元素之前拔出元素b{p=L;q=(linkList*)malloc(sizeof(LNode));=b;if(i==1){=p;L=q; //拔出在链表头部}else{while(--i>1) 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; //删除第一个元素else{p=L;while(--i>1) 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->data<=mink) p=p->next; //p是最后一个不大于mink的元素if(p->next)//假设还有比mink更大的元素{q=p->next;while(q->datanext; //q是第一个不小于maxk的元素p->next=q;}}//Delete_Between 2.20 Status Delete_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都向后推一步}else{while(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=;i[j];}//reverse 2.22 void linkList_reverse(linklist &L)//链表的就地逆置;为简化算法,假定表长大于2{p=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(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的元素拔出新表}else{pc=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.25 void SqList_Intersect(SqList A,SqList B,SqList &C)//求元素递增陈列的线性表A和B的元素的交加并存入C中{i=1;j=1;k=0;while([i]&&[j]){if([i]<[j]) i++;if([i]>[j]) j++;if([i]==[j]){[++k]=[i]; //当发现了一个在A,B中都存在的元素,i++;j++; //就减少到C中}}//while}//SqList_Intersect 2.26 void linkList_Intersect(linkList A,linkList B,linkList &C)//在链表结构上重做上题{p=A->next;q=B->next;pc=(LNode*)malloc(sizeof(LNode));while(p&&q){if(p->datadata) p=p->next;else if(p->data>q->data) q=q->next;else{s=(LNode*)malloc(sizeof(LNode));s->data=p->data;pc->next=s;pc=s;p=p->next;q=q->next;}}//whileC=pc;}//linkList_Intersect 2.27 void SqList_Intersect_True(SqList &A,SqList B)//求元素递增陈列的线性表A和B的元素的交加并存回A中{i=1;j=1;k=0;while([i]&&[j]){if([i]<[j]) i++;else if([i]>[j]) j++;else if([i]!=[k]){[++k]=[i]; //当发现了一个在A,B中都存在的元素i++;j++; //且C中没有,就减少到C中}}//whilewhile([k]) [k++]=0;}//SqList_Intersect_True 2.28 void linkList_Intersect_True(linkList &A,linkList B)//在链表结构上重做上题{p=A->next;q=B->next;pc=A;while(p&&q){if(p->datadata) p=p->next;else if(p->data>q->data) q=q->next;else if(p->data!=pc->data){pc=pc->next;pc->data=p->data;p=p->next;q=q->next;}}//while}//linkList_Intersect_True 2.29 void SqList_Intersect_Delete(SqList &A,SqList B,SqList C) {i=0;j=0;k=0;m=0; //i批示A中元素原来的位置,m为移动后的位置while(i<&&j<&& k<) {if([j]<[k]) j++;else if([j]>[k]) k++;else{same=[j]; //找到了相反元素samewhile([j]==same) j++;while([k]==same) k++; //j,k后移到新的元素while(i<&&[i]inkList_Intersect_Delete(linkList &A,linkList B,linkList C)//在链表结构上重做上题{p=B->next;q=C->next;r=A-next;while(p&&q&&r){if(p->datadata) p=p->next;else if(p->data>q->data) q=q->next;else{u=p->data; //确定待删除元素uwhile(r->next->datanext; //确定最后一个小于u的元素指针rif(r->next->data==u){s=r->next;while(s->data==u){t=s;s=s->next;free(t); //确定第一个大于u的元素指针s}//whiler->next=s; //删除r和s之间的元素}//ifwhile(p->data=u) p=p->next;while(q->data=u) q=q->next;}//else}//while}//linkList_Intersect_Delete 2.31 Status Delete_Pre(CiLNode *s)//删除单循环链表中结点s的间接前驱{p=s;while(p->next->next!=s) p=p->next; //找到s的前驱的前驱pp->next=s;return OK;}//Delete_Pre 2.32 Status DuLNode_Pre(DulinkList &L)//实现双向循环链表结点的pre域{for(p=L;!p->next->pre;p=p->next) p->next->pre=p;return OK;}//DuLNode_Pre 2.33 Status linkList_Divide(linkList &L,CiList &A,CiList &B,CiList &C)//把单链表L的元素按类型分为三个循环链表为带头结点的单循环链表类型.{s=L->next;A=(CiList*)malloc(sizeof(CiLNode));p=A;B=(CiList*)malloc(sizeof(CiLNode));q=B;C=(CiList*)malloc(sizeof(CiLNode));r=C; //建设头结点while(s){if(isalphabet(s->data)){p->next=s;p=s;}else if(isdigit(s->data)){q->next=s;q=s;}else{r->next=s;r=s;}}//whilep->next=A;q->next=B;r->next=C; //实现循环链表}//linkList_Divide 2.34 void Print_XorlinkedList(XorlinkedList L)//从左向右输入异或链表的元素值{p=;pre=NULL;while(p){printf(%d,p->data);q=XorP(p->LRPtr,pre);pre=p;p=q; //任何一个结点的LRPtr域值与其左结点指针启动异或运算即获取其右结点指针}}//Print_XorlinkedList 2.35 Status Insert_XorlinkedList(XorlinkedList &L,int x,int i)//在异或链表L的第i个元素前拔出元素x{p=;pre=NULL;r=(XorNode*)malloc(sizeof(XorNode));r->data=x;if(i==1) //当拔出点在最左边的状况{p->LRPtr=XorP(,r);r->LRPtr=p;=r;return OK;}j=1;q=p->LRPtr; //当拔出点在两边的状况while(++jLRPtr,pre);pre=p;p=q;}//while //在p,q两结点之间拔出if(!q) return INFEASIBLE; //i无法以超越表长p->LRPtr=XorP(XorP(p->LRPtr,q),r);q->LRPtr=XorP(XorP(q->LRPtr,p),r);r->LRPtr=XorP(p,q); //修正指针return OK;}//Insert_XorlinkedList 2.36 Status Delete_XorlinkedList(XorlinkedList &L,int i)//删除异或链表L的第i个元素{p=;pre=NULL;if(i==1) //删除最左结点的状况{q=p->LRPtr;q->LRPtr=XorP(q->LRPtr,p);=q;free(p);return OK;}j=1;q=p->LRPtr;while(++jLRPtr,pre);pre=p;p=q;}//while //找到待删结点qif(!q) return INFEASIBLE; //i无法以超越表长if(==q) //q为最右结点的状况{p->LRPtr=XorP(p->LRPtr,q);=p;free(q);return OK;}r=XorP(q->LRPtr,p); //q为两边结点的状况,此时p,r区分为其左右结点p->LRPtr=XorP(XorP(p->LRPtr,q),r);r->LRPtr=XorP(XorP(r->LRPtr,q),p); //修正指针free(q);return OK;}//Delete_XorlinkedList 2.37 void OEReform(DulinkedList &L)//按1,3,5,...4,2的顺序重排双向循环链表L中的一切结点{p=;while(p->next!=L&&p->next->next!=L){p->next=p->next->next;p=p->next;} //此时p指向最后一个奇数结点if(p->next==L) p->next=L->pre->pre;else p->next=l->pre;p=p->next; //此时p指向最后一个偶数结点while(p->pre->pre!=L){p->next=p->pre->pre;p=p->next;}p->next=L; //按标题要求调整了next链的结构,此时pre链仍为原状for(p=L;p->next!=L;p=p->next) p->next->pre=p;L->pre=p; //调整pre链的结构,同2.32方法}//OEReform剖析:next链和pre链的调整只能离开启动.似乎时启动调整的话,必定经常使用堆栈保管偶数结点的指针,否则将会破坏链表结构,形成结点失落. 2.38 DuLNode * Locate_DuList(DulinkedList &L,int x)//带freq域的双向循环链表上的查找{p=;while(!=x&&p!=L) p=p->next;if(p==L) return NULL; //没找到p->freq++;q=p->pre;while(q->freq<=p->freq) q=q->pre; //查找插上天位if(q!=p->pre){p->pre->next=p->next;p->next->pre=p->pre;q->next->pre=p;p->next=q->next;q->next=p;p->pre=q; //调整位置}return p;}//Locate_DuList 2.39 float GetValue_SqPoly(SqPoly P,int x0)//求升幂顺序存储的稠密多项式的值{PolyTerm *q;xp=1;q=;sum=0;ex=0;while(q->coef){while(exexp) xp*=x0;sum+=q->coef*xp;q++;}return sum;}//GetValue_SqPoly 2.40 void Subtract_SqPoly(SqPoly P1,SqPoly P2,SqPoly &P3)//求稠密多项式P1减P2的差式P3{PolyTerm *p,*q,*r;Create_SqPoly(P3); //建设空多项式P3p=;q=;r=;while(p->coef&&q->coef){if(p->expexp){r->coef=p->coef;r->exp=p->exp;p++;r++;}else if(p->expexp){r->coef=-q->coef;r->exp=q->exp;q++;r++;}else{if((p->coef-q->coef)!=0) //只要同次项相减不为零时才须要存入P3中{r->coef=p->coef-q->coef;r->exp=p->exp;r++;}//ifp++;q++;}//else}//whilewhile(p->coef) //解决P1或P2的残余项{r->coef=p->coef;r->exp=p->exp;p++;r++;}while(q->coef){r->coef=-q->coef;r->exp=q->exp;q++;r++;}}//Subtract_SqPoly 2.41 void QiuDao_linkedPoly(linkedPoly &L)//对有头结点循环链表结构存储的稠密多项式L求导{p=L->next;if(!p->){L->next=p->next;p=p->next; //跳过常数项}while(p!=L){p->*=p->--;//对每一项求导p=p->next;}}//QiuDao_linkedPoly 2.42 void Divide_linkedPoly(linkedPoly &L,&A,&B)//把循环链表存储的稠密多项式L拆成只含奇次项的A和只含偶次项的B{p=L->next;A=(PolyNode*)malloc(sizeof(PolyNode));B=(PolyNode*)malloc(sizeof(PolyNode));pa=A;pb=B;while(p!=L){if(p->!=2*(p->/2)){pa->next=p;pa=p;}else{pb->next=p;pb=p;}p=p->next;}//whilepa->next=A;pb->next=B; }//Divide_linkedPoly

求数据结构C言语版严蔚敏吴伟民PDF版 紫色封面

《数据结构:C言语版》(严蔚敏)(选用个别下载即可!)

1、手机阅读器网页端登 陆 或 PC电脑端登陆,即可检查、下载;

2、文件有时效性,若文件失效或下载疑问,请留言;

有没有数据结构(c言语版)严蔚敏教员教学视频下载地址

10《数据结构》【005】

链接:《数据结构》【005】

相关内容

热门资讯

神... 本文目录导航: 神州联保是什么牌子售后 联保服务是什么 神...
手... 本文目录导航: Uniapp从零开局,手把手教学(附精选源码32套,涵盖商城团购等) ...
精... 友情提醒:如果您有以下需求,请继续阅读,否则本文不适合您!很多朋友可能会有疑问,精简版的系统是否会影...
像... 本文目录导航: 像神州联保这样的售后公司开展空间大吗? 怎样接神州联保的单...
可... 本文目录导航: 可以介绍一个好用的治理软件开发平台的吗? 企业治理软件有哪...
神... 本文目录导航: 神州联保的售后怎样协作 像神州联保这样的售后公司开展空间大...
经... 本文目录导航: 经常出现的售后处置流程 客户服务流程 售后...
英... 物联网:Internet of Things,英文缩写 IoT,指的是经过网络将物理环球中的设备、东...
如... 摘要:如今,手机防病毒软件种类繁多。很多人都想知道为什么这么多安全软件开始关注手机安全领域。对于手机...
电... 大家好,从近期我们收到的粉丝留言中可以看出,虽然部分粉丝对组件模型的开发比较感兴趣,但在开发稍微复杂...
抖... 抖音快手,两大流量池,各路英雄较量,各显神通。其中,有一群人,不需要复杂的心灵手巧,只需携带,一天就...
视... 现在各种短视频平台好像很流行,比如抖音、快手等等。今天给大家分享一些可能用于视频制作的网站。当然,如...
云... 凡事都可以“阴云密布”,相亲也不例外。牛年春节期间,由于疫情防控的需要,不少单身年轻人就地过年。漫长...
最... 大家好,我是小凡,重点在各大网络论坛分享各类付费网络创业VIP教程和网络创业项目,每天更新最新的网络...
快... 现在玩快手、抖音的朋友有很多。他们有的只是无聊时看视频,有的朋友已经开始通过制作视频来赚钱。如果你想...
手... 要知道现在大部分手机都带有GPS定位功能。当用户的手机丢失,或者安装了一些定位软件手机防盗追踪软件,...
上... 电子发烧友网报道(文/黄善明)近日,某上市公司员工在社交平台爆料称,该公司使用了“员工行为感知”系统...
一... 1. 同伴这个社交应用程序是一步式的:帮助您找到理想的伴侣。易办实行实名制注册机制。个人信息在显示之...
手... 前言上一篇文章讲了与手机硬件相关的防盗措施。在这篇文章中,我们将讨论数据隐私防盗。对于每个人来说,丢...
微... 点击上方一键关注介绍:面向全国200万微商的创业交流平台,为中小微商提供最专业、最专注的微商...