美文网首页数据结构和算法分析
数据结构-双向链表(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");
    }
    

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

    拜拜

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

    相关文章

      网友评论

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

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