三.線性表

線性表(List):零個或者多個數據元素的有限序列
有且只有一個直接前驅元素,有且只有一個直接後繼
線性表元素的個數n(n>0)定義爲線性表的長度,當n=0時,稱爲空表

在較複雜的線性表中,一個數據元素可以由若干個數據項組成

線性表的順序順序存儲結構:用一段地址連續的存儲單元依次存儲線性表的數據元素

一維數組來實現順序存儲結構.
數組的長度和線性表的長度的區別?
數組的長度是存放線性表存儲空間的長度,存儲分配後這個量一般是不變的.
線性表的長度是線性表中數據元素的個數,(插入/刪除)這個量是變化的
在任何時刻,線性表的長度應該小於等於數組的長度

存儲器中的每個存儲單元都有自己的編號,這個編號稱爲地址

線性表順序存儲結構的優缺點:
優點:無需爲表中元素之間的邏輯關係而增加額外的存儲空間,可以快速的存取表中的任一位置的元素
缺點:插入和刪除時需要移動表中大量的元素,當線性表長度變化較大時,難以確定存儲空間的容量,造成存儲空間的碎片

線性表的鏈式存儲結構:爲了表示每個數據元素ai和其直接後繼元素ai+1之間的邏輯關係,對數據元素ai來說,除了存儲其本身的信息之外,還需存儲一個指示其直接後繼的信息(即直接後繼的存儲位置).我們把存儲數據元素的信息的區域成爲數據域,把直接存儲直接後繼位置的域稱爲指針域.指針域中存儲的信息稱作指針或鏈.這兩部分信息組成數據元素ai的存儲映像,稱爲結點(Node)

n個結點鏈接成一個鏈表,即爲線性表的鏈式存儲結構.因爲此鏈表的每個結點中只包含一個指針域,所以叫做單鏈表

頭指針:鏈表中第一個結點的存儲位置
頭結點:在單鏈表的第一個結點前附設一個結點(爲了方便對鏈表操作)
區別?
頭指針是指鏈表指向第一個結點的指針,如果鏈表有頭結點,則指向頭結點的指針
頭指針具有標識作用,所以常以頭指針冠以鏈表的名字
無論鏈表是否爲空,頭指針都不爲空,頭指針是鏈表的必要元素

頭結點是爲了操作的統一和方便而設立的,放在第一元素的結點之前,其數據域一般無意義(也可存放鏈表長度)
有了頭結點,對在第一個元素結點前插入結點和刪除第一結點,其操作和其他結點的操作就統一了
頭結點不一定是鏈表必須要素

單鏈表和順序存儲結構的區別:
存儲分配方式:
順序存儲結構用一段連續的存儲單元依次存儲線性表的數據元素
單鏈表採用鏈式存儲結構,用一組任意的存儲單元存放線性表的元素

時間性能:
查找:順序存儲結構O(1)單鏈表O(n)
插入和刪除:順序存儲結構需要平均移動一般的元素,時間爲O(n)單鏈表在找出某位置的指針後,插入和刪除時間僅爲O(1)

空間性能:
順序存儲結構需要預分配存儲空間,分大了浪費,分小了易發生上溢
單鏈表不需要分配存儲空間,只要有就可以分配,元素個數也不受限制

靜態鏈表:用數組描述的鏈表(遊標實現法)

循環鏈表:將單鏈表的終端節點的指針端由空指針改爲指向頭結點,就使整個單鏈表形成一個環,這種頭尾相接的單鏈表稱爲單循環鏈表,簡稱循環鏈表

雙向鏈表:在單鏈表的每個結點中,再設置一個指向其前驅結點的指針域

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