首页 > 其他分享 >双向链表

双向链表

时间:2022-11-29 23:25:09浏览次数:43  
标签:结点 指向 next 链表 prior 前驱 双向

双向链表

介绍

因为在循环链表中某一结点要访问其前驱结点的时候,需要循环扫描整个链表一遍,效率太低了。为了方便访问结点的前驱结点,我们引入了双向链表的概念。原本一个结点的结构包括data(数据)域和next(指针)域;双向链表拥有两个指针域和一个数据域,两个指针分别指向前驱结点和后继结点。

定义方法

定义方法如下:

  • 方法一:
struct Dnode{		//Dnode是指双向链表结点
    ElemType data;		//data为抽象元素类型
    struct Dnode *prior,*next		//定义prior(前驱),next(后继)指针类型
};
  • 方法二:
typedef struct Dnode{
    Elemtype data;
    struct Dnode *prior,*next;		//prior,next为指针类型
}*DLList

双向循环链表

空表

L->next==L->prior==L

在使用双向链表指针的时候要注意一个结点是有前驱和后继两个指针的!

非空表

设(除表头结点)第一个结点(首结点)数据域值为A1,p指向A1,以此类推,直到最后一个结点(第n个结点/尾结点)的数据域值为An,我们可以得出的结论:

1.p==p->next->prior
2.p==p->prior->next    

删除结点

设需要删除的结点B在A结点(前驱)和C结点(后继)之间,p指向B结点:

p->prior->next==p->next;		//结点A的next(后继)指向结点C
p->next->prior==p->prior;		//结点C的prior(前驱)指向结点A
free(p);		//释放结点B占有的空间

插入结点

设需要插入的结点B将在A结点(前驱)和C结点(后继)之间,p指向C结点,f指向B结点:

f->prior=p->prior;		//结点B的prior)(前驱)指向结点A
f->next=p;		//结点B的next(后继)指向结点C
p->prior->next=f;		//结点A的next(后继)指向结点B
p->prior=f;		//结点C的prior指向结点B

标签:结点,指向,next,链表,prior,前驱,双向
From: https://www.cnblogs.com/qinyu33/p/16937071.html

相关文章

  • 双链表
    //e[]表示节点的值,l[]表示节点的左指针,r[]表示节点的右指针,idx表示当前用到了哪个节点inte[N],l[N],r[N],idx;//初始化voidinit(){//0是左端点,1是右端点......
  • 链表-双向链表
    在双向链表中,除了下一个节点链接之外,每个节点还包含指向序列中“前一个”节点的第二个链接字段。这两个链接可以称为'forward('s')和'backwards',或'next'和'prev'('previous......
  • Android - DataBinding源码解读(内存消耗和双向绑定原理分析)
    目录​​一代码Demo​​​​二解析​​​​2.1 关键的ActivityMainBindingImp()​​​​2.2 ​​​​2.3​​​​三总结​​​​3.1内存消耗的三个地方:​​​​3.2 ......
  • 双向认证接口(ssl加密)使用fiddler工具抓取+如何设置jmeter
    一、Fiddler抓包加密(ssl)接口粗略记录下项目接口加密后的操作 1、ios手机    1、PC端安装开发或运维提供的证书(一般有xxx.cer和xxx.p12);    2、iO......
  • 相交链表
    160.相交链表由题目要求可以知道,题目数据保证了不会出现环形注意,函数返回结果后,链表必须保持其原始结构。方法一:哈希集合利用哈希表的特性,不能放重复元素判断两个链......
  • 单向循环链表-约瑟夫问题
    单向环形列表应用场景:约瑟夫环问题思路:创建第一个节点,让first指向该节点,并形成环状后面当我们每创建一个新的节点,就把该节点,加入到已有的环形链表中即可遍历环形链......
  • C#面试题 算法 --- 2 单链表倒置
    classNode{publicobjectdata;publicNodenext;publicNode(objectdata){this.data=data;}} ///......
  • 第一周,链表、栈、队列
    第一周,链表、栈、队列206.反转链表方法一:双指针法:定义两个指针:pre和cur每次让pre的next指向cur,实现一次局部反转局部反转完成之后,pre和cur同时往前移动......
  • iOS开发之可双向调节的Slider滑块
    滑块在很多地方都有使用,所以这里向大家展示一个自定义的可双向控制的Slider,并且可以通过代理方法获取相应的范围值,部分代码如下:属性值:/** 设置最小值 */@property(nonato......
  • 带头链表的实现
    packagelinkedListimport"fmt"/**go实现带头单链表基本操作*/typeListNodestruct{ valueinterface{} next*ListNode}typeLinkedListstruct{ head......