数据结构与算法--循环链表的表示及基本操作

一、循环链表

         1) 循环链表:是一种头尾相接的链表(表中最后一个结点的指针域指向头结点,整个链表形成一个环)

         2) 优点: 从表中任一结点出发均可找到表中其他结点

         3) 循环链表中没有NULL指针,当遍历链表时,终止条件是最后一个结点的指针域是否等于头指针

         4) 尾指针表示单循环链表:

                   首元结点的存储位置: R->next->next;

                   最后一个结点的存储位置: R

              //用尾指针表示单循环链表访问首尾结点时间复杂度都为O(1)

二、循环链表的基本操作

      1.声明结点类型和指向结点的指针类型

typedef int Datatype;

typedef struct Node                              //声明结点的类型和指向结点的指针类型
{
	Datatype data;									//结点的数据域
	struct Node *next;							//结点的指针域
}Node,*pNode;									//pNode为指向结点的指针类型

      2.初始化链表

​
void InitList(pNode *p)                               //初始化链表
{
	*p = (pNode)malloc(sizeof(Node));                   //用头指针指向头结点
	(*p)->next = (*p);								//头结点的指针域指向头结点
}

      3.判断链表是否为空

int IsEmpty(pNode *p)                               //判断链表是否为空
{
	if ((*p)->next == (*p))                          //判断头结点指针域是否指向头结点
		return 1;						//为空返回1
	return 0;							//不为空返回0
}

      4.销毁链表

void Destroy(pNode *p)							//销毁链表
{
	pNode pL = (*p)->next;                       //将指针pL指向首元结点
	(*p)->next = NULL;                             //将头结点的指针域置空
	*p = pL;                             
  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值