字串通常轉化為字元陣列再操作。
優點:
構建簡單,能在o(1)的時間內根據陣列下標(index)查詢某個元素
缺點:
構建時必須分配一段連續空間。
查詢某元素是否存在時需要遍歷整個陣列,耗費o(n)的時間(n為元素個數)
新增/刪除某個元素時同樣耗費o(n)的時間。
雙鏈表:雙鏈表的每個節點中含有兩個引用字段。(↑乙個)
優點:
靈活分配記憶體空間(不必連續?)
能在o(1)的時間內刪除/新增元素
缺點:
查詢某元素是否存在時耗費o(n)的時間。
(必須從頭開始查詢,所以不適合快速查詢,適合資料個數不確定/需要經常新增刪除操作)
解題技巧:
快慢指標(有時候需要三個指標):鍊錶的翻轉,尋找倒數第k個元素,尋找鍊錶中間位置元素,判斷鍊錶是否有環
構建乙個虛假煉表頭,否則需要對鍊表頭判空(一般用於需要返回新的鍊錶):對兩個排序鍊錶進行整合排序,將鍊錶的奇偶數按原定順序分離,生成前半部分為奇數,後半部分為偶數的鍊錶。
先進後出(lifo)。所有操作都是在棧頂部完成,檢視棧頂元素,向棧頂部壓入資料,從棧頂部彈出資料。
利用單鏈表實現棧的資料結構,可以在o(1)的時間內完成。
解題技巧:
只要求關心最近一次的操作,並且在操作完成之後需要向前查詢更前一次操作。
(可以用乙個陣列外加乙個指標實現相似效果,但是一旦陣列長度改變,時間複雜度就不再是o(1),且空間複雜度上公升)
先進先出(fifo),只允許在隊尾檢視和新增資料,在隊頭檢視和刪除資料,可以通過雙鏈表的頭尾指標實現。
解題技巧:
當需要按照一定順序處理資料,且該資料的資料量在不斷變化的時候就可以考慮採用佇列。(如廣度優先搜尋)
雙端佇列:在頭尾兩端都能在o(1)的時間內進行資料的檢視/刪除/新增,同樣可以通過雙鏈表實現。
要求遞迴:樹的每個節點都符合定義,如二叉搜尋樹的每個節點都必須是一顆二叉搜尋樹。
前中後序遍歷的遞迴/非遞迴寫法,分析各種寫法的時間複雜度和空間複雜度
資料結構 棧 佇列 鍊錶
棧 1,棧只能從表的一端訪問資料,另一端是封閉的。2,在棧中,無論是存資料還是取資料,都必須遵循 先進後出 的原則,即最先進棧的元素最後出棧。基於 棧結構的特點,在實際應用中,通常只會對棧執行以下兩種操作 向棧中新增元素,此過程被稱為 進棧 入棧或壓棧 從棧中提取出指定元素,此過程被稱為 出棧 或彈...
資料結構 棧 佇列 鍊錶
棧 1,棧只能從表的一端訪問資料,另一端是封閉的。2,在棧中,無論是存資料還是取資料,都必須遵循 先進後出 的原則,即最先進棧的元素最後出棧。基於 棧結構的特點,在實際應用中,通常只會對棧執行以下兩種操作 向棧中新增元素,此過程被稱為 進棧 入棧或壓棧 從棧中提取出指定元素,此過程被稱為 出棧 或彈...
資料結構 線性表(陣列 鍊錶 棧 佇列)
線性邏輯結構特徵 集合中存在唯一的第乙個資料元素 最後乙個資料元素,集合中剩餘的每個資料元素均有唯一的直接前驅元素和唯一的直接後繼元素 它用一組連續的記憶體空間,來儲存一組具有相同型別的資料。陣列的空間是從棧分配的。陣列優點 簡單易用 訪問元素快 常數時間 陣列缺點 大小固定 是靜態的 並且要在使用...