C语言循环链表实例,单向循环链表C语言实现(示例代码)

本文介绍了一个创建单向循环链表的C语言程序,链表的最后一个节点指向头节点形成循环。在main函数中,程序遍历链表,但由于是循环链表,遍历会形成无限循环,直到被手动终止。程序展示了链表数据结构在构建环形结构时的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们都知道,单向链表最后指向为NULL,也就是为空,那单向循环链表就是不指向为NULL了,指向头节点,所以下面这个程序运行结果就是,你将会看到遍历链表的时候就是一个死循环,因为它不指向为NULL,也是周而复始的执行。串成了一个环型。

#include

#include

typedef struct node

{

char name[20];

struct node *link;

}student;

student * creat(int n) /*建立单链表的函数,形参n为人数*/

{

/* *h保存表头结点的指针,*p指向当前结点的前一个结点,*s指向当前结点*/

student *p,*h,*s;

int i;

if((h=(student *)malloc(sizeof(student)))==NULL) /*分配空间并检测*/

{

printf("不能分配内存空间!");

exit(0);

}

h->name[0]='\\0'; /*把表头结点的数据域置空*/

h->link=NULL; /*把表头结点的链域置空*/

p=h;/*p指向表头结点*/

for(i=0;i

{

if((s= (student *) malloc(sizeof(student)))==NULL) /*分配新存储空间并检测*/

{

printf("不能分配内存空间!");

exit(0);

}

p->link=s; /*把s的地址赋给p所指向的结点的链域,这样就把p和s所指向的结点连接起来了*/

printf("请输入第%d个人的姓名",i+1);

//指向结构体中的数据

scanf("%s",s->name);

s->link=NULL;

p=s;

}

//如果是单向链表,这里为NULL,环形链表需要指向保存表头节点的指针。

p->link=h;

return(h);

}

int main(void)

{

int number;

student *head; /*head是保存单链表头结点地址的指针*/

student *p;

printf("请输入相应的人数:\\n");

scanf("%d",&number);

head=creat(number); /*把所新建的单链表头地址赋给head*/

p=head;

while(p->link)

{

printf("%s\\n",p->name);

p=p->link;

}

return 0 ;

}运行结果:

b0ba6be36b2d42a68a9d14bb2de7622d.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值