一些概念:
1、數據結構討論的是數據的邏輯結構、存儲方式以及相關操作的實現等問題。
2、數據結構就是指按一定的 邏輯結構 組成的一批數據,使用某種存儲結構將這批數據存儲於計算機中,並在這些數據上定義了一個運算集合。
-
數據結構三要素:
- 數據的邏輯結構
- 儲存結構
- 運算集合
3、數據的邏輯結構: -
線性結構:
- 特徵:有且僅有一個開始結點和一個終端結點,且所有結點都最多只有一個直接前趨和一個直接後繼; -
非線性結構:
- 特徵:一個結點可能有多個直接前趨和直接後繼;
4、數據的存儲結構: -
定義:
- 數據在計算機中的存儲方式成爲數據的存儲結構; -
種類:
- 順序存儲
- 鏈式存儲
- 索引存儲
- 散列存儲 -
順序存儲:
- 順序存儲通常用於存儲具有線性結構的數據。將邏輯上相鄰的結點存儲在連續存儲區域M的相鄰的存儲單元中,使得邏輯相鄰的結點一定是物理位置相鄰。
-
鏈式存儲:
- 鏈式存儲方式是給每個結點附加一個指針段,一個結點的指針所指的是該結點的後繼的存儲地址,因爲一個結點可能有多個後繼,所以指針段可以是一個指針,也可以是多個指針。
-
索引存儲:
- 索引存儲就是根據結點的索引號確定該結點的存儲地址。 -
散列存儲:
- 散列存儲的思想是構造一個從集合K到存儲區域M的一個函數h,該函數的定義域爲K,值域爲M,K中的每個結點ki在計算機中的存儲地址由h(ki)確定。
5、數據的運算: -
一般而言,數據的運算包括:插入、刪除、檢索、輸出、排序
-
針對的對象:結點!!!!!!!!!!!
-
- 插入:在一個結構中增加一個新的結點。 - 刪除:在一個結構刪除一個結點。 - 檢索:在一個結構中查找滿足條件的結點。 - 輸出:將一個結構中所有結點的值打印、輸出。 - 排序:將一個結構中所有結點按某種順序重新排列。
6、關於算法:
- 算法:
- 算法是求解問題的一種方法或一個過程; - 算法的五個基本特徵:
- ①有窮性,算法的執行必須在有限步內結束。
- ②確定性,算法的每一個步驟必須是確定的無二義性的。
- ③輸入, 算法可以有0個或多個輸入。
- ④輸出, 算法一定有輸出結果
- ⑤可行性,算法中的運算都必須是可以實現的。 - 算法的時間和空間複雜性:
- 算法優劣的衡量:算法的執行時間、所需要佔用的存儲空間。
- 算法執行時間的度量不是採用算法執行的絕對時間來計算的。算法的時間複雜性,採用算法執行過程中其基本操作的執行次數,稱爲計算量來度量。算法中基本操作的執行次數一般是與問題規模有關的,對於結點個數爲n的數據處理問題,用T(n)表示算法基本操作的執行次數。
- 在評價算法的時間複雜性時,不考慮兩算法執行次數之間的細小區別,而只關心算法的本質差別。爲此,引入一個所謂的O( ) 記號,則T1(n)=2n=O(n),T2(n)=n+1=O(n)。一個函數f(n)是O(g(n))的,則一定存在正常數c和m,使對所有的n>m,都滿足f(n)<c*g(n)。下面的表格給出了一些具體函數的O( )的表示,如圖所示。
- 算法的時間複雜性不僅和問題的規模大小有關,還與問題數據的初始狀態有關。這樣就有了算法在最好、最壞以及在平均狀態下的時間複雜性的概念。
①算法在最好情況下的時間複雜性是指算法計算量的最小值。
②算法在最壞情況下的時間複雜性是指算法計算量的最大值。
③算法的平均情況下的時間複雜性是指算法在所有可能的情況下的計算量經過加權計算出的平均值。 - 算法設計的要求:
- (1)正確性(correctness):算法應當滿足具體問題的要求。
- (2)可讀性(readability):算法主要是爲了人的閱讀與交流,其次纔是機器執行;可讀性好有助於人對算法的理解,便於調試和修改。
- (3)健壯性(robustness):當輸入數據非法時,算法也能適當地做出反應或進行處理,而不會產生莫名其妙的輸出結果。
- (4)效率與低存儲量需求:通俗地說,效率指的時候算法執行時間;存儲量需求指算法執行過程中所需要的最大存儲空間。