1、二叉搜尋樹的查詢
(1)傳統的遞迴
(2)非遞迴查詢,就硬是迴圈得了
(3)遍歷的遞迴與非遞迴方式
2、銷毀二叉樹的方法
(1)需要採用後續遍歷的方式(左右中)可以採用遞迴,簡單點
(2)注意傳遞二級指標或者指標引用
3、單項鍊表
(1)根據索引找到想要操作的節點就可以了
(2)刪除全部節點時可以關注下二級指標的問題(避免野指標)
4、雙向鍊錶(雙向就是迴圈了嗎)
(1)注意在根據索引來查詢節點時,判斷下在前半部分還是後半部分,在通過next或pre偏移,可以有效的減少查詢的次數
(2)主要是把想要操作的節點找出來,然後修改他們的前後指標的指向就沒啥問題了,與單項鍊表差不多,複雜不到那裡去。
5、棧的實現
(1)基於陣列來實現:就用[0]來作為棧底元素,陣列增長的方向為棧頂的方向,對陣列尾巴進行壓棧和出棧操作即可。
(2)基於單項鍊表的實現:用表頭作為棧頂,每次的壓棧都從表頭開始插入,出棧也從表頭進行,相對簡單。
6、佇列
(1)元素只能從隊尾一端進入佇列,元素只能從隊首出佇列
(2)基於陣列實現的迴圈佇列:因為每次從陣列頭部刪除元素(出隊)後,需要將頭部以後的所有元素往前移動乙個位置,時間複雜度位o(n)。如果知識把隊首的標誌往後移動,就會造成陣列空間的流失。我們希望佇列的插入和刪除操作都是o(1),同時不造成空間的浪費,應該使用迴圈佇列。所謂的迴圈佇列,可以把陣列看作乙個首位相連的圓環,刪除元素時將隊首標誌往後移動,新增元素時若陣列尾部已經沒有空間,則考慮陣列頭部是否空閒,如果是,則在陣列的頭部進行插入。
棧空:隊首標誌==隊尾標誌,表示棧空
棧滿:隊尾 + 1 == 隊首,表示棧滿。此時其實還有乙個位置,不進行儲存
(3)基於單向鍊錶實現的佇列:以鍊錶頭部作為隊首,鍊錶尾部作為隊尾。儲存乙個指向隊尾的指標,方便從鍊錶尾部插入元素,使用表頭,方便從隊首刪除元素。
7、字串string實現
(1)string的拷貝構造要實現深拷貝,避免淺拷貝帶來的記憶體共享導致的問題
(2)關於operator》和operator《運算子的過載,建議設計成友元函式,不設計成成員函式。因為如果是成員函式,必須通過物件來呼叫,不符合《》的使用習慣
8、雜湊表(雜湊表)
(1)雜湊表包含乙個陣列,通過特殊的索引值(鍵)來訪問陣列中的元素(可以理解為雜湊表和雜湊函式)
(2)雜湊表的主要思想是通過乙個雜湊函式,在所有可能的鍵與槽位之間建立一張對映表。雜湊函式每次接受乙個鍵,將返回與鍵對應的雜湊編碼或者雜湊值。鍵的資料型別可能各種各樣,但雜湊值只能是整型。當雜湊函式能夠保證不同的鍵生成的雜湊值互不相同時,就說雜湊值能直接定址想要的結果。
(3)雜湊表的實現:其中的原理就是用雜湊函式來將鍵值對映為陣列的下標,存放對應的資料。雜湊函式才是整個實現的關鍵。因為好的雜湊函式要保證資料索引的均勻分配,不浪費空間,較少衝突。
(4)雜湊函式設計的考慮因素
a、計算雜湊位址所需要的時間
b、關鍵字的長度
c、表長
d、關鍵字分布是否均勻,是否有規律
e、在滿足以上條件的情況下儘量減少衝突
(4)處理衝突的方法:
b、開放定製法:如果遇到衝突,按照一定的探測再雜湊的法則,向前尋找其他的位址空間,最終合起來算全部的位址位置。(線性探測、平方探測、隨機探測等。。。)
(5)雜湊表的查詢效率
a、選用的雜湊函式
b、選用的處理衝突的方法
c、雜湊表的飽和度?
資料結構學習筆記
資料結構概述 定義我們如何把現實中大量而複雜的問題以特定的資料型別和特定的儲存結構 儲存到主儲存器 記憶體 中,以及在此基礎上為實現某個功能 比如查詢摸個 元素,刪除某個元素,對所有元素進行排序 而執行的相應操作,這個相應 的操作也叫演算法 資料結構 個體 個體的關係 演算法 對儲存資料的操作 演算...
資料結構學習筆記
資料結構學習筆記 程式 資料結構 演算法 資料結構 資料 結構 結構的本質是關係 資料之間的關係從不通風層面上分為邏輯關係和物理關係 演算法的設計要依據資料的邏輯關係 演算法的實現要依據資料的物理關係 物理關係是邏輯關係的基礎和載體 演算法實現時需要先依據問題抽象出資料模型,即初步確定待處理資料的邏...
資料結構 學習筆記
一 鍊錶 1 基本特徵 記憶體節點是不連續的,節點之間通過指標彼此關聯。2 基本操作 追加 插入 刪除 遍歷 偽隨機訪問!3 實現要點 1 追加 新建節點存放資料,令新節點的前指標指向當前尾節點,新節點的後指標為null,令當前尾節點的後指標指向新節點,尾指標指向新節點。考慮在空煉表中追加第乙個節點...