1. 程式人生 > >《數據結構(C語言版)》學習——day1,初識數據結構

《數據結構(C語言版)》學習——day1,初識數據結構

數據結構

1. 什麽是數據結構


一般而言,使用計算機解決一個具體的問題時,大致需要經過以下幾個步驟:

① 從具體的問題中抽象出一個適當的數學模型;

② 設計一個求解該數學模型的算法;

③ 編寫程序,進行測試、調整,直至得到最終的問題解答。


對實際問題建立數學模型的實質是:分析問題,並從中提取操作的對象,並找出這些對象間含有的關系,然後使用數學的語言加以描述。


數據結構(data structure)可以定義為:相互之間存在一種或多種特定關系的數據元素的集合。


在任何問題中,數據元素都不是孤立存在的,而是存在著某種相互牽連的關系,這種關系稱為結構(structure)。根據關系特性的不同,通常有4種基本結構:

① 集合,數據元素之間除了同屬一個集合外,別無其他關系;

② 線性結構,數據元素之間存在一對一的關系;

③ 樹形結構,數據元素之間存在一對多的關系;

④ 圖狀結構或網絡結構,數據元素之間存在多對多的關系。


數據結構的形式定義為:數據結構是一個二元組

Data Structure = (D,S)

其中,D是數據元素的有限集,S是D上關系的有限集。


2. 算法


算法是求解特定問題的一種分步驟描述,它是指令的有限序列,每一條指令對應一個或多個操作,算法具有以下5個重要特性:

① 有窮性,一個算法總是在執行有窮步後結束,且每一步可在有窮步內完成;

② 確定性,算法的每一條指令,必須具有確切的含義,不會產生二義性,在任何條件下,相同的輸入只能得出相同的輸出;

③ 可行性,算法中描述的操作都是可行的;

④ 輸入,算法中存在0個或多個輸入,這些輸入取決於特定的對象集合;

⑤ 輸出,算法存在1個或多個輸出,這些輸出是同輸入有著某些特定關系的量。


算法設計,需要考慮以下目標:

① 正確性(correctness),算法應當滿足具體問題的需求,要以指定的方式進行輸入和輸出;

② 可讀性(readability),算法主要是為了供人閱讀與交流的,其次是機器執行;

③ 健壯性(robustness),當輸入數據非法時,算法也能適當地做出反應並進行進行處理,而不會出現莫名其妙的輸出結果,或者崩潰;

④ 效率和低存儲,效率指的是算法執行時間,存儲需求指算法執行過程中所需最大存儲空間。


算法中基本操作重復執行的次數是問題規模n的某個函數f(n),算法的時間度量可以記作

T(n) = O(f(n))

它表示隨問題規模n的增大,執行時間的增長率和f(n)的增長率相同,這就是算法的時間復雜度(time complexity)。




《數據結構(C語言版)》學習——day1,初識數據結構