您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > c语言数据结构单循环链表
数据结构上机实验课后练习报告姓名:冯天明学号:班级:通信1412015年9月28日星期一实验四:编写一个程序,实现单循环链表的各种基本运算,并在此基础上设计一个主程序完成以下功能。1.初始化单循环链表L2.依次采用尾插法或者头插法插入元素a,b,c,d,e3.输出单循环链表4.输出单循环链表的长度5.判断单循环链表是否为空6.输出单循环链表的第四个元素7.输出元素a的位置8.在第三个元素位置插入元素f9.输出单循环链表L10.删除单循环链表L的第四个元素11.输出单循环链表L12.释放单循环链表实验代码:#includestdio.h#includemalloc.h#includestdlib.h#defineOK0#defineERROR-2#defineOVERFLOW-1typedefcharElemType;typedefstructCirNode{ElemTypedata;CirNode*next;}CirNode,*CirLinkList;voidInitCirList(CirLinkList*L){*L=(CirLinkList)malloc(sizeof(CirNode));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(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||iListLength(L))//位置非法returnERROR;while(ji){p=p-next;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,ElemTypee){intj=0;CirLinkListp,s;p=(*L)-next;//p指向头结点if(i=0||iListLength(*L)+1)//插入位置非法returnERROR;while(ji-1)//查找i-1个位置{p=p-next;j++;}s=(CirLinkList)malloc(sizeof(CirNode));//生成新结点s-data=e;s-next=p-next;//p-将当前插入的下一个点地址p-next=s;if(p==*L)*L=s;returnOK;}intListDelete(CirLinkList*L,inti){CirLinkListp=(*L)-next,q;//p指向头结点intj=0;if(i=0||iListLength(*L))//删除位置非法returnERROR;while(ji-1)//查找i-1个结点{p=p-next;j++;}q=p-next;//q指向待删除结点p-next=q-next;if(*L==q)//删除表尾元素*L=p;free(q);//释放删除结点returnOK;}intDisplayList(CirLinkListL)//遍历链表{CirLinkListp;p=L-next-next;printf(链表的元素为:);while(p!=L-next){printf(%4c,p-data);p=p-next;}printf(\n);returnOK;}voidmain(){CirLinkListL;ElemTypee;intlength,index;InitCirList(&L);//创建空链表ListInsert(&L,1,'a');//依次插入元素ListInsert(&L,2,'b');ListInsert(&L,3,'c');ListInsert(&L,4,'d');ListInsert(&L,5,'e');DisplayList(L);length=ListLength(L);//获取长度printf(链表的长度为:%d\n,length);if(ListEmpty(L)){printf(链表为空!\n);}else{printf(链表不为空!\n);}e=GetElem(L,4);//获取第四个位置的元素printf(链表的第四个元素是:%c\n,e);index=LocateElem(L,'a');printf(元素a在第%d个位置\n,index);ListInsert(&L,3,'f');//在第三个位置插入元素fDisplayList(L);ListDelete(&L,4);//删除第四个元素printf(删除第四个元素:\n);DisplayList(L);DestroyList(&L);//销毁链表if(ListEmpty(L)){printf(链表为空!\n);}else{printf(链表不为空!\n);}}
本文标题:c语言数据结构单循环链表
链接地址:https://www.777doc.com/doc-2908930 .html