- 循环单链表的结构体定义
- 初始化链表
- 用尾插法创建带头结点的循环单链表
- 遍历循环单链表
- 主函数调用
目录:
各部分实现:
循环单链表的的结构体定义
typedef struct tagNode
{
int data;/*数据域*/
struct tagNode *next;/*指针域*/
}Node,*LinkList;
初始化链表
带头结点的循环单链表,初始化时使其头结点指针指向自身
void InitList(LinkList *L)
{
*L=(LinkList)malloc(sizeof(Node));
(*L)->next=*L;/*头结点指针指向其自身*/
}
用尾插法创建带头结点的循环单链表
尾插法创建循环单链表,大致操作与构建普通单链表相同,区别在于每一次插入新结点需要将其指针域指向头结点。
void CreateList(LinkList L,int n)/*带头结点的循环单链表,尾插法*/
{
LinkList p=L,s;
while(n--)
{
s=(LinkList)malloc(sizeof(Node));
s->next=L;/*将其指针域指向头结点*/
scanf("%d",&s->data);
p->next=s;
p=s;
}
}
遍历循环单链表
void TraverseList(LinkList L)
{
LinkList p=L->next;
while(p!=L)
{
printf("%d ",p->data);
p=p->next;
}
}
主函数调用
int main()
{
int n;
LinkList L;
InitList(&L);
scanf("%d",&n);
CreateList(L,n);
TraverseList(L);
return 0;
}
全部代码
#include <stdio.h>
#include <stdlib.h>
typedef struct tagNode
{
int data;
struct tagNode *next;
}Node,*LinkList;
void InitList(LinkList *L)
{
*L=(LinkList)malloc(sizeof(Node));
(*L)->next=*L;
}
void CreateList(LinkList L,int n)//带头结点的循环单链表,尾插法
{
LinkList p=L,s;
while(n--)
{
s=(LinkList)malloc(sizeof(Node));
s->next=L;
scanf("%d",&s->data);
p->next=s;
p=s;
}
}
void TraverseList(LinkList L)
{
LinkList p=L->next;
while(p!=L)
{
printf("%d ",p->data);
p=p->next;
}
}
int main()
{
int n;
LinkList L;
InitList(&L);
scanf("%d",&n);
CreateList(L,n);
TraverseList(L);
return 0;
}