1、程序的本質
程序是爲了實際的問題而存在從本質上而言,程序是解決問題的步驟描述。
數據結構起源
計算機從解決數值計算問題到解決生活中的問題
現實生活中的問題涉及不一樣個體間的複雜聯繫
須要在計算機程序中描述生活中個體間的聯繫
數據結構主要研究非數值計算程序問題中的操做對象以及它們之間的關係
數據結構中的概念:
數據 – 程序的操做對象,用於描述客觀事物
數據的特色:能夠輸入到計算機;能夠被計算機程序處理
數據元素 – 組成數據的基本單位
數據項:一個數據元素由若干數據項組成
數據對象 – 性質相同的數據元素的集合
數據的邏輯結構
集合結構:數據元素之間沒有特別的關係,僅同屬相同集合
線性結構:數據元素之間是一對一的關係
樹形結構:數據元素之間存在一對多的層次關係
圖形結構:數據元素之間是多對多的關係
數據存儲的物理結構
物理結構:邏輯結構在計算機中的存儲形式
順序存儲結構:將數據存儲在地址連續的存儲單元裏
鏈式存儲結構:將數據存儲在任意的存儲單元裏,經過保存地址的方式找到相關聯的數據元素
2、程序的靈魂-算法
數據結構只是靜態的描述了數據元素之間的關係
高效的程序須要在數據結構的基礎上設計和選擇算法
算法的定義:
算法是特定問題求解步驟的描述
在計算機中表現爲指令的有限序列
算法是獨立存在的一種解決問題的方法和思想。
算法的特性:
輸入:算法具備0個或多個輸入
輸出:算法至少有1個或多個輸出
有窮性:算法在有限的步驟以後會自動結束而不會無限循環
肯定性:算法中的每一步都有肯定的含義,不會出現二義性
可行性:算法的每一步都是可行的
算法設計的準則:
正確性
算法對於合法數據可以獲得知足要求的結果
算法可以處理非法輸入,並獲得合理的結果
算法對於邊界數據和壓力數據都能獲得知足要求的結果
正確性是算法最須要知足的基本的準則,可是做爲計算機程序,不可能無限制的知足這條準則。
可讀性
算法要方便閱讀,理解和交流
健壯性
算法不該該產生莫名其妙的結果
高性價比
利用最少的時間和資源獲得知足要求的結果
算法效率的度量
大O表示法
算法效率嚴重依賴於操做(Operation)數量
在判斷時首先關注操做數量的最高次項
操做數量的估算能夠做爲時間複雜度的估算
算法的空間複雜度:
算法的空間複雜度經過計算算法的存儲空間實現
S(n) = O(f(n))
其中,n爲問題規模,f(n)爲在問題規模爲n時所佔用存儲空間的函數
大O表示法一樣適用於算法的空間複雜度
當算法執行時所須要的空間是常數時,空間複雜度爲O(1)
空間與時間的策略
多數狀況下,算法執行時所用的時間更使人關注
若是有必要,能夠經過增長空間複雜度來下降時間複雜度
同理,也能夠經過增長時間複雜度來下降空間複雜度算法