线性表----循环链表和静态链表

1、循环链表

1.1 循环单链表

循环单链表和单链表的区别在于,表中最后一个结点指针不在是null,而是头指针,从而使整个链表形成一个环
在这里插入图片描述

  • 此时判断单链表是否为空,条件就是头结点的指针是否等于头指针
  • 此时单链表相当于一个环,而且还是一个有方向的环,头指针表明这个环的入口地址,然后顺着next指针走下去,所以循环单链表的插入、删除算法与单链表几乎一样,所不同就是表尾的操作。
  • 如果经常对表尾操作,可以设个尾指针(表名是头指针),对表头和表尾的操作时间复杂度都是0(1)

1.2循环双链表

相对于双链表,不同的是循环双链表的头结点prior还要指向表尾,尾部的next还要指向头结点,其他都一样,循环双链表相当于有两个环,两个不同方向的环,头指针(表名)告诉我们这个循环双链表的入口地址,我们可以向两个方向操作数据
在这里插入图片描述

  • 判断循环双链表是否为空,只要头结点的prior和next都等于头指针

2、静态链表

静态链表没有通过指针来实现,是通过数组来实现线性表的链式存储结构
描述:

typedef int ElemType;
#define  MaxSize 50
typedef struct {
	ElemType data;
	int next;
}SLinkList[MaxSize];
  • 静态链表的结点也有数据域和指针域,但指针域存放的不再是地址,而是结点的相对地址(就是数组下标)
  • 因为是数组来描述,所以静态链表也要预先分配一块连续的内存空间
  • 数组第一个元素不存放数据(和头结点和相似),他的指针域存放第一个元素所在的数组下标
    在这里插入图片描述
  • 静态链表的结束标志有很多,上图中-1就是,因为数组下标不可能为-1
  • 静态链表对不支持指针的高级语言(Basic)使用很方便
发布了168 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41683305/article/details/104394229