资源描述:
《c语言数据结构单循环链表.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、数据结构上机实验课后练习报告姓名:冯天明学号:班级:通信1412015年9月28日星期一实验四:编写一个程序,实现单循环链表的各种基本运算,并在此基础上设计一个主程序完成以下功能。1.初始化单循环链表L2.依次采用尾插法或者头插法插入元素a,b,c,d,e3.输出单循环链表4.输出单循环链表的长度5.判断单循环链表是否为空6.输出单循环链表的第四个元素7.输出元素a的位置8.在第三个元素位置插入元素f9.输出单循环链表L10.删除单循环链表L的第四个元素11.输出单循环链表L12.释放单循环链表实
2、验代码:#include#include#include#defineOK0#defineERROR-2#defineOVERFLOW-1typedefcharElemType;typedefstructCirNode{ElemTypedata;CirNode*next;}CirNode,*CirLinkList;voidInitCirList(CirLinkList*L){*L=(CirLinkList)malloc(sizeof(Cir
3、Node));if(!L)exit(OVERFLOW);(*L)->next=*L;//头指针跟尾指针}intDestroyList(CirLinkList*L){CirLinkListq,p=(*L)->next;//p指向头结点while(p!=*L)//直到表尾{q=p->next;free(p);p=q;}free(*L);//释放头结点内存*L=NULL;returnOK;}intListEmpty(CirLinkListL){return(L==NULL);}intListLength
4、(CirLinkListL)//获得链表的长度{intnumber=0;CirLinkListp;p=L->next;//p指向头结点while(p!=L)//遍历链表{number++;p=p->next;}returnnumber;}ElemTypeGetElem(CirLinkListL,inti){ElemTypee;intj=1;CirLinkListp=L->next->next;//p指向第一个结点if(i<=0
5、
6、i>ListLength(L))//位置非法returnERROR;
7、while(jnext;j++;}e=p->data;returne;}intLocateElem(CirLinkListL,ElemTypee){inti=0;CirLinkListp=L->next->next;//p指向第一个结点while(p!=L->next){i++;if(p->data==e)//与查找的元素相同returni;p=p->next;//未找到,继续查找}returnERROR;}intListInsert(CirLinkList*L,inti,Ele
8、mTypee){intj=0;CirLinkListp,s;p=(*L)->next;//p指向头结点if(i<=0
9、
10、i>ListLength(*L)+1)//插入位置非法returnERROR;while(jnext;j++;}s=(CirLinkList)malloc(sizeof(CirNode));//生成新结点s->data=e;s->next=p->next;//p->将当前插入的下一个点地址p->next=s;if(p==*L)*L=s;r
11、eturnOK;}intListDelete(CirLinkList*L,inti){CirLinkListp=(*L)->next,q;//p指向头结点intj=0;if(i<=0
12、
13、i>ListLength(*L))//删除位置非法returnERROR;while(jnext;j++;}q=p->next;//q指向待删除结点p->next=q->next;if(*L==q)//删除表尾元素*L=p;free(q);//释放删除结点returnOK;
14、}intDisplayList(CirLinkListL)//遍历链表{CirLinkListp;p=L->next->next;printf("链表的元素为:");while(p!=L->next){printf("%4c",p->data);p=p->next;}printf("");returnOK;}voidmain(){CirLinkListL;ElemTypee;intlength,index;InitCirList(&L);//创建空链表ListInsert(&L