學習任何一種技術都應該先清楚它的基本概念,這是學習任何知識的起點!本文是講述數據結構的基本概念,適合對數據結構已經有必定基礎的程序員,更是適合想要學習數據結構的code一族!讓咱們開始PHP數據結構的篇章吧!html
1、基本概念程序員
(一)編寫解決實際問題的程序的通常過程:算法
1.如何用數據形式描述問題,即將問題抽象爲一個數學模型;數據結構
2.問題所涉及到的數據量的大小及數據之間的關係;函數
3.如何在計算機中儲存數據及體現數據之間的關係;post
4.處理數據時須要對數據執行的操做;性能
5.編寫的程序的性能是否良好。學習
(二)數據(Data) :.net
是客觀事物的符號表示,在計算機科學中指的是全部能輸入到計算機中並被計算機程序處理的符號的總稱。
(三)數據元素(Data Element) :是數據的基本單位,在程序中一般做爲一個總體來進行考慮和處理。一個數據元素可由若干個數據項(Data Item)組成。數據項是數據的不可分割的最小單位。數據項是對客觀事物某一方面特性的數據描述。
(四)數據對象(Data Object):是性質相同的數據元素的集合,是數據的一個子集。如字符集合C={‘A’,’B’,’C,…} 。
(五)數據結構:相互之間具備必定聯繫的數據元素的集合。
(六)數據的邏輯結構:數據元素之間的相互關係稱爲邏輯結構。
(七)數據的邏輯結構有四種基本類型:
1.集合:結構中數據元素之間除了「屬於同一個集合」外,再也沒有其餘的關係;
2.線性結構:結構中的數據元素存在一對一的關係;
3.樹形結構:結構中的數據元素存在一對多的關係;
4.網狀或者圖狀結構:結構中的數據元素存在多對多的關係;
(八)數據結構的儲存方式:由數據元素之間的關係在計算機中有兩種不一樣的表示方法順序表示和非順序表示,從則導出兩種儲存方式,順序儲存結構和鏈式儲存結構
1.順序存儲結構:用數據元素在存儲器中的相對位置來表示數據元素之間的邏輯結構(關係)。
2.鏈式存儲結構:在每個數據元素中增長一個存放另外一個元素地址的指針(pointer ),用該指針來表示數據元素之間的邏輯結構(關係)
順序結構:數據元素存放的地址是連續的;
鏈式結構:數據元素存放的地址是否連續沒有要求。
數據的邏輯結構和物理結構是密不可分的兩個方面,一個算法的設計取決於所選定的邏輯結構,而算法的實現依賴於所採用的存儲結構
(九)數據操做: 對數據要進行的運算
(十)數據類型(Data Type):指的是一個值的集合和定義在該值集上的一組操做的總稱。
(十一)算法(Algorithm):是對特定問題求解方法(步驟)的一種描述,是指令的有限序列,其中每一條指令表示一個或多個操做。
(十二)算法具備如下五個特性
1.有窮性: 一個算法必須老是在執行有窮步以後結束,且每一步都在有窮時間內完成。
2.肯定性:算法中每一條指令必須有確切的含義。不存在二義性。且算法只有一個入口和一個出口。
3.可行性: 一個算法是能行的。即算法描述的操做均可以經過已經實現的基本運算執行有限次來實現。
4.輸入: 一個算法有零個或多個輸入,這些輸入取自於某個特定的對象集合。
5.輸出: 一個算法有一個或多個輸出,這些輸出是同輸入有着某些特定關係的量。
(十三)算法和程序是兩個不一樣的概念:一個計算機程序是對一個算法使用某種程序設計語言的具體實現。算法必須可終止意味着不是全部的計算機程序都是算法。
(十四)評價一個好的算法有如下幾個標準
1.正確性(Correctness ): 算法應知足具體問題的需求。
2.可讀性(Readability): 算法應容易供人閱讀和交流。可讀性好的算法有助於對算法的理解和修改。
3.健壯性(Robustness): 算法應具備容錯處理。當輸入非法或錯誤數據時,算法應能適當地做出反應或進行處理,而不會產生莫名其妙的輸出結果。
4.通用性(Generality): 算法應具備通常性 ,即算法的處理結果對於通常的數據集合都成立。
5.效率與存儲量需求: 效率指的是算法執行的時間;存儲量需求指算法執行過程當中所須要的最大存儲空間。通常地,這二者與問題的規模有關。
(十五)算法的時間複雜度:算法中基本操做重複執行的次數是問題規模n的某個函數,其時間量度記做 T(n)=O(f(n)),稱做算法的漸近時間複雜度(Asymptotic Time complexity),簡稱時間複雜度。
(十六)算法的空間複雜度:是指算法編寫成程序後,在計算機中運行時所需存儲空間大小的度量。記做: S(n)=O(f(n)),其中n爲問題規模