单链表、循环链表、双向循环链表总结
链表介绍
结点的概念:
一个结点包含两个信息,一个是数据域和一个是指针域:
- 数据域存储该结点的数据信息
- 指针域存储其直接后继的位置,其示意图如下:
链表的概念:
每个结点的存储单元是独立的,若干个结点通过指针域依次相链接可构成一个链表,这样的结构称为线性表的链式存储,简称链表。其示意图如下:
为了能够表示链表的开始和结束,需要增加头指针L表示链表的开始,而指针域设置为NULL表示结点的结束。
不带头结点的单向链表
不带头结点的单向链表是最原始的链表,其头指针指向第一个数据元素,若是空链表其头指针的值为NULL。
由于不带头结点的链表在第一个元素插入和删除时带来不方便,因此链表初始化时,我们都需要增加一个头结点,并令头指针指向头结点,后续的链表默认都是带头结点的。其区别参见这篇文章 链表头结点和不带头结点的区别。
带头结点的单向链表
在没有特殊指明情况下,我们创建的链表默认都应该带头结点,其初始化状态为如下图所示:
带有数据元素的链表示意图:
循环链表
循环链表是单向链表的一种特殊形式,可以用于解决约瑟夫环问题。循环链表的最后一个结点的后继指向的是头结点,而不是NULL。其空循环链表的示意图如下:
带有数据元素的循环链表示意图如下:
在某些特殊情况下(比如需要频繁以追加方式插入新结点),我们可以令头指针指向最后一个结点,或者新增加一个尾指针一直指向最后一个结点,其示意图如下:
当头指针指向最后一个结点时或者增加尾指针,可以使得查找链表的开始结点和最后一个结点都方便,其执行时间为O(1). 而在一般情况下,其执行时间为O(n)。
双向循环链表
单向链表存在一个弊端就是,当需要获取某个结点p的前驱时,需要从头指针开始遍历链表,获得“前驱”的执行时间为O(n),为了克服单向链表的这种缺点,可以利用双向链表。
在双向链表中有两个指针域,一个是指向前驱结点的prev,一个是指向后继结点的next指针。下图是空的双向循环链表示意图:
带有数据元素的双向循环链表示意图如下:
双向循环链表的插入和删除结点执行时间均为O(1),为常量级。和其他结构的链表体现了其优越性。
总结
以下这张是带头结点的单链表、循环链表以及双向循环链表的总结:
单链表、循环链表、双向循环链表总结相关推荐
- 【数据结构】单链表和双向循环链表
文章目录 单链表 链表的概念及结构 链表的分类 链表的实现 动态申请一个节点 创建链表 单链表打印 单链表尾插 单链表尾删 单链表头插 单链表头删 单链表的查找 单链表在pos位置之后插入x 单链表删 ...
- 顺序表、链表、双向循环链表
顺序表.链表.双向循环链表 SeqList.h #pragma once #include<stdio.h>#define ListSize 100 //线性表的最大长度 typedef ...
- 单向链表与双向循环链表
文章目录 单链表操作 大纲 核心⭐ 1-链表的建立 1.1head,tail,p相关问题 2-链表的打印 3-链表的插入 3.1 尾插法 3.1.1一级指针无法对空链表进行尾插问题 3.2 头插法 3 ...
- 【链表】双向循环链表的实现
前言 链表是一种物理存储结构上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的链表的结构总共有8种,我们这里来进行带头双向循环链表的增删查改实现 双向循环链表的优势是什么? ...
- 链表——单链表、单向循环链表、双向链表
目录 1 单链表 节点实现 单链表操作 单链表实现 测试 链表与顺序表对比 2 单向循环链表 操作 实现 测试 3 双向链表 操作 实现 测试 1 单链表 单向链表也叫单链表,是链表中最简单的一种形式 ...
- 【数据结构与算法】 01 链表 (单链表、双向链表、循环链表、块状链表、头结点、链表反转与排序、约瑟夫环问题)
一.线性表 1.1 概念与特点 1.2 线性表的存储结构 1.3 常见操作 1.4 应用场景 二.链表 2.1 链表简介 2.2 单向链表(单链表) 2.21 基本概念 2.22 单链表基本操作 2. ...
- 一文搞定带头双向循环链表
什么是链表 链表的种类 最经典的两种链表 带头双向循环链表详细 什么是链表 在数据结构线性表里 除了顺序表 还有一种我们不得不说 他就是链表 链表的关键就是指针 创建出一块节点空间存储着 一边是val ...
- 数据结构——带头结点双向循环链表
相比较与单链表,双向循环链表每个结点多了一个prev指针域,用于指向该结点的前驱,并且链表的头尾结点也用指针域相连.所以对于带头结点的双向循环链表的判空条件为head->next=head;除此 ...
- 【数据结构初阶】单链表补充内容+又双叒叕刷链表题
目录 1.顺序表&链表的优点和缺点 2.单链表和双向循环链表 3.一点杂七杂八的东西 3-1顺序表和链表打印的断言 3-2.栈上和堆上定义一个新节点 3-3.二级指针 3-4.哨兵头结点的作用 ...
- 数据结构与算法(2-2)线性表之链式存储(单链表、静态链表、循环链表、双向循环链表)
目录 一.单链表 1.存储方式 2.插入 3.删除 总代码: 二.静态链表 1.存储方式 2.插入 3.删除 4.遍历 总代码: 三.循环链表 总代码: 四.双向循环链表 1.存储方式: 2.插入和删 ...
最新文章
- python实现D‘Agostino‘s K-squared test正态分布检验
- OpenFeign 全方位讲解
- 2020-11-8(activity状态以及任务栈)
- 线下沙龙 × 上海 | 小身材大能量!用英伟达智能小车Jetbot玩转深度学习
- vue elementui表格数据
- 读zepto源码之工具函数
- PHP pathinfo() 函数【获取文件后缀】
- 面试记录:冒泡排序都不会,大哥你会编程吗
- 惠普136nw打印机清零_HP打印机清零方法(冷复位恢复出厂设置)
- 用matplotlib画sigmoid函数
- showModalDialog的title问题,去掉网页对话框
- 【实用】Word如何转换成PDF格式,文件转换三步免费搞定
- 基因编辑最新进展2021年5月
- 常见信息安全威胁与经典案例
- github100天python_GitHub - jazeyoung/Python-100-Days: Python - 100天从新手到大师
- C语言---简单五子棋小游戏
- HDOJ-1060-Leftmost Digit(求n^n的最高位)
- Git 无法切换分支,报错git did not exit cleanly
- iOS应用突然无法从App Store获取到内购(IAP)产品列表的解决
- RX5600XT与RTX2060对比哪个好,哪款显卡性能更强?