資料結構分為邏輯結構跟物理結構,邏輯結構依賴於物理結構
邏輯結構:集合結構 線性結構 樹形結構 圖形結構
程式的靈魂(演算法)
演算法的5大基本特性:輸入 輸出 有窮性 確定性 可行性
其他特性:價效比(效率)
事後統計法:比較執行時間
問題:嚴重依賴硬體和執行時環境因素,編寫相應程式
事前分析估算法
影響演算法效率的主要因素
1)選擇的策略和方法 //這個課程主要遵循這兩個
分析執行次數:
2)問題的輸入規模(例如排序演算法,排序1個跟排序10000個)
3)編譯器所產生的**
4)計算機執行速度
演算法的效率只關注最高端項就可以了–》定性描述,符合定向 o(n)
定性描述-》演算法複雜度分為時間複雜度和空間複雜度
資料結構課程重點關注的是演算法的效率問題,即集中於時間複雜度
大o(operation操作)表示法
運算元量的估算可以作為時間複雜度的估算
=>首先關注運算元量的最高次項
o(1)
o(n)
o(n2)
o(n3)
線性階的時間複雜度:o
(n)對應的**
對數接的時間複雜度 o
(logn)
int i=
1while
(i 平方階 o(n2)
for(i =
0;i 平方階 o(n2) 由於是(n,n-
1,n-2,
...,
1,0)for
(i=0
;ifor(i=
0;i(n)}
=》總的是 o
(n3)
演算法效率的度量
常用的時間複雜度
效率依次遞減
o(1) > o(n) > o(nlogn) > o(n^2) > o(n^3)「工程開發最次的選擇」 > o(2^n) > o(n ! )「後面這些實踐開發是不會採用的」
常數階 > 對數階 > 線性階 》 nlogn 接 平方階 立方階 指數階 階乘階
考慮的是最壞的複雜度
空間複雜度s(空間:記憶體空間) (space complexity)
s(n)=s(f(n)) // n為演算法的問題規模
資料元素 組成資料的基本單位 人類中 資料元素—人
資料項:乙個資料元素由若干個資料項組成 資料項----眼耳口鼻子
資料物件: 性質相同的資料元素的集合 人都有姓名、生日、性別等相同資料項
資料結構 : 資料元素間關係
邏輯結構 物理結構
邏輯結構:集合結構(平等,無關係) 線性結構 (1對1) 樹型結構(1對多) 圖形結構(多對多)
物理結構:順序儲存結構 鏈式儲存結構
順序儲存結構:分配聯絡位址,第乙個位置很重要
c語言資料型別
原子型別:整形、字元型、浮點型
結果型別:整形陣列
抽象資料型別(adt)
線性表:0個或多個資料元素的線性表
陣列的靜態鍊錶,怪怪的
順序儲存結構—隨機儲存特點,查詢o(1) ,但是插入o(n)
單鏈表 :查詢第乙個結點o(1),最後乙個點o(n),插入o(1)
單迴圈鍊錶:引入尾指標,查詢第乙個結點o(1),查詢最後乙個點o(1), 查詢上乙個結點o(n),插入o(1)
雙向鍊錶: 查詢上乙個結點o(1),插入和刪除改變兩個指標變數,空間換時間 :順序 先處理插入點s的前驅和後繼 ,在處理後結點的前驅,最後處理前結點的後繼
棧(stack):限定僅在表尾(棧頂)進行插入和刪除的線性表壓棧 出棧,先進後出
從待求解的問題出發,一直分解到已經已知答案的最小問題為止,然後再逐級返回,從而得到大問題的解(乙個非常形象的例子就是分類回歸樹 classification and regression tree,從root出發,先將root分解為
而迭代則是從已知值出發,通過遞推式,不斷更新變數新值,一直到能夠解決要求的問題為止
=斐波那契數列的求解*****==
遞迴實際上不斷地深層呼叫函式,直到函式有返回才會逐層的返回,因此,遞迴涉及到執行時的堆疊開銷(引數必須壓入堆疊儲存,直到該層函式呼叫返回為止),所以有可能導致堆疊溢位的錯誤;但是遞迴程式設計所體現的思想正是人們追求簡潔、將問題交給計算機,以及將大問題分解為相同小問題從而解決大問題的動機。
迭代大部分時候需要人為的對問題進行剖析,將問題轉變為一次次的迭代來逼近答案。迭代不像遞迴一樣對堆疊有一定的要求,另外一旦問題剖析完畢,就可以很容易的通過迴圈加以實現。迭代的效率高,但卻不太容易理解,當遇到資料結構的設計時,比如圖『表、二叉樹、網格等問題時,使用就比較困難,
遞迴演算法從思想上更加貼近人們處理問題的思路,而且所處的思想層級算是高層(神),而迭代則更加偏向於底層(人),所以從執行效率上來講,底層(迭代)往往比高層(遞迴)來的高,但高層(遞迴)卻能提供更加抽象的服務,更加的簡潔
佇列(queue):只允許在隊尾進入插入操作,而在隊頭進行刪除操作的線性表。一段進,一端出,先進先出(fifo),允許插入的一端叫隊尾,允許刪除的一端叫隊頭
eg:鍵盤輸入與顯示
串(string):零個或多個字元組成的有限序列,也叫字串
順序迴圈佇列: 佇列的頭尾相接的順序迴圈結構
資料結構與演算法開篇 00
1.有窮性 乙個演算法的操作步驟是有限的,不能是無限的 2.確定性 演算法中的每乙個步驟都要確定的詞,不能含糊不清 3.輸入 演算法具有0個或多個輸入 4.輸出 演算法至少有1個或多個輸出 5.可行性 演算法的每一步都是可行的,也就是說每一步都能夠執行有限的次數完成1.正確性 演算法的執行結果應當滿...
《資料結構》003樹 00B
方法 1 查詢根節點,若根節點為空,返回null 2 根據根節點和x進行比較 x 根節點 遍歷左子樹 x 根節點 遍歷右子樹 相等 搜尋完成,即為根節點 position find elementtype x,bintree bst 將上面的方法進行改進 position interfind ele...
一堆模板(醜陋0 0) 資料結構
1 1.主席樹模板練習 hdu2665 kth number 23 include4 include5 include6 include7 include8 include9 include10 using namespace std 11struct treet 2000000 14 int to...