資料結構是相互之間存在一種或多種特定關係的資料元素的集合。
資料結構包括三方面的內容:邏輯結構、儲存結構和資料的運算。
1.資料的邏輯結構
資料的邏輯結構分類圖如下:
2.資料的儲存結構
儲存結構是指資料結構在計算機中的表示(又稱映象)。也稱物理結構。它包括資料元素的表示和關係的表示。資料的儲存結構是邏輯結構用計算機語言的實現,它依賴於計算機語言。資料結構的儲存結構主要有:順序儲存、鏈式儲存、索引儲存和雜湊儲存。
(1)順序儲存:把邏輯上相鄰的元素儲存在物理位置上也相鄰的儲存單元裡,元素之間的關係由儲存單元的鄰接關係來體現。其優點是可以實現隨機訪問,每個元素占用最少的儲存空間;缺點是只能使用相鄰的一整塊單元,因此可能產生較多的外部碎片。
(2)鏈式儲存:不要求儲存上相鄰的元素在物理位置上也相鄰,借助指示元素儲存位址的指標表示元素之間的邏輯關係。其優點是不會產生碎片現象,充分利用所有儲存單元;缺點是每個元素因儲存指標而占用額外的儲存空間,並且只能實現順序訪問。
(3)索引儲存:在儲存元素資訊的同時,還建立附加的索引表。索引表中的每一項稱為索引項,索引項的一般形式是:(關鍵字,位址)。其優點是檢索速度快;缺點是增加了附加的索引表,會占用較多的儲存空間。另外,在增加和刪除資料時要修改索引表,因而會花費較多的時間。
(4)雜湊儲存:根據元素的關鍵字直接計算出該元素的儲存位址,又稱為hash儲存。其優點是檢索、增加和刪除結點的操作都很快;缺點是如果雜湊函式不好可能出現元素儲存單元的衝突,而解決衝突會增加時間和空間開銷。
3.資料的運算
施加在資料上的運算包括運算的定義和實現。運算的定義是針對邏輯結構的,指出運算的功能;運算的實現是針對儲存結構的,指出運算的具體操作步驟。
1.基本概念
演算法是對特定問題求解步驟的一種描述,它是指令的有限序列,其中每一條指令表示乙個或多個操作。此外,乙個演算法還具有下列5個重要特性。
(1)有窮性
乙個演算法必須總是(對任何合法的輸入值)在執行有窮步之後結束,且每一步都可在有窮時間內完成。
(2)確定性
演算法中每一條指令必須有確切的含義,讀者理解時不會產生歧義,即相對相同的輸入只能得出相同的輸出。
(3)可行性
乙個演算法是可行的,即演算法中描述的操作都是可以通過已經實現的基本運算執行有限次來實現的。
(4)輸入
乙個演算法有零個或多個的輸入,這些輸入取自於某個特定的物件的集合。
(5)輸出
乙個演算法有乙個或多個的輸出,這些輸出是同輸入有這謀者特定關係的量。
通常設計乙個「好」演算法應該考慮達到以下目標:
正確性:演算法應該能夠正確地解決問題。
可讀性:演算法應當具有良好的可讀性,以助於人們理解。
健壯性:當輸入非法資料時,演算法也能適當地作出反應或進行處理,而不會產生莫名其妙的輸出結果。。
效率與地儲存量需求:效率是指演算法執行的時間,儲存量需求是指演算法執行過程中所需要的最大儲存空間,這兩者都與問題的規模有關。
2.演算法效率的度量
演算法效率的度量是通過時間複雜度和空間複雜度來描述的。
(1)時間複雜度
乙個語句的頻道是指該語句在演算法中被重複執行的次數,演算法中所有語句的頻度之和記作t(n),它是該演算法問題規模n的函式,時間複雜度主要分析t(n)的數量級。
(2)空間複雜度
演算法的空間複雜度s(n),定義為該演算法所耗費的儲存空間,它是問題規模n的函式,演算法原地工作是指演算法所需輔助空間是常量,即o(1)。
資料結構和演算法的區別
通俗來講 資料結構 解決資料如何在計算機中儲存和組織的問題。演算法 解決如何高效的處理和分析資料的問題。可以看的出 1.資料結構是演算法實現的基礎,演算法總是要依賴於某種資料結構來實現的。如果沒有資料結構,演算法一無是處。2.反過來,如果資料結構脫離了演算法,資料結構只是一堆冷冰冰的資料。正因為有演...
資料結構和演算法
判斷乙個演算法的效率時,函式中的常數和其它次要項常常可以忽略,而更應該關注主項 最高項 的階數。演算法時間複雜度的定義 在進行演算法分析時,語句中的執行次數t n 是關於問題規模n的函式,進而分析t n 隨n的變化情況並確定t n 的數量級。演算法的時間複雜度,也就是演算法的時間量度,記作 t n ...
資料結構和演算法
程式是什麼?好多書上都寫著 程式 資料結構 演算法。可是怎麼去理解呢?好多程式設計人員對資料結構和演算法說不上熟悉,因為在他們所從事的工作中很少用到這些知識點。但並不表示他們不重要。還有一些人是這樣的想法 大公司才會注重這些知識點,小公司可能就不注重了。寫這篇文章之前我也是持這種想法的。但是,此時此...