CLRS筆記10 基本資料結構

2021-08-29 19:00:17 字數 1144 閱讀 9444

數學中的集合是不變的,而演算法所操作的集合是可以增大、縮小或產生其他變化的,稱這種集合為動態集合

支援插入元素、刪除元素和測試元素是否屬於集合操作的動態集合稱為字典

[b]棧和佇列[/b]

棧為後進先出lifo,隊列為先進先出fifo

棧的insert操作稱為push,delete操作成為pop

佇列的insert操作稱為enqueue,delete操作稱為dequeue

[b]鍊錶[/b]

鍊錶l中包含乙個key域和兩個指標域prev和next

prev指向鍊錶中前驅元素,next指向鍊錶中後繼元素

如果prev[x]=nil,則元素x沒有前驅節點,即x為head

如果next[x]=nil,則元素x沒有後繼節點,即x為tail

屬性head[l]指向head,如果head[l]=nil,則鍊錶l為空

單鏈結的鍊錶中每個元素沒有prev指標

已排序的鍊錶的線性順序對應著鍊錶中各元素的key的線性順序

環形鍊錶的head元素的prev指向tail,tail元素的next指向head

鍊錶的search時間為θ(n),insert時間為θ(1),delete時間為θ(1)

哨兵(sentinel)可以用來簡化邊界條件

假設鍊錶l和乙個物件nil[l],它表示nil,但有prev和next域

這樣就可以將乙個雙向鍊錶變成乙個帶哨兵的環形雙向鍊錶,哨兵元素介於head和tail之間

[b]有根樹[/b]

對二叉樹t中的元素x,p[x]表示父親,left[x]表示左兒子,right[x]表示右兒子

如果p[x]=nil,則x為根

t的根用root[t]表示,如果root[t]=nil,則樹t為空

如果節點的子女數無限制,則無法事先知道多少域要分配

如果節點的最多子女數為常數k,那麼用child1,child2,...,childk來代替left和right域,這樣會浪費大量的儲存空間,因為大多數節點只有少量子女

可以用left和right-sibling來表示這種樹

left[x]表示x的最左孩子,right-sibling[x]表示x緊右邊的孩子

如果x沒有孩子,則left[x]=nil

如果x是其父節點的最右孩子,則right-sibling[x]=nil

opencv基本資料結構

iplimage 首先介紹重要的成員變數 width和height表示了的尺寸。其次是depth和nchannels,depth是指畫素顏色的取值範圍,nchnannels為影象的通道,可以取1,2,3,4 origin變數定義了影象的原點,有兩個取值,分別是ipl origin bl和ipl or...

Python 基本資料結構

列表是python裡的內建的型別之一,可以新增和刪除其中的元素。如 role sam 33 dean 37 可以列表中包含列表,同一列表中包含不同型別的資料。下面介紹列表的一些通用操作,關於list的其他用法,可以通過help list 檢視。a 2,13,12,41,17,23 a 1 列表從0開...

基本資料結構定義

定義 棧是一種只能在一端進行插入或刪除操作的線性表。表中允許進行插入 刪除操作的一端稱為棧頂。棧頂的當前位置是動態的,棧頂的當前位置由乙個稱為棧頂指標的位置指示器指示。表的另一端稱為棧底。當棧中沒有資料元素時,稱為空棧。棧的插入操作通常稱為進棧或入棧,棧的刪除操作通常稱為退棧或出棧。特點 後進先出 ...