2 listnode模板類
3 list物件
4 無序列表
5 有序列表
6 列表排序
自學 鄧俊輝《資料結構(c++語言版)》第三章——列表,且結合leetcode題庫進行簡單練習。
leetcode習題分類可參考此github
以上github中煉表練習題及**總結點這裡
《資料結構(c++語言版)》電子版pdf獲取方式:
資料空間整體建立或銷毀,資料元素的物理儲存次序與其邏輯次序嚴格一致,可支援高效的靜態操作;
向量支援循秩訪問(call-by-rank)的方式,根據資料元素的秩,可以在o(1)時間內直接確定其實體地址;
列表為各元素動態地分配和**實體地址,在邏輯上相鄰的元素記錄彼此的實體地址,在邏輯上形成乙個整體,支援高效的動態操作,支援循位置訪問(call-by-position)的方式。
// listnode模板類,即為list資料結構物件中的每乙個元素
typedef int rank;
#define listnodeposi(t) listnode* //列表節點位置
哨兵節點。那麼這個哨兵節點有什麼作用呢?引用哨兵節點能簡化演算法的描述與實現,避免對各種分界退化情況做專門處理。在下面的插入、刪除操作中可以體現它的作用。
建立乙個list物件時,在列表內部建立一對頭、尾哨兵節點,並設定其前驅、後繼指標構成乙個雙向鍊錶。
void list
::init(
)
由秩到位置的轉換:通過秩來指定列節點,可通過過載操作符「」:
無序列表的唯一化:deduplicate()
// 插入節點
listnodeposi(t) listnode
::insertaspred(t const& e)
其中的兩條語句pred->succ = x; pred = x;不能顛倒順序!!!否則不能成功插入節點,原列表的結構會被破壞。
有序列表的唯一化:uniquify()
插入排序 insertion sort適用於包括向量與列表在內的任何序列結構。
思路:始終將整個序列視作並切分為兩部分,有序的字首 s[0, r) 和無序的字尾 s[r, n);通過迭代,反覆地將字尾的首元素轉移到字首中。
在任何時刻,相對於當前節點 e=s[r], 字首 s[0, r) 總是業已有序。
// 插入排序
template
//列表的插入排序:對起始於位置 p 的 n 個元素排序
void list
::insertionsort( listnodeposi(t) p,
int n)
// 僅使用o(
1)輔助空間,屬於就地演算法
}//o(n^
2)
選擇排序 selection sort也適用於向量與列表之類的序列結構。
思路:將序列劃分為無序的字首 s[0, r) 及有序的字尾 s[r, n),此後還要求字首中的元素都不大於字尾中的元素。如此,每次只需從字首中選出最大者,並作為最小元素轉移至字尾中,即可使有序部分的範圍不斷擴張。
在任何時刻,字尾s[r,n)已經有序,且不小於字首s[0,r)。
template
//列表的選擇排序演算法,對起始於位置 p 的 n 個元素排序
void list
::selectionsort ( listnodeposi(t) p,
int n)
}//o(n^2)
template
//從起始於位置 p 的 n 個元素中選出最大者,相同的返回最後者
listnodeposi(t) list
::selectmax( listnodeposi(t) p,
int n)
//o(nlogn)
插入排序和選擇排序的對比:有序序列和無序序列次序的顛倒:選擇排序中,有序部分是字尾,而無序部分是字首,且字首的無序部分都不能超過有序字尾的最小值;而插入排序沒有這樣的限定。
template
//有序列表的歸併:當前列表中自 p 起的 n 個元素,與列表 l 中自 q 起的 m 個元素歸併
void list
::merge( listnodeposi(t)
&p,int n, list
& l, listnodeposi(t) q,
int m)
else
p = pp-
>succ;
//確定歸併後區間的起點
}template
//列表的歸併排序演算法:對起始於位置 p 的 n 個元素排序
void list
::mergesort( listnodeposi(t)
& p,
int n)
//注意:排序後,p 依然指向歸併後區間的起點 o(nlogn)
歡迎關注【oaoa】 資料結構 鍊錶
鍊錶 what 就是一張鏈式儲存的表,是一種資料結構,是基礎,所以還是不要想有什麼用。具體呢?在c中就用結構體實現物件描述,然後通過函式來實現各個基本操作 c 則用類來表述,c中的結構體就可以看成c 中的類,然後通過類封裝各個操作步驟。這些操作實現後就需要 來測試,號稱demo,就是main函式裡面...
資料結構 鍊錶
鍊錶中的資料是以節點來表示的,每個結點的構成 元素 資料元素的映象 指標 指示後繼元素儲存位置 元素就是儲存資料的儲存單元,指標就是連線每個結點的位址資料。鍊錶的結點結構 data next data域 存放結點值的資料域 next域 存放結點的直接後繼的位址 位置 的指標域 鏈域 以 結點的序列 ...
資料結構 鍊錶
一般的建立線性鍊錶有兩種 1.正序法 需要三個指標,head作為頭指標,pre作為前乙個指標,cur作為當前指標用來建立空間 2.倒序法,利用指標的插入,只需要兩個指標,不斷的往頭指標後插入新空間,不過插入的越早,離頭指標越遠,也就越後面輸出 1.線性鍊錶的建立及查詢刪除 include inclu...