#include <stdio.h>
#include <stdlib.h>
#include "03_Looplinklist.h"
/*
* function: //创建一个单向循环链表
* @param [ in]
* @param [out]
* @return
*/
LoopLinklist* create_Looplinklist(void)
{
LoopLinklist *head=(LoopLinklist*)malloc(sizeof(LoopLinklist));
if(NULL==head)
{
printf("头结点申请失败,链表创建失败\n");
return NULL;
}
//头结点中链表长度要初始化为0
head->data.len=0;
//头结点中的指针域要初始化为自身
head->next=head;
return head;
}
/*
* function: //头插法插入
* @param [ in]
* @param [out]
* @return
*/
int insert_LooplinklistHead(LoopLinklist* head,datatype num)
{
//创建一个新结点
LoopLinklist* temp=(LoopLinklist*)malloc(sizeof(LoopLinklist));
if(NULL==temp)
{
printf("创建一个新结点失败,插入失败\n");
return -1;
}
//将结点进行初始化
temp->data.text=num;
temp->next=head;
//将新的结点头插法插入链表
temp->next=head->next;
head->next=temp;
head->data.len++; //更新头结点中链表长度度
return 0;
}
/*
* function: //遍历链表
* @param [ in]
* @param [out]
* @return
*/
void show_Looplinklist(LoopLinklist* head)
{
LoopLinklist* p=head->next;
while(p!=head)
{
printf("%d\t",p->data.text);
p=p->next;
}
putchar(10);
return;
}
/*
* function: //尾插法插入数据
* @param [ in]
* @param [out]
* @return
*/
int insert_LooplinklistRear(LoopLinklist* head,datatype num)
{
//创建一个新结点
LoopLinklist* temp=(LoopLinklist*)malloc(sizeof(LoopLinklist));
if(NULL==temp)
{
printf("创建一个新结点失败,插入失败\n");
return -1;
}
//将结点进行初始化
temp->data.text=num;
temp->next=NULL;
//找到尾结点
LoopLinklist*p=head;
while(p->next!=head)
{
p=p->next;
}
//插法插入数据
temp->next=p->next;
p->next=temp;
head->data.len++; //更新头结点中链表长度
return 0;
}
/*
* function: 判断链表是否为空
* @param [ in]
* @param [out]
* @return 为空返回1,不为空返回0
*/
int isEmpty_Looplinklist(LoopLinklist*head)
{
return head->next==head?1:0;
}
/*
* function: //头删法
* @param [ in]
* @param [out]
* @return
*/
datatype delete_LooplinklistHead(LoopLinklist*head)
{
//判断是否为空
if(isEmpty_Looplinklist(head))
{
printf("链表为空,删除失败\n");
return (datatype)(-1);
}
//备份要删除的结点p
LoopLinklist*p=head->next;
//修改头结点中指针域的指向
head->next=p->next;
datatype num=p->data.text;
//释放结点p
free(p);
p=NULL;
head->data.len--;
return num;
}
/*
* function: //尾删法
* @param [ in]
* @param [out]
* @return
*/
datatype delete_LooplinklistRear(LoopLinklist*head)
{
//判断是否为空
if(isEmpty_Looplinklist(head))
{
printf("链表为空,删除失败\n");
return (datatype)(-1);
}
//找到倒数第二个结点
LoopLinklist*p,*q;
p=head;
while(p->next->next!=head)
{
p=p->next;
}
q=p->next;
p->next=q->next;
datatype num=p->next->data.text;
free(q);
q=NULL;
head->data.len--;
return num;
}
数据结构单向循环链表
最新推荐文章于 2024-09-17 23:35:09 发布
本文详细介绍了如何使用C语言实现单向循环链表,包括创建链表、头插法和尾插法插入节点、遍历链表以及判断和删除链表头尾节点的操作。
摘要由CSDN通过智能技术生成