首页 > 其他分享 >单链表,双链表和内核链表的比较

单链表,双链表和内核链表的比较

时间:2024-07-19 13:54:10浏览次数:15  
标签:单链 linux 链表 内核 Linux 双链 节点 指针

首先贴上几个链接,来自一些大佬,这些文章详细易懂,可以帮助我们快速全面了解单双链表以及Linux内核链表list.h。

1.C语言链表超详解;作者:rivencode;图文并茂,炒鸡详细

2.链表基础知识详解;作者:不秃也很强;代码详细,条理清晰

3.拒绝造轮子!如何移植并使用Linux内核的通用链表(附完整代码实现);作者:学习,积累,成长;

4.一文搞懂 Linux 内核链表(深度分析);作者:刘盼;图文并茂,条理清晰,带你认识Linux内核链表

5.linux/include/linux/list.h;作者:Linus Torvalds 林纳斯·托瓦兹;Linux起源,Linux内核的最早作者,git项目作者,当之无愧的大佬

链表简介

  • 链表是通过节点把离散的数据链接起来,充分利用了离散分布式的内存空间。通过对节点的遍历,插入和删除操作从而实现对数据的增删改查,通过改变节点指针域指针指向何处可以实现排序算法和一系列典型的数据结构,例如二叉树。

  • 线性表(逻辑结构)的链式存储(存储结构)

  • 链表由一系列节点(链表中每一个元素称为节点)组成,节点在运行时动态生成 (malloc),每个节点包括两个部分
    一个是存储数据元素的数据域,另一个是存储另外一个或多个节点的指针域

  • 头节点首节点中间节点尾结点

单向链表,双向链表和linux内核链表的区别

1.单向链表的特点就是每个节点有一个数据域并且有且仅有一个指针域指向后继节点,遍历只能从首节点依次往后挨个进行,如果将尾节点的指针域指向首节点,那就得到了单向循环链表。

2.双向链表的特点就是每个节点有一个数据域和两个指针域,每个节点都有前驱和后继,双向链表也是可以创造各种复杂数据结构的一种链表,各种树状结构就是通过指针域疯狂的指出来的。(c语言的灵魂,就没指针指不出来的)

3.内核链表不同于上面两种链表,它没有数据域,只有两个指针域:前驱和后继在Linux内核中,有大量的链表结构来管理Linux内核的各种数据,这些链表可以在Linux/include/linux/list.h可以找到,确切来说可以直接拿过来用,里面的对链表的增删改查还有排序做的非常优秀。

标签:单链,linux,链表,内核,Linux,双链,节点,指针
From: https://www.cnblogs.com/XG-madman/p/18311180

相关文章

  • 基础数据结构——初级——链表
    链表的特点是一组位于任意位置的存储单元存储线性表的数据元素。一般分为单向链表和双向链表(如下图所示)。 使用链表时,可以用STL的list,也可以自己写链表。如果自己写代码实现链表,有两种编码实现方法:动态链表和静态链表。在算法竞赛中为加快编码速度,一般用静态链表或者STL的l......
  • 攻克链表篇
    leetcode206翻转链表题目描述:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例1:输入:head=[1,2,3,4,5]输出:[5,4,3,2,1]示例2:输入:head=[1,2]输出:[2,1]示例3:输入:head=[]输出:[]算法思想:创建一个空链表头指针,将原给链表的节点依次遍历......
  • 【算法】删除有序链表中的重复元素、保留重复节点的一个
    1.概述存在一个按升序排列的链表,给你这个链表的头节点head,请你删除所有重复的元素,使每个元素只出现一次。返回同样按升序排列的结果链表。本问题和【算法】删除有序链表中的重复元素、不保留重复节点很类似,但是思考起来稍微简单些,建议看完这个,看链接的这个吧。2.......
  • 基于Python语言的入门算法和数据结构(持续更新中,求关注一波)[链表 栈 队列 复杂度 操作]
    这篇文章主要是讲的Python语言的算法,本人还在不断记笔记中,文章也会持续更新,内容比较浅薄,请大家指教另外推荐一个比较好用的记笔记的软件Typora,自己已经使用很久了,感觉不错。。。虽然但是还是有欠缺。目录第一章算法概述1.1什么是数据结构?01数据结构都有哪些组成方式02......
  • 链表(3) ----快慢指针,求中间节点
    目录快慢指针算法步骤:为什么有效?使用场景:力扣876题目 方法代码 力扣142题目方法1代码 方法2 思路代码 官网地址:https://www.dhcode.cn/p/t_pc/goods_pc_detail/goods_detail/term_624bd804b3d39_Ac0g7V?fromH5=true&type=3&channel_id=&pro_id=term_62......
  • 【数据结构】队列:链表实现
    队列:链表实现结构描述:typedefintDataType;typedefstructQueueNode{DataTypeA;structQueueNode*Next;}Node;classQueueLinked{public://队头、队尾指针Node*Front;Node*Next;//队列操作//把元素X入队voidPush(Dat......
  • 【数据结构】循环队列:链表实现
    循环队列:链表实现结构描述typedefintDataType;typedefstructQueueNode{DataTypeA;structQueueNode*Next;}Node;classQueueCycLinked{public://队头、队尾指针Node*Front;Node*Next;//队列操作//把元素X入队voidPu......
  • 单链表
    单链表结构描述#include<iostream>#include<cstdlib>usingnamespacestd;typedefintDataType;//链表节点typedefstructNode{DataTypeA;structNode*Next;}Node;classSingleLinkedList{private:Node*Head;public://尾插......
  • 栈:链表实现
    栈:链表实现结构描述#include<iostream>#include<cstdlib>typedefintDataType;usingnamespacestd;typedefstructNode{DataTypeA;structNode*Next;}Node;classStackLinked{private:Node*Top;public:voidPush(DataTy......
  • 旋转链表-灵活运用取模
    题目描述:个人题解:        记给定链表的长度为n,注意到当向右移动的次数k≥n时,我们仅需要向右移动k%n次即可。因为每n次移动都会让链表变为原状。这样我们可以知道,新链表的最后一个节点为原链表的第(n−1)−(k%n)个节点(从0开始计数)。这样,我们可以先将给定......