首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

链表操作(一)

一、链表的引入: 1、在引入链表之前,我们先来回忆之前为什么要引入单链表介绍:它是解决的数组的数组的大小比较死板不容易扩展的问题;使用堆内存来存储数据,将数据分散到各个节点之间,其各个节点在内存中可以不相连...2、所以为了解决单链表的局限性,就引入了链表的概念了:听名字就可以猜到,每个节点都包含两个指针,一个指针指向上一个节点,一个指针指向下一个节点--------双向链表的节点 = 有效数据 + 2个指针...二、代码实现: 1、创建链表代码框架引入: #include #include // 链表的节点 struct node { int data;... // 链表的节点 struct node { int data; // 有效数据 struct node *pPrev;...好了今天的分享就到这里了,后期还有链表的删除和遍历操作都会写到甚至Linux内核链表的内容也会分享给大家的。

33430
您找到你想要的搜索结果了吗?
是的
没有找到

java手写链表

链表 链表中的每个节点即指向前面一个节点,也指向后面一个节点,就像丢手绢游戏一样,每个人都手拉手 。...node;//这里直接node.next=node2 node.prev=this.tail;//node2.prev = node this.tail=node;//为下次做铺垫 不得不说,这个java的链表比...data);         System.out.println("删除后结果");         doubleLinkedList.print();     } } 总结 这里我有个概念混淆了,链表链表是结点...1和2能相互指向的链表,和头插入和尾插入没关系,但是链表却是需要两个结点,一个从头遍历,一个从尾遍历嘛 废江博客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 转载请注明原文链接...:java手写链表

49910

【数据结构】单链表链表

链表的概念和结构 概念: 链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。...也可能不连续 链表的分类 虽然说有8种链表结构,但是现实中主要使用的只有两种结构: 无头单向非循环链表:结构简单,一般不会单独用来存数据。...带头双向循环链表:结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都 是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带 来很多优势,实现反而简单了。...无头单向非循环链表的实现 单链表的尾部插入 这里需要注意的是,插入时可能头节点为空,要改变指针,所以要传二级指针 //尾插 void SLPushBack(SLNode** pphead, SLDataType...void InitList(ListNode** pHead); // 双向链表销毁 void ListDestory(ListNode* pHead); // 双向链表打印 void ListPrint

10210

Redis系列(二)底层数据结构之链表

本文将介绍 Redis 中最基础的 linkedlist(链表) 的实现方法。它是 Redis 的列表键的底层实现之一。 如果你对链表的基础定义没有一些了解的话,建议先去简单学习一下。...而 Redis 又需要频繁的使用链表,所以 Redis 自己实现了一个链表。...来方便的对链表进行一个的遍历,或者查看链表长度。 下图是一个 list 结构,其中包含了三个 listNode. ?...无环链表 表头结点的 prev 指针和表尾结点的 next 指针都只想 null, 所以 Redis 的链表是一个无环链表。...因此本文没有专门去强调它的实现方法,而是大概介绍了下 Redis 中的链表的一个结构及其主要特性: Redis 的链表链表。 封装了 list 结构,保存了链表的头尾指针以及链表长度。

68020

数据结构(4)链表,循环链表,静态链表

