美文网首页数据结构和算法分析
数据结构-双向链表(C语言)

数据结构-双向链表(C语言)

作者: 小明同学机器人 | 来源:发表于2020-02-04 14:34 被阅读0次

现在正处于国家面临困难时期,虽然咋不能向广大医务人员那样赴身武汉,但可以和大家一块分享点学习经验。宅在家的小伙伴无聊的看看,学一学,毕竟听从国家安排,不出门,不闲逛,咋们一起来学习数据结构,提升提升自己,打发打发无聊的时间。小明同学其实也是一个超级小白,知识在不断的笔记,思考中提升自己,有兴趣的同学可以关注我,每天更新,一起学习,没事还会发布一些做的有趣小程序,或者刚学的有趣插件分享给大家

双向链表简介。

为了克服单链表单向性的缺点,可利用双向链表
双向链表有两个指针域,一个指向直接后继,另一个指向直接前驱。

双向链表的存储结构

typedef int ElemType;
typedef struct DuLNode {
    ElemType data;
    struct DuLNode *prior;
    struct DuLNode *next;

} DuLNode, *DuLinkList;

双向链表跟单链循环表类似。如图所示


双向链表存储结构示意图(加载百度)
  • 在双向链表中,有些操作,仅需涉及一个方向的指针,则它们的算法描述和线性链表的操作相同,但在插入、删除时候有很打不同,在双向链表中需要同时修改两个指针。

双向链表的插入

void Do_ListInset(DuLinkList &L, int i, ElemType e) {
    DuLinkList p, s;
    if (!(p = Do_ListGetElem(L, i))) {
        printf("插入位置错误\n");
    } else{
        s = new DuLNode;
        s->data = e;
        s->prior = p->prior;
        p->prior->next = s;
        s->next = p;
        p->prior = s;
        printf("插入成功\n");
    }
}
  • 对于的我的理解,,就好像一群人手拉着手,环环相扣,从第一个人到第十个人,如果前驱之左手的话,后继指右手,你想想如果要在你右边插入一个人呢,是不是就是放开右手,拉住加的这个人的左手,然后这个人用右手拉住刚刚拉的那个人的左手呢。所以,删除结点也是一样的。

双向链表的删除

void Do_ListDelete(DuLinkList &L, int i) {
    DuLinkList p;
    if (!(p = Do_ListGetElem(L, i))) {
        printf("位置错误\n");
        return;
    }
    p->prior->next = p->next;
    p->next->prior = p->prior;
    delete p;
    printf("删除成功\n");
}

有双向链表,当然就有双向循环链表,有兴趣的还可以自行研究,很多有趣的数据结构图,以及各种神奇的算法都在数据结构中。

拜拜

⬇⬇⬇⬇ 可不可以顺手点个赞 谢谢了

相关文章

  • Go语言数据结构和算法-DoubleLinkedList(双向链

    Go语言数据结构和算法-DoubleLinkedList(双向链表) 双向链表的数据结构 Prepend(val)...

  • 线性表-双向链表与双向循环链表

    双向链表 双向链表示意图如下: 数据结构定义 创建双向链表 双向链表插入元素 双向链表删除元素 双向链表打印元素 ...

  • 数据结构系列:Objective-C实现双链表

     接续上一篇《数据结构系列:Objective-C实现单链表》  双向链表 摘自《双向链表-维基百科,自由的百科全...

  • C++实现双向循环链表

    本次博文是关于利用C++模板的方式实现的双向循环链表以及双向循环链表的基本操作,在之前的博文C++语言实现双向链表...

  • C++语言实现双向链表

    这篇文章是关于利用C++模板的方式实现的双向链表以及双向链表的基本操作,在之前的博文C语言实现双向链表中,已经给大...

  • 数据结构-双向链表(C语言)

    现在正处于国家面临困难时期,虽然咋不能向广大医务人员那样赴身武汉,但可以和大家一块分享点学习经验。宅在家的小伙伴无...

  • 2019-12-04 Java-LinkedList源码解读

    @TOC 1、链表数据结构 链表分为单向链表和双向链表,他们的区别在于,单向链表只能单向寻址,而双向链表可以双向寻...

  • 双向链表(C语言)

    1、头文件doublelist.h 2、相关操作函数文件doublelist.c 3、主函数main.c

  • 数据结构与算法(四)-- 双向链表

    双向链表 双向链表的数据结构设计 双向链表的数据结构设计和单向链表的结构差别不大,需要添加一个指针域用来指向前驱结...

  • Redis 源码--链表。

    因为C语言是一个比较底层的语言,库内没有实现链表,于是Redis自己实现了链表。Redis的链表是一个双向链表。 ...

网友评论

    本文标题:数据结构-双向链表(C语言)

    本文链接:https://www.haomeiwen.com/subject/ottrxhtx.html