線性表的鏈式存儲——線性表的鏈式存儲結構


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM