线性表的链式存储——线性表的链式存储结构

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,插入和删除操作需要保证链表的完整性;

posted @ 2019-05-25 11:10  子宇24  阅读(3512)  评论(0编辑  收藏  举报