//断更9天,是因为个人遇到了一点点问题,不过已经很快适应了!
//建议学习时长:15分钟
循环链表
核心思想:循环链表的主要实现方式是通过将尾结点指向首结点或者头结点实现链表循环
1.首先定义链表的结点
typedef int elemtype;//假设链表中的元素全为int整型
typedef struct node {
elemtype data;
struct node* next;
}LNode,LinkList;
//LNode用来声明与链表有关的变量,LinkList用来声明与链表有关的函数
//可以依据个人习惯修改
2.接着借用“头插法”依次输入单链表的值
LinkList* CreateList(int n)
{
LNode* L;
L = (LNode*)malloc(sizeof(LNode));
L->next = NULL;
int i;
for (i = n; i > 0; i--)
{
LNode* p;
p= (LNode*)malloc(sizeof(LNode));
printf("datain-%d:",i);
scanf_s("%d", &p->data);
p->next = L->next;
L->next = p;
}
return L;
}
3.编写一个算法,用于实现循环列表
LinkList* Circulatlist(LNode* L,int n)
{
LNode* p;
p = (LNode*)malloc(sizeof(LNode));
p = L->next;
while(p->next)
{
p = p->next;
}
p->next = L->next;
return L;
}
4.输出链表
LinkList* Printlist(LNode*L,int n)
{
LNode* p;
p = (LNode*)malloc(sizeof(LNode));
p = L->next;
int i;
printf("list=");
for(i=n;i>0;i--)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
return 0;
}
5.完成代码实现
//循环链表的实现
#include<stdio.h>
#include<stdlib.h>
typedef int elemtype;
typedef struct node {
elemtype data;
struct node* next;
}LNode,LinkList;
LinkList* CreateList(int n)
{
LNode* L;
L = (LNode*)malloc(sizeof(LNode));
L->next = NULL;
int i;
for (i = n; i > 0; i--)
{
LNode* p;
p= (LNode*)malloc(sizeof(LNode));
printf("datain-%d:",i);
scanf_s("%d", &p->data);
p->next = L->next;
L->next = p;
}
return L;
}
LinkList* Printlist(LNode*L,int n)
{
LNode* p;
p = (LNode*)malloc(sizeof(LNode));
p = L->next;
int i;
printf("list=");
for(i=n;i>0;i--)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
return 0;
}
LinkList* Circulatlist(LNode* L,int n)
{
LNode* p;
p = (LNode*)malloc(sizeof(LNode));
p = L->next;
while(p->next)
{
p = p->next;
}
p->next = L->next;
return L;
}
int main()
{
int n,x;
LNode* first;
first = (LNode*)malloc(sizeof(LNode));
printf("length=");
scanf_s("%d",&n);
first = CreateList(n);
Printlist(first,n);
Circulatlist(first, n);
printf("times of circulate:");
scanf_s("%d", &x);
Printlist(first,x*n);
return 0;
}
//运行结果
学完这篇文章你又进步了一点点!真棒!