• 线性表16:双向链表 数据结构和算法21


    线性表16 : 双向链表

     

    让编程改变世界

    Change the world by program


        这货我们地球人把他称为火车,有了它,全世界每年春季最大规模的物种迁移才会发生在中国!  

    双向链表

      大家都知道,任何事物出现的初期都显得有些不完善。例如我们的火车刚发明的时候是只有一个“头”的,所以如果它走的线路是如下: A->B->C->D->E->F->G->H->I->J->K->L->A   假设这会儿火车正停在K处呢,要他送一批货到J处,那么它将走的路线是: K->L->A->B->C->D->E->F->G->H->I->J   嗯,所以后来我们的火车就都有两个头了。看完这个例子,大家就明白双向链表的必要性了吧。  

    双向链表结点结构

      [codesyntax lang="c"]
    typedef struct DualNode
    {
    	ElemType data;
    	struct DualNode *prior;  //前驱结点
    	struct DualNode *next;   //后继结点
    } DualNode, *DuLinkList;
    [/codesyntax]     [caption id="attachment_2002" align="alignnone" width="500"] 双向链表的结构[/caption]   既然单链表可以有循环链表,那么双向链表当然也可以有。   [caption id="attachment_2003" align="alignnone" width="500"] 双向链表循环[/caption]   在这里小甲鱼问大家一个问题:由于这是双向链表,那么对于链表中的某一个结点p,它的后继结点的前驱结点是什么?  

    双向链表的插入操作

      插入操作其实并不复杂,不过顺序很重要,千万不能写反了。   [caption id="attachment_2004" align="alignnone" width="500"] 双向链表的插入操作[/caption]  

    代码实现:

    [codesyntax lang="c"]
    s->next = p; 
    s->prior = p->prior; 
    p->prior->next = s; 
    p->prior = s;
    [/codesyntax]   关键在于交换的过程中不要出现矛盾,例如第四步先被执行了,那么p->prior就会提前变成s,使得插入的工作出错。 严重性打个比方就是打电话给老婆的时候不小心叫成小三的名字!  

    双向链表的删除操作

      如果刚才的插入操作理解了,那么再来理解接下来的删除操作就容易多了。   [caption id="attachment_2005" align="alignnone" width="500"] 双向链表的删除操作[/caption]  

    代码实现:

    [codesyntax lang="c"]
    p->prior->next = p->next;
    p->next->prior = p->prior; 
    free(p);
    [/codesyntax]   最后总结一下,双向链表相对于单链表来说,是要更复杂一点,每个结点多了一个prior指针,对于插入和删除操作的顺序大家要格外小心。 不过,双向链表可以有效提高算法的时间性能,说白了就是用空间来换取时间。  

    本章节结束语

      主题:力争做一只逆流而上的小甲鱼! [buy] 获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://kuai.xunlei.com/d/BdsUAwoZVQCHkxNR645']视频下载[/Downlink] [Downlink href='http://urlxf.qq.com/?ZNvUNvE']备胎下载[/Downlink]
  • 相关阅读:
    skywalking
    数据库中redoundo的介绍
    grafana
    查看linux的ssh服务信息及运行状态
    获取当前路由
    使VM可以用内网ip访问
    sentinel
    一,安装dotnet
    数据模型(Data Model)
    Vue——获取对象类型
  • 原文地址:https://www.cnblogs.com/LoveFishC/p/3847265.html
Copyright © 2020-2023  润新知