數據結構:是指相互之間存在一種或多種特定關係的數據元素的集合用計算機存儲、組織數據的方式。數據結構分別爲邏輯結構、(存儲)物理結構和數據的運算三個部分。算法
存儲結構(storage structure)也稱爲物理結構(physical structure),指的是數據的邏輯結構在計算機中的存儲形式。數據的存儲結構通常能夠反映數據元素之間的邏輯關係編程
總結 邏輯結構是面向問題的,而物理結構就是面向計算機的. 其基本的目標就是將數據以及邏輯關係存儲到計算機的內存中.數組
數據類型: 是指一組性質相同值的集合以及定義在此集合的一些操做的總稱。在C語言中,按照取值不一樣,數據類型能夠分爲2類:markdown
抽象數據類型(abstract data type,ADT)是描述具備某種邏輯關係的數據模型,並對在數學模型上進行的一組操做。抽象數據類型描述的是一組邏輯上的特性,與在計算機內部表示無關,計算機中的整數數據類型是一個抽象數據類型,不一樣處理器可能實現方法不一樣,但其邏輯特性相同,即加、減、乘、除等運算是一致的。「抽象」的意思是數據類型的數學抽象特性而不是指它們的實現方法。抽象數據類型體現了程序設計中的問題分解、抽象、信息隱藏等特性,能夠把現實中的大問題分解爲多個規模小且容易處理的小問題,而後創建起一個能被計算機處理的數據,並把每一個功能模塊的實現細節做爲一個獨立的單元,從而使具體實現過程隱藏起來。就相似建一棟房子,分紅若干個小任務,如地皮規劃、圖紙設計、施工、裝修等,整個過程與抽象數據類型中的問題分解相似。而搬磚人不須要了解圖紙設計如何,設計圖紙人員不須要了解施工的地基、砌牆的具體細節,裝修工人不用關係圖紙和搬磚過程,這就是抽象類型中的信息隱藏。 抽象數據類型的概念可能讓初學者不太容易理解。例如線性表的抽象數據類型的描述數據對象集合:線性表的數據對象集合爲{a1,a2,a3,····,an},每一個元素的類型均爲DataType。其中,除了第一個元素a1外,每個元素有且只有一個直接前驅元素;除了最後一個元素an外,每個元素有且只有一個直接後繼元素。數據元素之間的關係是一對一的。數據結構
算法(algorithm)是解決特定問題求解步驟的描述,在計算機中表現爲有限的操做序列。在數據類型創建起來以後,就要對這些數據類型進行操做,創建起運算的集合即程序。運算的創建、方法好壞直接決定着計算機程序原型效率的高低。數據結構和算法
二者基友聯繫又有區別。聯繫是程序=算法+數據結構。數據結構是算法實現的基礎,算法老是要依賴某種數據結構來實現的。算法的操做對象是數據結構。區別是數據結構關注的是數據的邏輯結構、存儲結構有一集基本操做,而算法更多的是關注如何在數據結構的基本上解決實際問題。算法是編程思想,數據結構則是這些思想的基礎。函數
時間複雜度,又稱時間複雜性,算法的時間複雜度是一個函數,它定性描述該算法的運行時間。時間複雜度經常使用大O符號表述。性能
爲了更好地描述時間複雜度有如下規定:spa
算法的時間複雜度是衡量一個算法好壞的重要指標。通常狀況下,隨着規模n的增大,次數T(n)的增加較慢的算法爲最優算法。常見時間複雜度從小到大依次排列:設計
O(1) < O(logn) < O(n)< O(nlogn) < O(n²)<O(n³) < O(2^n) <O(n!) < O(n^n) ###常見的時間複雜度
時間複雜度描述的是算法的最壞狀況。
空間複雜度(space complexity)做爲算法所需存儲空間的量度,記作S(n) = O (f(n))。其中,n爲問題的規模;f(n)爲語句關於n的所佔存儲空間的函數。 對於一個算法,全部的變量、指令、結果都須要存儲空間,另外在算法的執行過程當中,臨時變量和臨時結果也須要保留下來以便下一步計算,這些稱爲算法執行時的輔助空間。
空間複雜度主要定性描述算法所需的輔助空間。
對一個算法,其時間複雜度和空間複雜度每每會互相影響. 當追求一個較好的時間空間複雜度時,可能會致使佔用較多的存儲空間. 便可能會使用空間複雜度的性能變差.反之亦然. 不過,一般狀況下,鑑於運算空間較爲充足,人們都以算法時間空間複雜度做爲算法優先的衡量指標。