您的位置:首页 > 编程语言 > C语言/C++

循环链表C语言实现

2014-05-13 17:33 162 查看
在单链表的基础上,只要把尾指针改为指向头结点,则相应的单链表也变成了循环链表(原来的尾指针指向的是NULL)

#include <stdio.h>
#include <stdlib.h>
//循环链表

//循环链表与单链表大体相同,仅仅是单链表的尾指针指向的是NULL,而循环链表指向的是第1个元素

//基本的数据结构还是一样的
#define OK 1
#define ERROR -1
#define TRUE 1
#define FALSE 0
typedef int ElemType;
typedef int Status;
typedef struct {
ElemType data;
struct Node *next;
}Node,*List;

//1. 链表的初始化
Status InitList(List *L){
*L=(List)malloc(sizeof(Node));
(*L)->next=*L;//尾指针指向头指针
(*L)->data=NULL;
return OK;
}
//2. 判断链表是否为空
Status IsEmpty(List L){
//若为空,返回TRUE
//  如果尾指针指向头指针,则为空
if(L->next==L){
return TRUE;
}else{
return FALSE;
}
}
//3. 链表的整表创建
Status CreateList(List *L,int n){
//创建长度为n的循环链表
int i;
List p;
srand(time(0));
for(i=0;i<n;i++){
p=(List)malloc(sizeof(Node));
p->data=rand()%100+1;
p->next=(*L)->next;
(*L)->next=p;
}

return OK;

}
int main()
{
List L,T;
if(OK==InitList(&L)){
printf("初始化成功\n");
}
if(TRUE==IsEmpty(L)){
printf("链表为空!\n");
}else{
printf("链表不为空!\n");
}

printf("输入初始化循环链表的长度:");
int i,n;
scanf("%d",&n);

if(OK==CreateList(&L,n)){
//循环输出3倍长度的链表值(循环链表可以无限循环输出下去,因为是环)
T=L;
for(i=0;i<3*n;i++){

printf("%d\t",T->data);
T=T->next;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: