1.1 數據結構的基本概念
數據結構的三要素:邏輯結構、存儲結構、數據的運算
邏輯結構:
線性結構:線性表、棧、隊列;非線性結構:樹、圖、集合
與存儲結構無關,獨立於計算機
存儲結構:
即物理結構,包括順序存儲(隨機存取,碎片多)、鏈式存儲(不會出現碎片,指針占用存儲空間,只能實現順序存取)、索引存儲(建立附加的索引表,索引項的一般形式為【關鍵字,地址】,檢索速度快,索引表額外占用空間,增刪數據要修改索引表花費較多時間)和散列存儲等。
用計算機語言實現的邏輯結構,依賴於計算機語言
運算:
包括定義與實現,定義針對邏輯結構,實現針對存儲結構
錯題:
選擇題:
3.以下屬於邏輯結構的是:
A.順序表 B.哈希表 C.有序表 D.單鏈表
答案:C。順序表、哈希表、單鏈表都是數據結構,既描述邏輯結構,又描述存儲結構和數據運算。有序表是指關鍵字有序的線性表,僅描述邏輯關系,既可以是鏈式存儲也可以順序存儲。
6.在存儲數據時,通常不僅要存儲個數據元素的值,而且要存儲:
A.數據的操作方法 B.數據元素的類型 C.數據元素之間的關系 D.數據的存取方法
答案:C
數據庫就是數據和關系
7.鏈式存儲設計時,節點內的存儲單元地址:
A.一定連續 B.一定不連續 C.不一定連續 D.部分連續,部分不連續
答案:A。鏈式存儲設計時,各個不同節點的存儲空間可以不連續,但節點內的存儲單元地址必須連續。
應用題:
1.對於兩種不同的數據結構,邏輯結構或物理結構一定不相同嗎?
應該注意到,數據的運算也是數據結構的一個重要方面。
對於兩種不同的數據結構,它們的邏輯結構和物理結構完全有可能相同。比如二叉樹和二叉排序樹,二叉排序樹可以采用二叉樹的邏輯表示和存儲方式,前者通常用於表示層次關系,而后者通常用於排序和查找。雖然它們的運算都有建立樹、插入節點、刪除節點和查找節點等功能,但對於二叉樹和二叉排序樹,這些運算的定義是不同的,以查找節點為例,二叉樹的時間復雜度為O(n),而二叉排序樹的時間復雜度為O(log2n)。
1.2 算法和算法評價
算法是對特定問題求解步驟的一種描述。它是指令的有限序列,其中的每條指令表示一個或多個操作。
算法的五個特性:有窮性、確定性、可行性、輸入、輸出。
好的算法目標:正確性、可讀性、健壯性、效率與低存儲量要求。
算法效率的度量:時間復雜度、空間復雜度。
時間復雜度T(n) = O(f(n))
f(n)為算法中基本運算(最深層循環內的語句)的頻度
一般總是考慮在最壞情況下的時間復雜度,以保證算法的運行時間不會比它更長。
O(1) < O(log2n) < O(n) < O(nlog2n) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
空間復雜度S(n) = O(g(n))
算法原地工作是指算法所需的輔助空間為常量,即O(1)。
錯題:
選擇題:
1.一個算法應該是:
A.程序 B.問題求解步驟的描述 C.要滿足五個基本特性 D.A和C
答案:B。程序不一定滿足有窮性,如死循環、操作系統等,而算法必須有窮。算法代表對問題求解步驟的描述,而程序則是算法在計算機上的特定實現。C只是算法的必要條件,不能成為算法的定義。
2.下面說法中,錯誤的是:
A.算法原地工作的含義是指不需要任何額外的輔助空間
B.在相同規模n下,復雜度為O(n)的算法在時間上總是優於復雜度為O(2^n)的算法
C.所謂時間復雜度,是指最壞情況下估算算法執行時間的一個上界
D.同一個算法,實現語言的級別越高,執行效率越低
答案:A。
B,不要想當然去給n賦予一個特殊值。
歸納總結:
時間復雜度的分析方法:
1、循環主體中的變量參與循環條件的判斷
此類題應該找出主體語句中與T(n)成正比的循環變量,將之帶入條件中進行計算。
2、循環主題中的變量與循環條件無關
此類題可采用數學歸納法或直接累計次數。多層循環時從內分析到外,忽略單步語句、條件判斷語句,只關注主體語句的執行次數。
遞歸程序一般使用公式進行遞推,非遞歸程序可以直接累計次數。
思維拓展:
求解斐波那契數列
F(n)={1,n = 0,1;F(n-1) + F(n-2), n>1}
有兩種常用的算法:遞歸算法和非遞歸算法。試分別分析兩種算法的時間復雜度。
答案:
節點數為計算次數。F(n)的斐波那契遞歸計算法有n層,共2^(n-1)-1個節點,因此F(n)的時間復雜度為O(2^n)。
斐波那契數列——遞歸法時間復雜度計算_qiuxiaonao的博客-CSDN博客_斐波那契數列遞歸時間復雜度
斐波那契數列遞歸算法和非遞歸算法以及其時間復雜度分析_一米陽光-的博客-CSDN博客_斐波那契數列遞歸和非遞歸時間復雜度