/**
* 作者: LinX 2017-6-12
*
* 内容: 循环链表的结构和操作
*/
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct CirNode
{
ElemType data;
struct CirNode *next;
}CirNode,CirList;
CirNode* InitList(); //初始化循环链表
void CreateListR(CirList *L,int n); //尾插法建立循环链表
void printList(CirList *L); //打印循环链表
int main()
{
CirList* L=InitList();
CreateListR(L,5);
printList(L);
return 0;
}
/*初始化循环链表,建立头节点*/
CirNode* InitList()
{
CirNode *head;
head=(CirNode *)malloc(sizeof(CirNode));
head->next=head;
return head;
}
/*创建循环链表*/
void CreateListR(CirList *L,int n)
{
CirNode *s,*r;
int i;
ElemType e;
r=L;
for(i=0;i<n;i++)
{
scanf("%d",&e);
s=(CirList *)malloc(sizeof(CirList));
s->data=e;
r->next=s;
s->next=L;
r=s;
}
}
/*打印循环链表*/
void printList(CirList *L)
{
CirNode* p;
p=L->next;
while(p!=L)
{
printf("%d ",p->data);
p=p->next;
}
}