数据结构与算法实验源代码

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验二#includestdio.h#includestdlib.h#defineMaxlen100typedefstruct{intdata[Maxlen];intlast;}Sequenlist;Sequenlist*SqLsetnull(){//建立一个空的顺序表Sequenlist*L;L=(Sequenlist*)malloc(sizeof(Sequenlist));L-last=-1;returnL;}void*SqLset(Sequenlist*L){//对顺序表输入数据intn;printf(请输入要输入的元素数量:);scanf(%d,&n);printf(请输入要输入的元素:);for(inti=0;in;i++){scanf(%d,&L-data[i]);}L-last=i;returnL;}intSqLdelete(Sequenlist*L,inti){//删除顺序表中的元素//因为只是调用该函数删除顺序表中多余的元素省略的一些数据判断intj;for(j=i;j=L-last+1;j++)L-data[j]=L-data[j+1];L-last--;return1;}voidSqLdel(Sequenlist*L){//寻找顺序表中多余的元素并删除inti,j;if(L-last0){printf(\n顺序表为空\n);}else{for(i=0;i=L-last;i++){for(j=i+1;j=L-last;j++)if(L-data[j]==L-data[i]){SqLdelete(L,j);//调用函数删除下标为j的结点}}}}voidSqLsc(Sequenlist*L){//输出顺序表中的数据inti;if(L-last0)printf(\n顺序表为空\n);else{printf(顺序表中的元素:);for(i=0;iL-last;i++){printf(%d,L-data[i]);}}printf(\n);}intmain(void){Sequenlist*L;L=SqLsetnull();intchoice;printf(1,输入数据2,删除重复多余的数据3,输出数据0,退出\n);do{printf(请输入选择:);scanf(%d,&choice);switch(choice){case1:SqLset(L);printf(\n);break;case2:SqLdel(L);printf(\n);break;case3:SqLsc(L);printf(\n);break;default:printf(请输入正确的选择!\n);break;case0:break;}}while(choice!=0);return0;}实验三#includestdio.h#includestdlib.h#defineSIZE15typedefstruct{intdata[SIZE];intlast;}RecordList;RecordList*shuru(){//向顺序表中输入数据ints,i=0;RecordList*L;L=(RecordList*)malloc(sizeof(RecordList));printf(请输入要输入到顺序表中数据的数量:);scanf(%d,&s);if(s15){printf(超过最大的数据长度);}else{printf(请输入要输入的数据:);for(i=0;is;i++)scanf(%d,&L-data[i]);}printf(成功输入%d个数据\n\n,i);L-last=i-1;returnL;}voidpaixu(RecordList*L){//冒泡排序法对顺序表中的数据进行排序intx,change=1,i,j;for(i=0;iL-last&&change!=0;i++){change=0;for(j=0;jL-last-i;j++){if(L-data[j]L-data[j+1]){x=L-data[j+1];L-data[j+1]=L-data[j];L-data[j]=x;change=1;}}}}intBinSrch(RecordList*L,intk){//二分查找intlow=0,i=-1,high,mid;high=L-last;while(low=high){mid=(low+high)/2;if(k==L-data[mid]){i=mid;break;}elseif(kL-data[mid])high=mid-1;elselow=mid+1;}returni;}intmain(void){RecordList*L=NULL;inti,choice,data1;printf(1,输入数据2,二分法查找0,退出\n);do{printf(请输入选择:);scanf(%d,&choice);switch(choice){case1:L=shuru();//输入数据paixu(L);//数据排序break;case2:if(L==NULL||L-last==-1){//查找前检验表中是否有数据printf(\n顺序表为空\n\n);break;}else{printf(请输入要查找的数据:);scanf(%d,&data1);i=BinSrch(L,data1);printf(数据%d的序号(下标)是%d\n\n,data1,i);break;}default:printf(\n请输入正确的选择\n\n);break;case0:break;}}while(choice!=0);return0;}实验四#includestdio.h#includestdlib.h#defineSIZE15typedefstruct{intdata[SIZE];intlast;}RecordList;RecordList*shuru(){//向顺序表中输入数据ints,i=0;RecordList*L;L=(RecordList*)malloc(sizeof(RecordList));printf(请输入要输入到顺序表中数据的数量:);scanf(%d,&s);if(s15){printf(超过最大的数据长度);}else{printf(请输入要输入的数据:);for(i=0;is;i++)scanf(%d,&L-data[i]);}printf(成功输入%d个数据\n\n,i);L-last=i-1;returnL;}voidpaixu(RecordList*L){//冒泡排序法对顺序表中的数据进行排序intx,change1=1,change2=1,i,j;for(i=0;change1!=0||change2!=0;i++){change1=0;change2=0;if(i%2==0){for(j=1;jL-last;j=j+2){if(L-data[j]L-data[j+1]){x=L-data[j+1];L-data[j+1]=L-data[j];L-data[j]=x;change1=1;}}}else{for(j=0;jL-last;j=j+2){if(L-data[j]L-data[j+1]){x=L-data[j+1];L-data[j+1]=L-data[j];L-data[j]=x;change2=1;}}}}}voidshuchu(RecordList*L){inti;for(i=0;i=L-last;i++){printf(%d,L-data[i]);}}intmain(void){RecordList*L=NULL;intchoice;printf(1,输入数据2,冒泡排序3,输出0,退出\n);do{printf(请输入选择:);scanf(%d,&choice);switch(choice){case1:L=shuru();//输入数据break;case2:paixu(L);//数据排序printf(排序成功\n\n);break;case3:shuchu(L);printf(\n);break;default:printf(\n请输入正确的选择\n\n);break;case0:break;}}while(choice!=0);return0;}实验五#includestdio.h#includestdlib.htypedefstructnode{intdata;structnode*next;}LinkList;LinkList*CreatList(){LinkList*head,*r,*s;//建立带头结点的链表,head为链表的头结点intn;head=(LinkList*)malloc(sizeof(LinkList));head-next=NULL;r=head;printf(请输入要输入的数据的个数:);scanf(%d,&n);printf(请输入要输入的数据:);for(inti=0;in;i++){s=(LinkList*)malloc(sizeof(LinkList));scanf(%d,&s-data);s-next=NULL;r-next=s;r=s;//r指向链表的尾节点}returnhead;}voidAdd(LinkList*head,intx){LinkList*s,*r,*t;t=(LinkList*)malloc(sizeof(LinkList));r=head;s=head-next;for(;s!=NULL&&x=s-data;s=s-next){//要寻找要插入节点的位置r=r-next;}t-data=x;if(s==NULL){//插入在链表的表尾r-next=t;t-next=NULL;}else{//插入在链表的中间t-next=r-next;r-next=t;}}voidOut(LinkList*head){//输出表中的数据LinkList*L;L=head-next;printf(表中的数据:);for(;L;L=L-next){printf(%d,L-data);}printf(\n);}intmain(void){LinkList*head;intx;head=CreatList();Out(head);printf(请输入要插入的数据:);scanf(%d,&x);Add(head,x);Out(head);return0;}实验七#includestdio.h#includestdlib.htypedefstructnode{intdata;structnode*next;}LinkList;typedefstruct{LinkList*rear;}LinkQueue;LinkQueue*SetQueue(){//建立空的队列LinkQueue*Q;LinkList*head;Q=(LinkQueue*)malloc(sizeof(LinkQueue));head=(LinkList*)malloc(sizeof(LinkQueue));head-data=-1;head-next=head;Q-rear=head;returnQ;}intQueueEmpty(LinkQueue*Q){//检验对列是否为空LinkList*p;p=Q-rear;if(p-data==-1){return1;}elsereturn0;}LinkQueue*Add(LinkQueue*Q,intx){//数据入队LinkList*p;p=(LinkList*)malloc(sizeof(LinkList));p-data=x;p-next=Q-rear-next;Q-rear-next=p;Q-rear=p;returnQ;}

1 / 29
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功