add:datastruct static chained linear list
This commit is contained in:
parent
bafc1234e9
commit
600d464264
|
|
@ -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*/
|
||||
```
|
||||
|
||||
|
||||
参考资料:
|
||||
|
||||
- [大话数据结构]()
|
||||
Loading…
Reference in New Issue