数据结构和算法分析

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

2020-02-04  本文已影响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");
}

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

拜拜

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

上一篇下一篇

猜你喜欢

热点阅读