linux链表参考2

简介: 双链表 1、双向链表(Double Linked List)     双(向)链表中有两条方向不同的链,即每个结点中除next域存放后继结点地址外,还增加一个指向其直接前趋的指针域prior。

双链表

1、双向链表(Double Linked List)
     双(向)链表中有两条方向不同的链,即每个结点中除next域存放后继结点地址外,还增加一个指向其直接前趋的指针域prior。
 


注意:
     ①双链表由头指针head惟一确定的。
     ②带头结点的双链表的某些运算变得方便。
     ③将头结点和尾结点链接起来,为双(向)循环链表。

2、双向链表的结点结构和形式描述
①结点结构(见上图a)
 
     
②形式描述
    typedef struct dlistnode{
         DataType data;
         struct dlistnode *prior,*next;
      }DListNode;
    typedef DListNode *DLinkList;
    DLinkList head;

3、双向链表的前插和删除本结点操作
     由于双链表的对称性,在双链表能能方便地完成各种插入、删除操作。
①双链表的前插操作
    

    void DInsertBefore(DListNode *p,DataType x)
      {//在带头结点的双链表中,将值为x的新结点插入*p之前,设p≠NULL
        DListNode *s=malloc(sizeof(DListNode));//①
        s->data=x;//②
        s->prior=p->prior;//③
        s->next=p;//④
        p->prior->next=s;//⑤
        p->prior=s;//⑥
       }
②双链表上删除结点*p自身的操作
    

    void DDeleteNode(DListNode *p)
      {//在带头结点的双链表中,删除结点*p,设*p为非终端结点
          p->prior->next=p->next;//①
          p->next->prior=p->prior;//②
          free(p);//③
      }
注意:
     与单链表上的插入和删除操作不同的是,在双链表中插入和删除必须同时修改两个方向上的指针。
     上述两个算法的时间复杂度均为O(1)。


相关文章
|
3月前
|
Linux
linux内核中的几种链表
linux内核中的几种链表
|
7月前
|
Linux 网络安全 开发工具
linux实验参考1
linux实验参考1
48 0
|
Kubernetes 网络协议 Linux
阿里云linux(Alibaba Cloud Linux) 系统安装docker的相关过程和优化配置参考
阿里云linux(Alibaba Cloud Linux) 系统安装docker的相关过程和优化配置参考 Alibaba Cloud Linux 3.x 对标 centos8 Alibaba Cloud Linux 2.x 对标 centos7
3215 0
|
Linux
Linux内核链表的使用
Linux内核链表的使用
102 0
|
存储 Linux C++
一文搞懂 Linux 内核链表(深度分析)
hello 大家好,今天给大家介绍一下linux 内核链表的分析,在写这篇文章前,笔者自己以前也只是停留在应用层面,没有深究其中的细节,很多也是理解的不是很透彻。写完此文后,发现对链表的理解更加深刻了。很多现代计算机的思想在内核里面都有体现。
229 0
|
Ubuntu Linux 开发工具
Linux部分操作命令,可以学习参考
2.1、终端基本提示符 终端提示符: ubuntu @ubuntu-linux:~$ ubuntu:用户名(当前登录的用户) 分隔符:@: 示当前的工作路径表示符:~ 用户权限符:$ 、 # 普通用户表示符:$ 超级用户(root)表示符:# 根(起始位置)表示符:/ 用户目录(文件夹):/home/xxxx用户名文件夹 2.2、Linux基本命令 mkdir 目录名:在当前工作路径下创建目录
|
Linux 网络安全
LINUX SAMBA服务案列参考
LINUX SAMBA服务案列参考
118 0
|
Linux 网络安全
LINUX DHCP服务操作参考
LINUX DHCP服务操作参考
142 0
|
Linux API C语言
Linux内核基础数据结构-双链表
链表作为一种基本的数据结构,得益于其简单的结构、优良的性能(双向链表的插入和删除复杂度都是O(1)),被广泛的应用于各种程序设计中。链表一般分为单向链表和双向链表。对于单向链表,其删除和插入的一般复杂度都是O(n),所以,工程上一般很少使用,下面介绍的所有链表都是双向链表。
113 0
|
网络协议 Linux