实验报告实验一线性表实验目的:1.理解线性表的逻辑结构特性;2.熟练掌握线性表的顺序存储结构的描述方法,以及在该存储结构下的基本操作;并能灵活运用;3.熟练掌握线性表的链表存储结构的描述方法,以及在该存储结构下的基本操作;并能灵活运用;4.掌握双向链表和循环链表的的描述方法,以及在该存储结构下的基本操作。实验原理:1.线性表顺序存储结构下的基本算法;2.线性表链式存储结构下的基本算法;实验内容:1.设计单循环链表,要求:(1)单循环链表抽象数据类型包括初始化操作、求数据元素个数操作、插入操作、删除操作,取数据元素操作和判非空操作。(2)设计一个测试主函数,实际运行验证所设计单循坏链表的正确性。2.设计一个有序顺序表,要求:(1)有序顺序表的操作集合有如下操作:初始化,求数据元素个数、插入、删除和取数据元素操作。有序顺序表与顺序表的主要区别是:有序顺序表中数据元素按数据元素值非递减有序。(2)设计一个测试主函数,实际运行验证所设计单循坏链表的正确性。*(3)设计合并函数ListMerge(L1,L2,L3),功能是把有序顺序表L1和L2中的数据元素合并到L3中,要求把L3中的数据元素依然保持有序。并设计一个主函数,验证该合并函数的正确性。程序代码:1.设计单循环链表(1)typedefstructNode{DataTypedata;structNode*next;}SLNode;voidListInitiate(SLNode**head){if((*head=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit(1);(*head)-next=NULL;}intListLength(SLNode*head){SLNode*p=head;intsize=0;while(p-next!=NULL){p=p-next;size++;}returnsize;}intListInsert(SLNode*head,inti,DataTypex){SLNode*p,*q;intj;p=head;j=-1;while(p-next!=NULL&&ji-1){p=p-next;j++;}if(j!=i-1){printf(insertwrongway!);return0;}if((q=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit(1);q-data=x;q-next=p-next;p-next=q;return1;}intListDelete(SLNode*head,inti,DataType*x){SLNode*p,*s;intj;p=head;j=-1;while(p-next!=NULL&&p-next-next!=NULL&&ji-1){p=p-next;j++;}if(j!=i-1){printf(thedeletewrongdata!);return0;}s=p-next;*x=s-data;p-next=p-next-next;free(s);return1;}intListGet(SLNode*head,inti,DataType*x){SLNode*p;intj;p=head;j=-1;while(p-next!=NULL&&ji){p=p-next;j++;}if(j!=i){printf(getthewrongdata!);return0;}*x=p-data;return1;}voidDestroy(SLNode**head){SLNode*p,*p1;p=*head;while(p!=NULL){p1=p;p=p-next;free(p1);}*head=NULL;}intListEmpty(SLNode*head){if(head-next==NULL)return0;elsereturn1;}(2)测试主函数#includestdio.h#includestdlib.h#includemalloc.htypedefintDataType;#includeSLNode.hvoidmain(void){SLNode*head;inti,x;ListInitiate(&head);for(i=0;i10;i++){if(ListInsert(head,i,i+1)==0){printf(wrong);return;}}if(ListDelete(head,4,&x)==0){printf(wrong);return;}for(i=0;iListLength(head);i++){if(ListGet(head,i,&x)==0){printf(wrong);return;}elseprintf(%d,x);}ListEmpty(head);Destroy(&head);}2.设计一个有序顺序表(1)typedefstruct{DataTypelist[MaxSize];intsize;}SeqList;voidListInitiate(SeqList*L){L-size=0;}intListLength(SeqListL){returnL.size;}intListInsert(SeqList*L,DataTypex){inti,j;for(i=0;iL-size;i++)if(x=L-list[i])break;if(i==L-size){L-list[i]=x;L-size++;return1;}else{for(j=L-size;ji;j--)L-list[j]=L-list[j-1];L-list[i]=x;L-size++;return1;}}intListDelete(SeqList*L,DataTypex){inti,j;for(i=0;iL-size;i++)if(x==L-list[i])break;if(i==L-size)return0;else{for(j=i+1;jL-size;j++)L-list[j-1]=L-list[j];L-size--;return1;}}intListGet(SeqListL,inti,DataType*x){if(i0||iL.size-1){printf(wrong);return0;}else{*x=L.list[i];return1;}}(2)测试主函数#includestdio.h#defineMaxSize100typedefintDataType;#includeSXList.hvoidmain(void){SeqListmylist;inti,x;ListInitiate(&mylist);for(i=0;i10;i++){ListInsert(&mylist,i+1);}if(ListDelete(&mylist,4)==0){printf(wrong);return;}for(i=0;iListLength(mylist);i++){if(ListGet(mylist,i,&x)==0){printf(wrong);return;}elseprintf(%d,x);}}