時間複雜度:
在實際應用中,盡量使用對數階 o(log n),而非指數階(o(n^k),
堆疊:後進先出
舉例:數值轉換。比如在將乙個輸入的十進位制數轉換為,列印與其等值的八進位制數,即用堆疊比較合適(轉換八進位制時是從低位開始,輸出是從高位))
另外還有括號匹配的檢驗(當匹配時,隨著括號的增多,與其匹配的括號只好先進棧,到匹配最後乙個時,在出戰)
迷宮求解:窮舉法(乙個乙個試,失敗重試),
漢諾塔問題(棧與其遞迴求解)
佇列:先進先出(fifo)
舉例:作業系統中的作業排隊
串 模式匹配的一種改進演算法(kmp)
在對於乙個乙個字元進行匹配時,當遇到不一樣的時,不需要進行重新移動字串重新匹配,只需將之前部分匹配過的字串向前移動一段距離後,繼續
進行比較即可。
廣義表:(lists,又稱列表)是一種非線性的資料結構,是線性表的一種推廣。
廣義表中放鬆對錶元素的原子限制,容許它們具有其自身結構。
樹 樹是由乙個或多個結點組成的有限集合。樹是一種重要的非線性資料結構,
結構特點是:它的每乙個結點都可以有不止乙個直接後繼,除根結點外的所有結點都有且只有乙個直接前趨。
二叉樹 性質:
(1) 在二叉樹中,第i層的結點總數不超過2^(i-1);
(2) 深度為h的二叉樹最多有2^h-1個結點(h>=1),最少有h個結點;
(3) 對於任意一棵二叉樹,如果其葉結點數為n0,而度數為2的結點總數為n2,
則n0=n2+1;(二叉樹中度都是小於等於2)
(4) 具有n個結點的完全二叉樹的深度為int(log2n)+1
(5)有n個結點的完全二叉樹各結點如果用順序方式儲存,則結點之間有如下關係:
若i為結點編號則 如果i>1,則其父結點的編號為i/2;
如果2*i<=n,則其左兒子(即左子樹的根結點)的編號為2*i;若2*i>n,則無左兒子
如果2*i+1<=n,則其右兒子的結點編號為2*i+1;若2*i+1>n,則無右兒子。
二叉樹的儲存結構:
(1)順序儲存方式 (2)鍊錶儲存方式
二叉樹的遍歷:
1.中序遍歷的遞迴演算法定義:
若二叉樹非空,則依次執行如下操作:
(1)遍歷左子樹;
(2)訪問根結點;
(3)遍歷右子樹。
2.先序遍歷的遞迴演算法定義:
若二叉樹非空,則依次執行如下操作:
(1) 訪問根結點;
(2) 遍歷左子樹;
(3) 遍歷右子樹。
3.後序遍歷得遞迴演算法定義:
若二叉樹非空,則依次執行如下操作:
(1)遍歷左子樹;
(2)遍歷右子樹;
(3)訪問根結點。
圖的遍歷順序有兩種:深度優先搜尋(dfs)和廣度優先搜尋(bfs)。
深度優先,就是只要存在後續節點就一直往下走,直到沒有後續節點或者後續節點已經被訪問輸出了;
廣度優先,就是節點一層一層的輸出。
雜湊表:利用鍵值對儲存並檢索資料的一種非線性結構
雜湊函式是從關鍵字集合到位址集合的映像
雜湊表(hash table,也叫雜湊表),是根據關鍵碼值(key value)而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度
在一般情況下,雜湊函式是乙個壓縮映像,這就不可避免產生衝突。因此,在建造雜湊表時不僅要設定乙個」好「的雜湊函式,而且要設定一種處理衝突的方法。
綜上所述,可如下描述雜湊表:根據設定的雜湊函式h(key)和處理衝突的方法將一組關鍵字映像到乙個有限的連續位址集上,並以關鍵字在位址集中的」像「作為記錄在表中儲存位
置,這種表便稱為雜湊表,這一映像過程稱為雜湊造表或雜湊,所得儲存位置稱雜湊位址或者雜湊位址。
內部排序:
插入排序。
插入排序就是每一步都將乙個待排資料按其大小插入到已經排序的資料中的適當位置,直到全部插入完畢
例如有乙個長度為n的無序陣列,進行n-1次的插入即能完成排序;第一次,陣列第1個數認為是有序的陣列,將陣列第二個元素插入僅有1個有序的陣列中;第二次,陣列前兩個元素組成
有序的陣列,將陣列第三個元素插入由兩個元素構成的有序陣列中......第n-1次,陣列前n-1個元素組成有序的陣列,將陣列的第n個元素插入由n-1個元素構成的有序陣列中,則完成了整個
插入排序。
快速排序:
快速排序是基於分治思想的一種排序演算法。是一種內部排序,也就是說排序的物件是已經讀入記憶體的資料.
快速排序的思想是:
快速排序(quicksort)是對氣泡排序的一種改進。先從資料序列中選乙個元素,並將序列中所有比該元素小的元素都放到它的右邊或左邊,再對左右兩邊分別用同樣的方法處之直到每一
個待處理的序列的長度為1, 處理結束.
快速排序就是遞迴呼叫過程 (細節自己悟)
分治思想:
分:選擇乙個基準鍵值a[i],把所有元素按照大小分成兩部分;(這樣能確定乙個元素的最後位置)
選擇排序(selection sort)是一種簡單直觀的排序演算法。
它的基本思想是:首先在未排序的數列中找到最小(or最大)元素,然後將其存放到數列的起始位置;接著,再從剩餘未排序的元素中繼續尋找最小(or最大)元素,然後放到已排序序
列的末尾。以此類推,直到所有元素均排序完畢。
時間複雜度:o(n2)
希爾排序(shell sort)是插入排序的一種,它是針對直接插入排序演算法的改進。
希爾排序實質上是一種分組插入方法。它的基本思想是:對於n個待排序的數列,取乙個小於n的整數gap(gap被稱為步長)將待排序元素分成若干個組子串行,所有距離為gap的倍數的記錄放在
同乙個組中;然後,對各組內的元素進行直接插入排序。 這一趟排序完成之後,每乙個組的元素都是有序的。然後減小gap的值,並重複執行上述的分組和排序。重複這樣的操作,當gap=1時
,整個數列就是有序的。
堆排序:堆實際上是一棵完全二叉樹
利用大頂堆(小頂堆)堆頂記錄的是最大關鍵字(最小關鍵字)這一特性,使得每次從無序中選擇最大記錄(最小記錄)變得簡單。
其基本思想為(大頂堆):
1)將初始待排序關鍵字序列(r1,r2....rn)構建成大頂堆,此堆為初始的無序區;
2)將堆頂元素r[1]與最後乙個元素r[n]交換,此時得到新的無序區(r1,r2,......rn-1)和新的有序區(rn),且滿足r[1,2...n-1]<=r[n];
3)由於交換後新的堆頂r[1]可能違反堆的性質,因此需要對當前無序區(r1,r2,......rn-1)調整為新堆,然後再次將r[1]與無序區最後乙個元素交換,得到新的無序區(r1,r2....rn-2)和
新的有序區(rn-1,rn)。不斷重複此過程直到有序區的元素個數為n-1,則整個排序過程完成。
歸併排序:
歸併排序(mergesort)的基本思想是:將待排序檔案看成為n個長度為1的有序子檔案,把這些子檔案兩兩歸併,使得到「n/2」個長度為2的有序子檔案;然後再把這「n/2」個有序檔案的子
檔案兩兩歸併,如此反覆,直到最後得到乙個長度為n的有序檔案為止,這種排序方法成為二路歸併排序。
歸併排序的時間複雜度是o(n*lgn)。
另外還有基數排序等內部排序方式等。
新手建站之選擇網域名稱與主機必需知道的小知識
網域名稱與主機是架設乙個 的第一步,也是乙個 的基礎,同時選擇乙個好的網域名稱和主機對於搜尋引擎優化 seo 來說也至關重要。特別是一些商業站點,選擇網域名稱與主機更需要注重企業的形象,為網路營銷打好堅實的基礎。因此點水在這裡集合了一些在 建設中需要考慮的網域名稱與主機的一些小知識。1,網域名稱包含...
資料結構之什麼是資料結構
先看看官方怎麼說的 資料結構是計算機儲存 組織資料的方式。資料結構是指相互之間存在一種或多種特定關係的資料元素的集合。通常情況下,精心選擇的資料結構可以帶來更高的執行或者儲存效率。資料結構往往同高效的檢索演算法和索引技術有關。個人認為 和鬥地主乙個道理。資料就是你手裡牌,資料結構就是怎麼組合你的牌比...
資料結構之儲存結構
儲存結構是資料 的邏輯結構 用計算機語言的實現,常見的 儲存結構 有 順序儲存 鏈式儲存 索引儲存 以及雜湊儲存 其中雜湊所形成的儲存結構叫 雜湊表 又叫雜湊表 因此雜湊表也是一種儲存結構。棧只是一種抽象資料型別,是一種邏輯結構,棧邏輯結構對應的順序儲存結構為順序棧,對應的鏈式儲存結構為鏈棧 迴圈佇...