《数据结构代码(仅供参考).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