- 单向循环链表的概念:
循环链表,顾名思义链表整体要形成一个圆环状。在单向链表中,最后一个结点的指针是NULL,不指向任何结点,因为没有下一个元素了。要实现循环链表,我们只需要单项链表的最后一个结点指针指向头结点即可
2、单向链表的创建:
#include <stdio.h>
#include <stdlib.h>
#define FALSE -1
#define TRUE 0
typedef int ElemType ;
typedef struct LNode{
ElemType data; //数据域
struct LNode * next;//指针域,指向当前结点的直接后继(下一个结点)
}LNode,*LinkList;
LNode *List_Init()
{
LNode *t;
t=(LNode *)malloc(sizeof(LNode));//创建一个头结点
t->next=NULL;
LNode *head;//定义一个头指针
head=t;//头指针指向头结点
return head;
}
/*
* @brief 尾插法插入一个结点
* @param head 需要插入的链表的头指针
* @param tail 指向尾指针的地址
* @param data 结点数据
*
* */
int Thead_insert(LNode *head,LNode **tail,ElemType data)
{
if(NULL==head)
{
printf("this is NULL");
return FALSE;
}
//创建一个新的结点p
LNode *p=(LNode *)malloc(sizeof(LNode));
p->data=data;
p->next=head;
if(NULL==head->next)
{
head->next=p;
}
else
{
(*tail)->next=p;
}
*tail=p;
return TRUE;
}
//打印
int print_list(LNode *head)
{
if(NULL==head)
return FALSE;
LNode *t;
t = head->next;
while (t != head)
{
printf("%d ", t->data);
t = t->next;
}
printf("\n");
return TRUE;
}
int main() {
printf("Hello, World!\n");
LNode *head;
head=List_Init();
LNode *tail;
int i;
for(i=0;i<6;i++)
{
Thead_insert(head,&tail,100+i);
}
print_list(head);
return 0;
}