一、數據結構三要素:邏輯結構、存儲結構、數據的運算。
1.數據:是信息的載體,是描述客觀事物的數、字符以及所有能輸入到計算機中並能被計算機識別並處理的符號的集合。
數據元素:是數據的基本單位,可由若干數據項組成,數據項是構成數據元素的不可分割的最小單位;
例如數據記錄就是一個數據元素,由姓名、性別、學號等數據項組成。
數據對象:具有相同性質的數據元素的集合,是數據的一個子集。
數據類型:原子類型(如bool)結構類型(struct{}) 抽象數據類型(ADT,可以構成一個完整的數據結構的定義如,如棧就是一種抽象的數據類型,只表示邏輯結構)
數據結構:同一個數據對象里的數據元素,可以組成不同的數據結構。
數據結構包括邏輯結構、存儲結構、數據的運算。
數據項組成數據元素,數據元素組成數據對象,數據對象是數據的一個子集。
2.邏輯結構:數據元素之間的邏輯關系,與數據的存儲無關,是獨立於計算機的。
邏輯結構分為線性結構和非線性結構
線性結構:數據元素之間只存在一對一的關系,一般線性表、受限線性表(棧和隊列、串)、線性表的推廣(數組)
非線性結構:結構中的數據元素之間存在一對多、多對多或者沒有關系,樹形結構(一般樹、二叉樹:一對多)、圖狀結構或網狀結構(多對多)、集合(沒有關系)
3.存儲結構:如何用計算機表示數據元素的邏輯關系,主要有順序存儲、鏈式存儲、索引存儲、散列存儲
鏈式存儲設計時,各個不同結點的存儲空間可以不連續,但結點內的存儲單元地址必連續。
4.數據的運算:針對於某種邏輯結構,結合實際需求,定義基本運算。
二、算法
程序=數據結構+算法
數據結構:如何用數據正確描述現實世界的問題,並存入計算機。
算法:如何高效地處理這些數據,以解決實際問題,是對特定問題求解步驟的一種描述。
算法的五大特性
(1)有窮性:算法必須是有窮的,程序可以是無窮的。
(2)確定性:每條指令有確切的含義,相同的輸入只能得到相同的輸出
(3)可行性:可實現
(4)輸入:0個或多個輸入
(5)輸出:一個或多個輸出
一個好的算法應考慮達到:
(1)正確性(2)可讀性(3)健壯性(4)高效率和低存儲量需求
算法時間復雜度:不僅依賴於問題規模n,也取決於待輸入數據的性質。
(1)加法規則:多項相加,只保留階數最高的項,且系數變為1
(2)乘法規則:多項相乘都保留
順序執行的代碼只會影響常數項;一層循環,挑循環中的一個基本操作分析它的執行次數與n的關系;多層嵌套循環,只需關注最深層循環循環了幾次
空間復雜度:只需關注存儲空間大小與問題規模的相關變量,算法原地工作是指算法所需的輔助空間為常量,即O(1)。