資料結構 第三章 鍊錶

2021-10-04 12:19:00 字數 1425 閱讀 9813

靜態操作:get、search

動態操作:insert、remove

靜態儲存:如向量,物理次序與邏輯次序嚴格一致,在靜態操作上迅速,動態慢,get–o(1),search–o(logn)

動態儲存:如果鍊錶,動態的分配和**記憶體空間

鍊錶中,相鄰結點互稱為前驅和後繼,鍊錶一般採用循位置訪問

鍊錶的端點包括:頭,首,末,尾,其秩可以分別理解為 -1, 0,n-1, n,對外頭和尾不可見

鍊錶構造:

選擇排序複雜度:

insert函式花費o(1)時間,selectmax函式每次需要花費o(n-k)時間,總共select花費時間為算數級數1+2+3+…+n,所以總複雜度為o(n

2)o(n^2)

o(n2

)

template

<

typename t>

void list

::insertsort

(posi

(t) p,

int n)

}

插入排序複雜度分析:

最好的情況,已經排列好,即發牌的順序已經是從小到大,則新來的這張牌只需要和前一張牌作比較,只需要做一次比較,則複雜度為o(n)

最壞的情況,字首k張已經排列好,當前發的牌為字首的最小,所以安排當前牌需要經過k次比較,每插入一張k減少1,所以構成算數級數,複雜度為o(n

2)o(n^2)

o(n2

)平均的情況,依然複雜度為o(n

2)o(n^2)

o(n2

)實際上,插入排序的複雜度為o(i+n),i為逆序對總數,等於總的比較次數;n為需要插入的元素的總數,即總元素數,演算法複雜度不僅取決於輸入規模,也取決於輸入資料的有序性,稱為輸入敏感型排序演算法

選擇排序和插入排序對比:

1.選擇排序為字尾有序,字首無序,從大的那個數開始;插入排序字首有序,字尾無序

2.選擇排序增加的數是最大的,左邊無序部分所有的數都會小於增加的數;插入排序插入的數不一定最大

3.選擇排序類似於從籮筐中挑選橘子,挑出的總是剩下的中最大的;插入排序類似於發牌,發的牌可大可小

第三章 鍊錶

redis中除了鍊錶鍵之外,發布與訂閱 慢查詢 監視器等功能也用到了鍊錶,redis伺服器本身還使用鍊錶來儲存多個客戶端的狀態資訊,以及使用鍊錶來構建客戶端輸出緩衝區。鍊錶節點定義 typedef struct listnode listnode 鍊錶型別定義 無環 表頭節點的prev指標和表尾節點...

第三章 結構表

線性表 零個或多個相同特性的資料元素的有限序列。首先它是乙個序列,元素之間是有順序 的,第乙個元素無前驅,最後乙個元素無後繼,其他的都有且只有乙個前驅和後繼。而所有元素按這種1對1的鄰接關係構成的整體就是線性表。線性表的儲存結構 線性表有順序表和鏈式兩類儲存結 構 一 順序表 順序表就是把線性表中的...

C語言資料結構第三章 鍊錶棧

熟練度 n,多寫寫就對鍊錶的內容更加清楚了 在建的時候有點猶豫用node p改的資料能不能在list裡也有改 list的amount沒傳回去?為什麼啊 我直接用它的plist amount 了!要在指標裡邊的操作改動的資料才會傳回去,不然就是有點像讀取位址上的數值後對數值進行的操作了。但是操作是會留...