1. 程式人生 > >(資料結構)第三章 列表

(資料結構)第三章 列表

3.1 從向量到列表

向量中的秩同時對應於邏輯和物理次序,而位置僅對應於邏輯次序。

3.3.1 資料結構支援的操作:靜態和動態。

size()和get()均可以在常數時間內完成。

insert()和remove()均需要線性時間完成。

靜態策略:在O(1)時間內由秩確定向量元素的實體地址,但就動態操作而言,區域性的修改可能引起大範圍甚至整個資料結構的調整。

動態策略:列表,儘管要求各元素在邏輯上具有線性次序,但對其實體地址卻未作出任何限制。

連結串列是一種典型的動態儲存結構。節點之間通過指標相互索引和訪問。

列表是連結串列結構的一般化推廣,其中的元素稱作節點,分別由特定的位置和連結指代。

節點的作用:儲存對應的資料項,還應記錄其前驅和後繼的位置。

 

3.2.1 列表節點

列表節點支援的操作介面

data()、pred()、succ()、insertAsPred(e)、insertAsSucc(e)

3.3 列表

3.3.1 頭、尾節點

私有的頭節點和尾節點始終存在,但對外並不可見。頭節點緊鄰於首節點之前,尾節點緊鄰於末節點之後。

哨兵節點的引入:使得相關演算法不必再對各種邊界退化情況做專門的處理。

此後引入的新節點都將陸續插入於這一對哨兵節點之間。

3.3.4 查詢

時間複雜度為O(n),線性正比於查詢區間的寬度。

3.3.8 析構

列表析構首先呼叫clear()介面刪除並釋放所有對外部有效的節點,然後釋放內部的頭、尾哨兵節點。

3.3.10 遍歷

3.5 排序器

這裡介紹了三種排序方法:

插入排序、選擇排序、歸併排序。

插入排序:始終將整個序列視作並切分為兩個部分:有序的字首,無序的字尾;通過迭代,反覆地將字尾的首元素轉移至字首中。

在任何時刻,相對於當前節點e=S[r],字首S[0,r]總是業已有序。

選擇排序:將序列劃分為無序字首和有序字尾兩部分,此外,要求字首不大於字尾。每次只需從字首中選出最大者,並作為最小元素轉移至字尾中,即可使有序部分的範圍不斷擴張。