1、#include#includetypedef struct nodeint data;struct node *next;lnode,*linkedlist;/*单循环链表建立*/linkedlist linkedlistcreat()int x;linkedlist L,p,r;L=(lnode*)malloc(sizeof(lnode);L-next=NULL;r=L;scanf(“%d“,while(x!=-1)p=(lnode*)malloc(sizeof(lnode);p-data=x;r-next=p;r=p;scanf(“%d“,r-next=L;return L;/*打印链表
2、*/void linkedlistprint(linkedlist L)linkedlist p=L-next;printf(“n/*打印链表*/n“);while(p!=L)printf(“%5d“,p-data);p=p-next;/*求单循环链表的长度*/void linkedlistlenght(linkedlist L)int x=0;linkedlist p=L-next;while(p!=L)x+;p=p-next;printf(“n/*求单循环链表的长度*/“);printf(“n 本单循环链表的长度是:%d“,x);/*求第 i 个元素*/void linkedlistget
3、(linkedlist L) int x,j=1;linkedlist p=L-next;printf(“n/*求第 i 个元素*/n“);printf(“n 您要求第几个元素请输入:“);scanf(“%d“,while(jnext;printf(“您要求的第%d 个元素是%d“,x,p-data);/*元素定位*/void linkedlistlocate(linkedlist L)linkedlist p=L-next;int x,j=1;printf(“n/*元素定位*/n“);printf(“您要定位的元素是什么请输入:“);scanf(“%d“,while(p-data!=x)j+
4、;p=p-next;printf(“您要定位的元素%d 是本单循环链表中的第%d 个元素“,x,j);/*求某元素前驱*/void linkedlistprior(linkedlist L)linkedlist pre=L,p=L-next;int x;printf(“n/*求某元素前驱*/n“);printf(“n 您要用于求其前驱的元素是请输入:“);scanf(“%d“,if(p-data=x) printf(“n%d 就是本单循环链表的第一个元素,故其没有前驱。“,x);elsewhile(p-data!=x)pre=pre-next;p=p-next;printf(“n 您输入的元素
5、%d 的前驱是%d“,x,pre-data);/*求某元素后继*/void linkedlistnext(linkedlist L)int x;linkedlist p=L-next;printf(“n/*求某元素后继 */n“);printf(“n 您要求哪个元素的后继请输入:“);scanf(“%d“,while(p-data!=x)p=p-next;if(p-next=L) printf(“n%d 是本单循环链表规定的最后一个值。 “,x);elseprintf(“n%d 的后继是%d“,x,p-next-data);/*在某元素后插入的函数*/void linkedlistinser(
6、linkedlist L)int x,y;linkedlist s,q=L-next,p=L-next;printf(“n/*在某元素后插入的函数*/n“);printf(“您要在哪个元素后插入什么元素请分别输入:“);scanf(“%d %d“,s=(lnode*)malloc(sizeof(lnode);s-data=y;while(p-data!=x)p=p-next;s-next=p-next;p-next=s;/*删除元素函数*/void linkedlistdelete(linkedlist L)int x;linkedlist pre=L,p=L-next;printf(“n/*
7、删除元素函数*/n“);printf(“n 您要删除哪个元素请输入:“);scanf(“%d“,while(p-data!=x)pre=pre-next;p=p-next;pre-next=p-next;free(p);void main()int flag;linkedlist p;printf(“n 请您输入数据构造单循环链表:“);p=linkedlistcreat();printf(“n/请您选择操作类型/n“);printf(“0.退出操作。1.打印链表。2.求链表长度。3.求第 i 个元素。4.元素定位。5.求某元素前驱。6.求某元素后继。7.在某元素后插入的函数。8.删除元素函数
8、。n“);printf(“n 请选择:“);scanf(“%d“,while(flag)switch(flag)case 0: break;/*退出操作*/case 1: linkedlistprint(p); break;/*打印链表*/case 2: linkedlistlenght(p); break;/*求单循环链表的长度*/case 3: linkedlistget(p); break;/*求第 i 个元素*/case 4: linkedlistlocate(p); break;/*元素定位*/case 5: linkedlistprior(p); break;/*求某元素前驱*/case 6: linkedlistnext(p); break;/*求某元素后继*/case 7: linkedlistinser(p);break;/*在某元素后插入的函数*/case 8: linkedlistdelete(p);break;/*删除元素函数*/printf(“n 请选择:“);scanf(“%d“,printf(“n 退出操作。“);