資料結構之陣列和鍊錶的區別
演算法的時間與空間複雜度
資料結構與演算法是計算機專業必修的一門課
在工作中,免不了要面對一些複雜的業務邏輯,可能有多種方法實現,每種方式的執行效率也可能都不一樣,好的資料結構與演算法能提公升效率,具體體現在時間和空間上
比如,現在有一萬個人,要找出姓名叫張三的人,最簡單的方式是從頭到尾遍歷,如果張三是最後一位,則要遍歷10000次
如果按字母首字母去查詢的話,則首先在10000個人當中找到首字母為z的人,假如是100個人,那最快的情況也只用遍歷100次
這個就是資料結構與演算法最簡單的例子
為什麼要學資料結構與演算法?
學習路線圖:
陣列特點:
鍊錶特點:
棧其實是一種受限的線性資料結構,遵循先進後出
術語:棧結構的方法:
方法含義
push()
入棧操作
pop()
出棧操作
gettopelement()
返回棧頂的元素,但不會移除棧頂的元素
isempty()
檢視棧是否為空
size()
返回棧內元素的個數
tostring()
以字串的形式展示棧內的所有元素
典型的棧的應用場景:
}佇列也是一種受限的線性資料結構,遵循先進先出的原則
優先順序佇列:不遵循先進先出,優先順序高的元素,在插入佇列的時候可能會排在前面
單向鍊錶
雙向鍊錶
雜湊表的由來:
對於陣列,如果已知下標i,那麼查詢乙個元素就很快。但是如果不知道下標i,只知道元素的值,那麼需要從頭開始遍歷陣列,直到找到這個元素位置
為了解決陣列的不足,引入了雜湊表,雜湊表在很多程式語言中都有實現
將乙個值經過雜湊函式計算後,再取模,會得到乙個下標,好的雜湊函式會使雜湊衝突的機率很小
雜湊衝突的解決方法:
樹結構是平日裡我們常見的一種資料結構,例如家族族譜、公司管理層級結構圖等,這樣的資料結構的存在一定有一定的道理
樹是一種非線性資料結構
術語名含義
結點樹中的資料元素
結點的度
結點擁有的子樹個數
葉子結點
度為0的結點
分支結點
度大於0的結點
父節點衍生出其它結點的結點為這些結點的父結點
子結點被某個結點衍生出來的結點為該結點的子結點
兄弟結點
具有同乙個父節點的所有結點為兄弟結點
結點的層次
設定根結點所在層次為1,其它結點層次為其父節點層次+1
樹的深度
樹的所有結點中的最大層次為該樹的深度
路徑從某個結點沿著樹的層級關係到達另乙個結點之間的路線
路徑長度
路徑上的結點個數 -1
二叉樹的定義:樹結構中每個結點最多只有兩個子結點,即任何乙個結點的度都小於等於2
完全二叉樹要滿足以下兩個條件:
第i層結點個數最大為2^(i-1)個,i>=1
深度為k的二叉樹總結點個數最大為2^k-1,k>=1
資料結構與演算法課程設計
題目 某地區經過對城鎮交通狀況的調查,得到現有城鎮間快速道路的統計資料,並提出 暢通工程 的目標,使整個地區任何兩個城鎮間都可以實現快速交通 但不一定有直接的快速道路相連,只要互相間接通過快 速路可達即可 現得到城鎮道路統計表,表中列出了任意兩城鎮間修建快速路的費用,以及該道路是否已經修通的狀態。現...
演算法與資料結構複習 鍊錶
鍊錶定義 typedef struct listnode題 如何判斷鍊錶有環?定義兩個節點,乙個節點一次移動乙個節點,乙個節點一次移動兩個節點,如果兩者相遇則說明有環 bool judgecircle listnode node return false return false 題 請問如何判斷兩...
複習資料結構及演算法
複習資料結構與演算法的一些知識收藏 十大經典排序演算法 時間和空間複雜度 演算法 algorithm 是指用來運算元據 解決程式問題的一組方法。對於同乙個問題,使用不同的演算法,也許最終得到的結果是一樣的,但在過程中消耗的資源和時間卻會有很大的區別。那麼我們應該如何去衡量不同演算法之間的優劣呢?主要...