# include <stdio.h>
# include <stdlib.h>
/**
* 时间:2016年6月25日 15:01:25
* 内容:循环单链表
*/
# define ListSize 100
struct Node
{
int data;
struct Node *next;
};
typedef struct Node ListNode;
typedef struct Node *LinkList;
LinkList CreateCycleList(int);
void DisplayCycleList(LinkList);
int main(void)
{
LinkList h;
int n;
printf("创建一个循环的单链表:\n");
printf("请输入元素的个数:");
scanf("%d",&n);
h=CreateCycleList(n);
printf("输出循环单链表\n");
DisplayCycleList(h);
return 0;
}
/**
* 创建一个不带头结点的循环单链表
* @param n 结点量
* @return 返回头结点
*/
LinkList CreateCycleList(int n)
{
int e;
LinkList head=NULL;
ListNode *p,*q;
int i=1;
q=NULL;
while (i<=n)
{
printf("请输入第%d个元素:", i);
scanf("%d",&e);
if (i==1)// 创建第一个结点
{
head=(ListNode*)malloc(sizeof(ListNode));
head->data=e;
head->next=NULL;
q=head;// 指针q指向链表最后一个结点
}
else
{
p=(ListNode*)malloc(sizeof(ListNode));
p->data=e;
p->next=NULL;
q->next=p;
q=p;
}
i++;
}
if (q!=NULL)
q->next=head;// 将最后一个结点的指针指向头结点
return head;
}
/**
* 显示函数
* @param head 头结点
*/
void DisplayCycleList(LinkList head)
{
ListNode *p;
p=head;
if (p==NULL)
{
printf("该链表是空表\n");
return ;
}
while (p->next!=head)
{
printf("%d ", p->data);
p=p->next;
}
printf("%d\n", p->data);
}
循环单链表
最新推荐文章于 2022-03-06 19:04:18 发布