链表 链表和单链表的区别就是,一个结点除了有指向后一个结点的指针域,还有一个指向前一个结点的指针域,所以建表的代码为: typedef struct DNode{ int data;...return ERROR;//内存分配失败 } L->next = NULL; L->prior = NULL;//头结点的前驱永远是NULL return OK; } 链表的查找操作和单链表相同...和单链表不同的操作在于插入和删除,不同点是链表的插入和删除需要同时修改两个方向的指针。...循环链表 循环单链表 表尾指向头结点 循环链表 在什么的链表的插入和删除操作中,如果p是最后一个结点,那么p->next就是NULL ,但是使用循环链表的话就不会出现那种情况。...静态链表 链表的每个结点在内存中的分布是随机的,静态链表就是建立一个固定的区间,结点在这固定的区间内随机存储。

39840

C语言链表,循环链表,静态链表讲解(王道版)

目录 一、链表 初始化(带头结点): 链表的插入: 链表的遍历  循环链表  循环单链表的初始化 循环链表的初始化 链表的插入 链表的删除 静态链表 定义静态链表 插入 删除 ---- 一...、链表 在单链表中,每个元素都附加了一个指针域,指向下一个元素的存储位置。...初始化(带头结点): typedef struct DNode{ //定义链表结点类型 Elemtype date; //数据域 struct...DNode *prior,*next; //前驱和后继指针 }DNode,*DLinklist; //初始化链表 bool InitDLinkList(DLinklist &L){ L =...=NULL) { //对结点p做相应的处理 p = p-> prior; } 链表不可随机存取,按位查找和按值查找都只能用遍历的方式实现。

1K10

【简单】数组模拟的链表

实现一个链表链表初始为空,支持 \rm{5} 种操作: 在最左侧插入一个数; 在最右侧插入一个数; 将第 k 个插入的数删除; 在第 k 个插入的数左侧插入一个数; 在第 k 个插入的数右侧插入一个数...现在要对该链进行 M 次操作,进行完所有操作后,从左到右输出整个链表。...接下来 M 行,每行包含一个操作命令,操作命令分为: "L x",表示在链表的最左端插入数 "R x",表示在链表的最右端插入数 "D k",表示将第 "IL k x",表示在第 x; "IR k...x",表示在第 x 输出格式 共一行,将整个链表从左到右输出。...输入样例 10 R 7 D 1 L 3 IL 2 10 D 3 IL 2 7 L 8 R 9 IL 4 7 IR 2 2 输出样例 8 7 7 3 2 9 题解 (链表) 数据结构 单链表由于太过于基础

83710

线性表--单链表--循环链表--链表--三表总结(七)

链表: ? 单链表就好比是一条路走到黑,无法回头,如果要访问任意结点,每次只能从头访问,也就是顺序访问,它的遍历只能是一个方向,不能后退 循环链表: ? ?...循环链表中没有NULL指针,涉及遍历时,终止条件不再是单链表的P!...=NULL;而是判断他们是否等于某一个特定的指针,单链表只能从已知结出发,访问其后续结点,而循环链表从已知结点出发,可以访问链表中所有结点。 双向链表: ?...虽然有了循环链表,但是如果数据庞大,想要得到已知结点前面的数据,再跑一圈的成本有点大,这个时候,双向链表就出来了,双向链表增加了前驱指针,它可以随心所欲,向前,或者是向后访问。...总结: 单链表:如果访问任意结点每次只能从头开始顺序向后访问。 单循环链表:可以从任何一个结点开始,顺序向后访问到达任意结点。 双向链表:可以从任何结点开始任意向前向后双向访问。

1K30

【一个神奇的数据结构-异或链表】拥有单链表的空间,效率如链表

思路和上面通过加法有点像链表看这个的应该都会,我直接上图我们把中间某一个节点单独提取出来,就会是这样其中prev是上一个节点的地址,next是下一个节点的地址属于两个指针域,那么我们能否用一个指针域来代替两个呢如果能够代替...addr(C)获取B的前驱A的地址addr(A) = B->xorPtr ⊕ addr(C)获取B的后继C的地址addr(C) = B->xorPtr ⊕ addr(A)通过以上的几种操作,就可以遍历整个链表...,在处理添加、插入、删除等操作时同普通的双向链表类似注意:这些异或和加法相关的操作都是针对指针值的本身,即指针转换为无符号整型数的结构,不能跟指针的运算操作混淆。...下面是代码:#include using namespace std;//通过异或运算实现链表typedef struct node{ int v; struct node

48933

Python实现队列

关于队列的介绍,请参考:栈和队列简介 队列的数据存储结构可以是顺序表,也可以是链表,本篇文章使用 Python 来分别实现顺序队列和链队列。...z|y|x|10|20|30 z 30 y|x|10|20 sequence double queue length: 4 index member is: 10 二、实现链队列 链队列是使用链表存储数据的队列...下面是链队列的各个方法实现: is_empty(): 判断链队列是否为空。如果存储数据的链表头指向空(对应布尔值False),则链队列为空(is_empty为True),反之。...show(): 展示链队列中的数据,也就是将队列中所有的数据依次打印输出,对存储数据的链表遍历输出即可。 head_enter(data): 前端入队,也就是从队列的前端添加数据到队列中。...后端出队就是删除并返回链表尾节点的数据。 length(): 返回链队列的长度。链队列的长度就是存储数据的链表长度。 check(index): 返回链队列中指定位置的数据。

64840

【数据结构】-----链表(小白必看!!!)

今天我们更新了链表内容, 欢迎大家关注点赞收藏⭐️留言 什么是链表链表的定义  为什么引入链表?  ...链表的结点中有两个指针prior和next,分别指向前驱结点和后继结点。  ...链表上的操作: 1.1链表的初始化: 在初始化之前,我们这里先说一下如何创建一个新节点。因为刚开始数据为空,因此我们先要创建新节点才可以。...这种结构的引入增加了链表的灵活性和功能性。 首先,链表支持双向遍历。...然而,链表相比单链表需要额外的空间来存储前一个节点的指针,因此会占用更多的内存。在某些情况下,如果对内存占用有限制,可能需要权衡选择是否使用链表

6610
领券