数据结构代码(仅供参考).docx

上传人:de****x 文档编号:55899298 上传时间:2022-10-31 格式:DOCX 页数:99 大小:102.33KB
返回 下载 相关 举报
数据结构代码(仅供参考).docx_第1页
第1页 / 共99页
数据结构代码(仅供参考).docx_第2页
第2页 / 共99页
点击查看更多>>
资源描述

《数据结构代码(仅供参考).docx》由会员分享,可在线阅读,更多相关《数据结构代码(仅供参考).docx(99页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、线性表一、单链表操纵拔出、删除:#include#include#includetypedefstructLNodeintdata;structLNode*next;LNode,*LinkList;voidInitList(LinkList&L)/初始化链表L,带表头结点L=(LinkList)malloc(sizeof(LNode);L-next=NULL;/InitListvoidCreateList(LinkList&L,intn)/创破存在n个结点的链表,结点数据由键盘输入LinkListp;inti;for(i=0;idata);p-next=L-next;L-next=p;/for

2、/CreateListvoidPrintList(LinkList&L)/打印结点的每个元素值LinkListp;p=L-next;printf(结点值分不为:n);while(p)printf(%d,p-data);p=p-next;/whileprintf(n);/PrintListvoidInsertList(LinkList&L,inti,intn)/在的L的第i个地位拔出元素nLinkListp,s;s=(LinkList)malloc(sizeof(LNode);intj=0;p=L;while(p&jnext;j+;/whileif(!p|ji-1)printf(i的值分歧法!n

3、);return;/ifs-data=n;s-next=p-next;p-next=s;/InsertListvoidDelete(LinkList&L,inti)/删除第i个元素LinkListP,Q;P=L;intj=0;while(P-next-next&jnext;j=j+1;if(!P-next)return;Q=P-next;P-next=Q-next;free(Q);/Deletevoidmain()intn,i,j;LinkListL;printf(请输入链表结点个数:n);scanf(%d,&n);InitList(L);printf(请逆序分不输入结点值:n);Create

4、List(L,n);PrintList(L);printf(请输入擦人结点地位跟值:n);scanf(%d%d,&i,&j);InsertList(L,i,j);PrintList(L);printf(请输入删除结点地位:n);scanf(%d,&i);Delete(L,i);PrintList(L);二、 次序表操纵(拔出、删除):#includestdafx.h#include#include#defineInitListSize100#defineListIncrement10typedefstructint*elem;intlength;intLiskSize;SqList;voidI

5、nitList(SqList&L)/初始化次序表LL.elem=(int*)malloc(InitListSize*sizeof(int);if(!L.elem)printf(调配掉败!n);return;/ifL.length=0;L.LiskSize=InitListSize;/InitListvoidInsertList(SqList&L,inti,inte)/在次序表的第i个地位拔出元素eif(iL.length)printf(i的地位分歧法!);return;/ifif(L.length+1InitListSize)int*newbase;newbase=(int*)realloc(

6、L.elem,(InitListSize+ListIncrement)*sizeof(int);if(!newbase)printf(调配掉败!n);return;/ifL.elem=newbase;L.LiskSize=L.LiskSize+ListIncrement;/ifint*p,*q;q=&(L.elemi-1);for(p=&(L.elemL.length-1);p=q;p-)*(p+1)=*p;*q=e;L.length+=1;/InsertListvoidDeleteList(SqList&L,inti,int&e)/删除次序表的第i个地位的值,并用e前往if(iL.lengt

7、h)printf(i的地位分歧法!);return;/ifint*p,*q;q=&(L.elemi-1);e=*q;p=&(L.elemL.length-1);for(q=q+1;q=p;q+)*(q-1)=*q;-L.length;/DeleteListvoidPrintList(SqListL)/打印次序表中的一切元素inti;for(i=0;i=L.length-1;i+)printf(%d,L.elemi);printf(n);voidmain()inti,n;intp,q;SqListL;InitList(L);printf(请输入元素的个数:n);scanf(%d,&n);prin

8、tf(请分不输入各个链表元素:n);for(i=0;in;i+)scanf(%d,&(L.elemi);/forL.length=5;PrintList(L);printf(请输入擦人元素的地位跟值:n);scanf(%d%d,&p,&q);InsertList(L,p,q);PrintList(L);printf(请输入删除元素的地位:n);scanf(%d,&p);DeleteList(L,p,q);PrintList(L);三、 次序表操纵(兼并、交加另辟空间、交加用表A空间):#includestdafx.h#include#include#defineInitListSize100#

9、defineListIncrement10typedefstructint*elem;intlength;intLiskSize;SqList;voidInitList(SqList&L)/初始化次序表LL.elem=(int*)malloc(InitListSize*sizeof(int);if(!L.elem)printf(调配掉败!n);return;/ifL.length=0;L.LiskSize=InitListSize;/InitListvoidCreateList(SqList&L)/intn,i;printf(请输入元素的个数:n);scanf(%d,&n);printf(请分

10、不输入各个链表元素:n);for(i=0;iInitListSize)int*newbase;newbase=(int*)realloc(L.elem,(InitListSize+ListIncrement)*sizeof(int);if(!newbase)printf(调配掉败!n);return;/ifL.elem=newbase;L.LiskSize=L.LiskSize+ListIncrement;/ifL.elemL.length=e;L.length+=1;/InsertListvoidPrintList(SqListL)/打印次序表中的一切元素inti;for(i=0;i=L.l

11、ength-1;i+)printf(%d,L.elemi);printf(n);voidMerge(SqListLa,SqListLb,SqList&Lc)/La与Lb都递增,兼并后的Lc也递增int*pa,*pb,*pc,*palast,*pblast;pa=La.elem;pb=Lb.elem;Lc.LiskSize=Lc.length=La.length+Lb.length;pc=Lc.elem=(int*)malloc(Lc.LiskSize*sizeof(int);if(!Lc.elem)return;palast=La.elem+La.length-1;pblast=Lb.elem

12、+Lb.length-1;while(pa=palast&pb=pblast)if(*pa*pb)*pc+=*pa+;else*pc+=*pb+;/whilewhile(pa=palast)*pc+=*pa+;while(pb=pblast)*pc+=*pb+;/mergevoidInterSet(SqListLa,SqListLb,SqList&Ld)/次序表兼并,另辟空间为Ld,能够有一样元素InitList(Ld);inti,j=0;for(i=0;iLa.length;i+)while(Lb.elemj=La.elemi&jLb.length)if(Lb.elemj=La.elemi)

13、InsertList(Ld,La.elemi);j=j+1;/for/InterSetvoidDeleteList(SqList&L,inti)/删除次序表L.elemiif(i=L.length)printf(i的地位分歧法!);return;/ifint*p,*q;q=&(L.elemi-1);p=&(L.elemL.length-1);for(q=q+1;q=p;q+)*(q-1)=*q;-L.length;/DeleteListvoidInterSet2(SqList&La,SqListLb)inte,i,j=0;for(i=0;i1&La.elemi=La.elemi-1)La.el

14、emi=0;elsee=0;while(jLb.length&Lb.elemj=La.elemi)if(La.elemi=Lb.elemj)e=1;/呈现一样元素标记j=j+1;if(e=0)La.elemi=0;/未呈现一样元素/if/fori=0;while(iLa.length)if(La.elemi=0)DeleteList(La,i);i=i-1;/由于删除,前面元素曾经迁徙i=i+1;/while/InterSet2voidmain(intargc,char*argv)SqListLa,Lb,Lc,Ld;InitList(La);InitList(Lb);CreateList(La

15、);CreateList(Lb);Merge(La,Lb,Lc);printf(兼并后为:n);PrintList(Lc);InterSet(La,Lb,Ld);printf(交加为:n);PrintList(Ld);InterSet2(La,Lb);printf(求交加,用La的空间寄存为:n);PrintList(La);四、 链表逆序兼并,同意有一样值:#includestdafx.h#include#defineN5/假定每个链表有五个元素typedefstructLNodeintdata;structLNode*next;LNode,*LinkList;voidCreateList(

16、LinkList&L)/创破链表LLinkListP,Q;inti;L=(LinkList)malloc(sizeof(LNode);P=L;printf(请输入链表元素,共5个:n);for(i=0;idata);P-next=Q;P=P-next;/forP-next=NULL;/CreateListvoidMerge(LinkList&La,LinkList&Lb,LinkList&Lc)LinkListPa,Pb,Pc,Q;Pa=La-next;Pb=Lb-next;Pc=Lc=La;Pc-next=NULL;while(Pa&Pb)if(Pa-datadata)Q=Pa;Pa=Pa-

17、next;Q-next=Pc-next;Pc-next=Q;elseQ=Pb;Pb=Pb-next;Q-next=Pc-next;Pc-next=Q;/whileif(Pa)while(Pa)Q=Pa;Pa=Pa-next;Q-next=Pc-next;Pc-next=Q;elsewhile(Pb)Q=Pb;Pb=Pb-next;Q-next=Pc-next;Pc-next=Q;free(Lb);/MergevoidPrint(LinkListL)/打印链表中一切元素LinkListP;P=L-next;while(P)printf(%d,P-data);P=P-next;printf(n);

18、/Printvoidmain(intargc,char*argv)LinkLista,b,c;CreateList(a);CreateList(b);Merge(a,b,c);printf(aandbinversemergeis:n);Print(c);五、 链表求交加:#includestdafx.h#include#defineN5/假定每个链表有五个元素typedefstructLNodeintdata;structLNode*next;LNode,*LinkList;voidCreateList(LinkList&L)/创破链表LLinkListP,Q;inti;L=(LinkList

19、)malloc(sizeof(LNode);P=L;printf(请输入链表元素,共5个:n);for(i=0;idata);P-next=Q;P=P-next;/forP-next=NULL;/CreateListvoidInterSet(LinkListLa,LinkListLb,LinkList&Lc)/交加为Lc,另辟空间LinkListPa,Pb,Pc,Q;Pa=La-next;Pb=Lb-next;Lc=(LinkList)malloc(sizeof(LNode);Pc=Lc;while(Pa)while(Pb&Pb-datadata)if(Pb-data=Pa-data)Q=(L

20、inkList)malloc(sizeof(LNode);Q-data=Pb-data;Pc-next=Q;Pc=Pc-next;/ifPb=Pb-next;/whilePa=Pa-next;/whilePc-next=NULL;/InterSetvoidInterSet2(LinkListLa,LinkListLb,LinkList&Lc)/应用a表空间进展交加不克不及够呈现一样元素LinkListQ;LinkListPa,Pb,Pc;Pc=Lc=La;Pa=La-next;Pb=Lb-next;while(Pa)if(!Pc-data|Pa-data!=Pc-data)while(Pb&P

21、b-datadata)if(!Pc-data|Pc-data!=Pb-data)/Pc中不存在与Pb一样的元素Pc-next=Pa;Pc=Pc-next;Pb=Pb-next;/while/ifif(!Pc-data|Pc-data!=Pa-data)/此结点不取Q=Pa;Pa=Pa-next;free(Q);elsePa=Pa-next;/if/whilePc-next=NULL;/InterSet2voidPrint(LinkListL)/打印链表中一切元素LinkListP;P=L-next;while(P)printf(%d,P-data);P=P-next;printf(n);/Pr

22、intvoidmain(intargc,char*argv)LinkLista,b,c,d;CreateList(a);CreateList(b);InterSet(a,b,c);printf(aandb另辟空间交加能够呈现一样元素is:n);Print(c);InterSet2(a,b,d);printf(aandb应用a表空间进展交加不克不及够呈现一样元素is:n);Print(d);六、 次序表逆向求交加真题:0501:#includestdafx.h#include#include#defineInitsize100#defineIncrement10typedefstructint*

23、elem;intlength;intListsize;SqList;intN=5;/假定次序表中各有五个元素voidInitList(SqList&L)L.elem=(int*)malloc(Initsize*sizeof(int);if(!L.elem)return;L.length=0;L.Listsize=Initsize;/InitListvoidCreateList(SqList&L)inti;charc;for(i=0;i=L.Listsize)int*newbase;newbase=(int*)realloc(L.elem,(Initsize+Increment)*sizeof(

24、int);L.elem=newbase;/ifL.elemL.length=e;L.length+;/InsertListvoidPrint(SqListL)inti;for(i=0;i=0;i-)while(B.elemj=A.elemi)if(B.elemj=A.elemi)InsertList(C,B.elemj);j=j-1;/while/forprintf(逆向兼并后的元素为:n);Print(C);/Intersetvoidmain(intargc,char*argv)SqListA,B;InitList(A);InitList(B);printf(请输入次序表A元素(5ge):n

25、);CreateList(A);printf(请输入次序表B元素(5ge):n);CreateList(B);Interset(A,B);printf(n);七、 单链表元素反向逆置真题:0502:#includestdafx.h#include#includetypedefstructLNodeintdata;structLNode*next;LNode,*LinkList;intn;voidCreateList(LinkList&L)LinkListP,Q;inti;L=(LinkList)malloc(sizeof(LNode);P=L;charc;for(i=0;idata);c=ge

26、tchar();P-next=Q;P=P-next;/forP-next=NULL;voidInverseList(LinkList&L)LinkListP,Q;P=L-next;L-next=NULL;while(P)Q=P;P=P-next;Q-next=L-next;L-next=Q;/whilevoidPrintList(LinkListL)LinkListp;p=L-next;while(p)printf(%dn,p-data);p=p-next;voidmain(intargc,char*argv)LinkListL;printf(请输入链表元素个数:n);scanf(%d,&n)

27、;printf(请输入链表元素:n);CreateList(L);InverseList(L);printf(反向逆置后的链表元素为:n);PrintList(L);八、 指定结点与后一个结点交流真题0703:#includestdafx.h#include#includetypedefstructLNodeintdata;structLNode*next;LNode,*LinkList;intn;/链表元素个数voidExchange(LinkList&L,LinkListP)/将P所指的元素与厥后一个元素进展交流LinkListQ;Q=L;while(Q-next!=P)Q=Q-next;

28、Q-next=P-next;P-next=Q-next-next;Q-next-next=P;/ExchangevoidCreateList(LinkList&L)/结构链表LinkListP,Q;inti;L=(LinkList)malloc(sizeof(LNode);P=L;for(i=0;idata);P-next=Q;P=P-next;/forP-next=NULL;/CreateListvoidPrintList(LinkList&L)/打印链表一切元素LinkListP;P=L-next;while(P)printf(%d,P-data);P=P-next;/PrintListv

29、oidmain(intargc,char*argv)LinkListList,P;printf(请输入链表元素个数:n);scanf(%d,&n);printf(请输入链表元素:n);CreateList(List);P=List-next-next-next;/假定p指向第三个结点Exchange(List,P);printf(P假定指向第三个结点与后一个结点交流后链表元素为:n);PrintList(List);printf(n);九、 静态链表真题:0806:#includestdafx.h#include#defineMAXSIZE11typedefstructintdata;/存储数

30、据intcur;component,SLinkListMAXSIZE;voidInitSpace_SL(SLinkList&space)/将一维数组space中各重量连成一个备用链表,space0.cur为头指针,/“0表现空指针inti;for(i=0;iMAXSIZE-1;+i)spacei.cur=i+1;spaceMAXSIZE-1.cur=0;/InitSpace_SLintMalloc_SL(SLinkList&space)/假定备用空间链表非空,那么前往调配的结点下标,否那么前往0inti;i=space0.cur;if(space0.cur)space0.cur=spacei.

31、cur;returni;/Malloc_SLvoidprint(SLinkListspace,ints)inti;printf(元素为:n);for(i=spaces.cur;ispace0.cur;i+)printf(%d,spacei.data);/forprintf(n);/printvoidFree_SL(SLinkList&space,intk)/将下标为k的闲暇结点接纳到备用链表spacek.cur=space0.cur;space0.cur=k;/Free_SLvoidDifference(SLinkList&space)/顺次输入聚集A与B的元素,在一维数组space中树破A-

32、BUB-A/的静态链表,s为其头指针。假定备用空间充足年夜,space0.cur为其头指针。ints,r,p,i,j,k;intm,n,b;InitSpace_SL(space);s=Malloc_SL(space);/天生头结点r=s;/r指向s的以后最初结点printf(请输入A与B的元素个数:n);scanf(%d,%d,&m,&n);printf(请分不输入A的元素:n);for(j=1;j=m;j+)i=Malloc_SL(space);/调配结点scanf(%d,&spacei.data);spacer.cur=i;/拔出到开头r=i;/forspacer.cur=0;/尾结点的指

33、针为空printf(请分不输入B的元素:n);for(j=1;j=n;j+)scanf(%d,&b);/顺次输入B的元素,如不存在以后表中,那么拔出,否那么删除p=s;k=spaces.cur;/k指向聚集A的第一个结点while(k!=spacer.cur&spacek.data!=b)/在以后表中查寻p=k;k=spacek.cur;/whileif(k=spacer.cur)/不存在于以后表中i=Malloc_SL(space);spacei.data=b;spacei.cur=spacer.cur;spacer.cur=i;/ifelse/存在,删除spacep.cur=spacek.

34、cur;Free_SL(space,k);if(r=k)r=p;/假定删除是r的所指结点,那么需求修正尾指针/else/forprint(space,s);/Differencevoidmain(intargc,char*argv)SLinkListspace;Difference(space);十、 从年夜到小输入键盘输入的数中互不相称的数真题:0803:#includestdafx.h#include#includetypedefstructLNodestructLNode*next;intdata;LNode,*LinkList;voidListInsert(LinkList&L,int

35、e)/L递增有序,假如e在L中不存在,那么拔出,拔出后的L仍然有序LinkListp,q;p=L;while(p-next&p-next-datae)p=p-next;if(p-next&p-next-data=e)return;/存在,无需拔出elseq=(LinkList)malloc(sizeof(LNode);q-data=e;q-next=p-next;p-next=q;/if/ListInsertvoidPrintList(LinkListL)/打印l中一切元素LinkListp;p=L-next;while(p)printf(%d,p-data);p=p-next;/PrintListvoidmain(intargc,char*argv)LinkListL;intn=5;/假定拔出五个元素inti=0,e;L=(LinkList)malloc(sizeof(LNode);L-next=NULL;pr

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

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