![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0NXYFhGd192UvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2LcBjVXp1MOhkWw50VZZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39zM0gzMwcDMxIDOyUDM0EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
表示法:
(D,S,P)
D:資料對象
S:D上的關系集
P:對D的基本操作集
ADT格式
<code></code>
ADT 抽象資料類型名{
資料對象:<資料對象定義>
資料關系:<資料對象的定義>
基本操作:<基本操作的定義>
}ADT 抽象資料類型名
基本操作的格式:
基本操作名(參數表)
初始條件:<初始條件描述>
操作結構:<操作結果描述>
原子類型的值是不能分解的,如C中基本資料類型
結構類型的值是可分解的,是由結構類型和原子類型聚合成的
而結構類型中按照值的成分是不是可變又分成:固定聚合類型&可變聚合類型
固定聚合類型如複數,它是由<a,b>兩個實數組成
可變聚合類型如字元串,它是由n個char類型字元組成
順序映像就如同數組,是一塊連續的空間,由頭指針和尾指針就可以指定這段空間
非順序映像如同連結清單,是n塊不連續空間,每塊空間有一個指針指向下一個空間(也有雙向指針)
首先,我們看看什麼是前驅後繼
前驅:某資料元素在此資料類型中的上一個資料元素
後繼:某資料元素在此資料類型中的下一個資料元素
如果一個資料類型中所有資料元素沒有前驅也沒有後繼,那麼每個元素之間就沒沒有關聯,這種結構稱之為集合;
如果每個元素都有一個前驅和一個後繼(其實這麼說不對,因為第一個元素沒有前驅,最後一個元素沒有後繼),那麼他們就形成了一個線性的結構,稱之為線性表
再如果每個元素都有一個前驅,但是有多個後繼(這麼說也不對,因為第一個元素是沒有前驅,而葉子節點是沒有後繼),那麼他們就成了一個樹
最後,n個前驅n個後繼的話,就形成了圖。
我們的資料結構主要就是以前驅後繼的形式去分類學習的,再輔以順序映像和非順序映像的表示就衍生了更多的資料結構,這個接下來會逐漸講述。
算法是對特定問題求解的步驟的描述,是指令的有限序列。
[1] 有窮性
兩點含義:
(1) 算法必須是在有窮步後結束,如無限循環就不是有窮的。
(2) 每步算法必須是在有窮時間内完成
[2] 确定性
(1) 每一條指令都不能有二義性
(2) 相同的輸入隻能有相同的輸出
[3] 可行性
算法中描述的操作都能通過有限次基本運算實作
[4] 輸入
一個算法有0個以上輸入
[5] 輸出
一個算法有1個以上輸出
[1] 正确性
四個層次:
a.不含文法錯誤
b.對于幾組輸入的輸出正确
c.程式對于精心選擇的輸入能得出正确的輸出
d.程式對于一切合法輸入都有正确的輸出
[2] 可讀性
算法代碼可被人閱讀
[3] 健壯性
代碼在面對異常時處理
[4] 效率與低儲存量需求
算法的時間和空間代價
算法的效率從耗費的時間和空間上劃分:
[1] 時間複雜度
時間複雜度一般使用大O表示法,它表示算法的時間效率的下限,按照函數增長趨勢又分為常量階、線性階、平方階、對數階、指數階(算法的效率逐漸降低,複雜度逐漸升高)。
[2] 空間複雜度
指的是算法運作期間占用的記憶體大小,一般也用大O表示法表示最差情況。