zoukankan      html  css  js  c++  java
  • 线性表的链式存储——线性表的链式存储结构

    1,基于顺序存储结构插入或删除元素时候会涉及大量元素移动,非常影响效率,本文着手解决这个问题;

    2,链式存储结构为了弥补顺序存储结构效率上的问题;

    3,链式存储的定义:

     

           1,为了表示每个数据元素与其后继元素之间的逻辑关系,数据元素除了存储本身的信息外,还需要存储其直接后继的信息;

           2,幼儿园排队:每个小朋友记住他前面的小朋友是谁,这样可以轻易的排队;

          

    4,一定要分清 p->next 是左值还是右值,左值时表示节点内存储的位置,右值时表示节点对象;

    5,链式存储逻辑结构:

    1,基于链式存储结构的线性表中,每个节点都包含数据域和指针域:

                  1,数据域:存储数据元素本身;

                  2,指针域:存储相邻节点地址;

     

    6,专业术语:

           1,顺序表:     

                  1,基于顺序存储结构的线性表;

           2,链表:

                  1,基于链式存储结构的线性表:    

                         1,单链表:每个节点只包含直接后继的地址信息;

                         2,循环链表:单链表中的最后一个节点的直接后继为第一个节点;

                         3,双向链表:单链表中的结点包含直接前驱和后继的地址信息;

                         4,双向循环链表      

         

    7,不同类型链表:

           1,单链表见:

          

      2,循环链表:

      

        3,双向链表见:

      

      

    8,链表中的基本概念:

           1,头结点:

                  1,链表中的辅助节点,包含指向第一个数据元素的指针;

                  2,没什么用,但实际工程中,发现增加头结点代码变简单了、维护性变好了,所以其仅仅辅助我们简化代码,其不包含任何信息,仅仅包含一个指向直接后继的地址;指向的是线性表中的第零个元素;

           2,数据节点:

                  1,链表中代表数据元素的节点,表现形式为:(数据元素,地址);

           3,尾结点:

                  1,链表中的最后一个数据节点,包含的地址信息为空;

                  2,决定了链表的性质:

                         1,空,为单链表;

                         2,第一个节点,为循环链表;

                         3,随机值,非法链表;    

                    

    9,单链表中的结点定义:

          

    10,单链表中的内部结构:

          

           1,头结点在单链表中的意义:

                  1,辅助数据元素的定位,方便插入和删除操作,因此,头结点不存储实际的数据元素;

    11,在目标位置处插入数据元素:

           1,从头结点开始,通过 current 指针定位到目标位置(插入到 i 节点,就移动 i 次;不能随机存取,这是链表缺点);

           2,从堆空间申请新的 Node 节点;

           3,执行操作(一定要明白指针的左值和右值的含义):

                  node->value = e;

                  node->next = current->next;

                  current->next = node;

          

         

    12,在目标位置处删除数据元素:

           1,从头结点开始,通过 current 指针定位到目标位置(不能随机存取,这是链表缺点);

           2,使用 toDel 指针指向需要删除的节点(保证删除后链表可用);

           3,执行操作:

                  toDel = current->next;(这里是位置上被传递了要删除的对象)

                  current->next = toDel->next;(删除之前要先指向要删除后面的结点)

                  delete toDel;

                  也可以:

                  current->next = current->next->next;

                  delete current->next;

          

          

    13,小结:

           1,链表中的数据元素在物理内存中无相邻关系;

           2,链表中的节点都包含数据域和指针域;

           3,头结点用于辅助数据元素的定位,方便插入和删除操作;

           4,插入和删除操作需要保证链表的完整性;

  • 相关阅读:
    support STL Viewer with WordPress On SAE
    个人自建网店(WordPress WooCommerce on SAE)集成支付宝支付
    问题解决: WordPress on SAE注册邮件无法发送
    移除Strorefront站点footer上的Storefront Design By WooThemes字样
    添加站点图标: 为SAE上的WordPress站点添加自己的Favicon
    在SAE上搭建自定义版本WordPress, 并用SAE Storage代替WordPress Uploads
    swift + xcode 新手上路
    Mac Yosemite下Android Studio环境问题集合
    分支(选择)语句
    Java入门
  • 原文地址:https://www.cnblogs.com/dishengAndziyu/p/10921773.html
Copyright © 2011-2022 走看看