add:datastruct static chained linear list

This commit is contained in:
vilet.yy 2021-06-24 14:21:40 +08:00
parent bafc1234e9
commit 600d464264
1 changed files with 32 additions and 0 deletions

View File

@ -0,0 +1,32 @@
---
layout: post
title: "大话数据结构:线性表的链式存储结构——循环链表"
date: 2020-06-11 10:01:08
author: "Viletyy"
header-style: text
tags:
- 数据结构
---
## 循环链表
将单链表中终端结点的指针端由空指针改为指向头结点,就使得整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称**循环链表**circular linked list
其实循环链表和单链表的主要差异就在于循环的判断条件上原来是判断p->next是否空现在则是p->next不等于头结点则循环未结束。
在单链表中我们有了头结点时我们可以用O(1)的时间访问第一个结点但对于要访问到最后一个结点却需要O(n)时间,因为我们需要将单链表全部扫描一遍。
在循环链表中,不用头指针,二十用指向终端结点的尾指针来表示循环链表,此时查找开始结点和终端结点都很方便了。
终端结点用尾指针rear指示则查找终端结点是O(1)而开始结点其实就是rear->next->next其时间复杂也为O(1)
### 合并两个循环链表
```c
p = rearA->next; /*保存A链表的头结点*/
rearA->next=rearB->next->next; /*将本是指向B链表的第一个结点赋值给rearA->next*/
rearB->next=p /*将原A链表的头结点赋值给rearB->next*/
free(p); /*释放p*/
```
参考资料:
- [大话数据结构]()