數據結構之線性表

在數據結構中共有四種結構類型:

  • 集合:集合中的所有對象之間均沒有內存的聯繫性,他們只是散列的排在一起,隸屬於同一個集合
  •  線性表:線性表表示了對象之間的一對一關係;
  • 樹: 樹結構表示了對象之間的一對多關係;
  • 圖:圖結構表示了對象之間的多對多關係;

本篇文章主要說明對線性表的邏輯操作和物理存儲結構:

        線性表中的對象除了頭結點和尾結點,都只有一個前驅和後繼,其中頭結頭沒有前驅,尾結點沒有後繼.

       線性表的物理存儲結構有:順序存儲和鏈式存儲結構;其中順序存儲在內存中的分配必須是連續的,而鏈式存儲在內存中的分配可以不是連續的,由上一個結點存儲下一個結點的物理地址.

        其中順序存儲結構由於在物理地址的存儲是連續的,因此知道第一個結點的地址後,其它結點的地址即可通過計算得出,因此獲取時的時間複雜度是O(1),但由於刪除和插入時,要保持連續性,因此需要在刪除時將後繼所有結點往前移 ,插入後,將所有後繼結點往後移,因此刪除和插入時,時間複雜度爲O(n).

    而鏈式存儲中由於物理地址上不是連續的,因此每個結點需要存儲下一個結點的物理地址信息,如果我們要進行查找時,需要從頭結點,得到下一個結點的物理地址,然後再繼續往下找,直到找到我們需要的第n個結點;因此查找的時間複雜度爲O(n);

     但刪除和插入時,只需要將當前結點的下一個結點,並從其中得到下下個結點的地址,然後將當前結點的下一個結點地址更新爲下下個結點的址址即可;而插入時,只需要將當前結點中的存儲的下一個結點地址更新爲新插入結點地址,新插入的結點的下一個結點地址更新爲,當前結點的原來的下一個結點的地址即可,因此刪除和插入的時間複雜度爲O(1);

    在java 語言中LIst和Set接口中的對象均是線性表,其中只有arrayList屬於順序存儲結構,其它如linkedlist和treeSet,hashSet均是鏈式存儲結構.以及對應的hashMap也使用鏈式存儲結構!

  

 

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章