數據(Data):是對客觀事物的符號表示,是指全部可以輸入到計算機並被計算機處理的符號的總稱;算法
2大類數據:數值數據(整數、浮點數、複數)與非數值數據(字符、字符串、圖像、聲音);數組
數據元素(Data Element):數據的基本單位,在程序中做爲一個總體進行考慮和處理;數據結構
數據項:數據元素能夠由多個數據項組成,是數據操做中不可分割的最小單位;數據結構和算法
數據對象:是性質相同的全部元素的集合,是數據的一個子集;函數
數據結構:是相互之間存在一種或多種特定關係的數據元素組成的集合,這種關係被稱爲結構;spa
四類基本結構:集合(數據元素無序也沒有重複)、線形結構(具備一對一的關係,全部元素按照某種次序排列在一個序列中,元素存在直接後繼和直接前驅)、樹形結構(集合中元素存在一對多的關係)、圖狀結構(網狀結構)(集合中的元素存在多對多的關係)設計
直接後繼與直接前驅:線形結構中僅有第一個元素沒有直接前驅,僅有最後一個元素沒有直接後繼指針
邏輯結構:Data_Structure = (D, S)對象
物理結構(存儲結構):數據結構在計算機中的表示,包括數據元素的表示和數據關係的表示blog
位、元素(節點)、數據域:位是數據在計算機中的二進制表示最小單位的一位位,若干位組合造成的一個位串來表示一個完整,又被稱爲一個節點,數據項對應爲數據域;
映像、順序映像和非順序映像:元素節點是數據在計算機中的映像,其中藉助元素在計算機存儲中的相對位置表示數據的關係稱爲順序映像,藉助元素存儲地址的指針來表示數據的關係稱爲非順序映像。分別對應於順序存儲結構和鏈式存儲結構。
數據結構研究的三個方面:數據間的固有關係(邏輯結構);數據在計算機內部的存儲方法(存儲結構);數據在不一樣結構上的操做與處理(算法)。
5種數據類型:基本類型、構造類型、指針類型pointer、引用類型reference、空類型void
4種基本類型:整型(短整型shaort int-二、整型int-四、長整型long int-4)、字符型char-一、浮點型(單精度型float-四、雙精度型double-八、長雙精度型long double-8)、布爾類型bool
5種構造類型:枚舉類型enum、數組類型srray、結構體類型struct、聯合類型union、類類型class
抽象數據類型用戶定義用來表示實際應用問題的數據模型
特色:使用與實現分離,實現封裝和信息隱蔽
算法:是對特定問題求解步驟的一種描述,是指令的有限序列
五個特徵:有窮性(有限的步驟與運行時間)、肯定性(指令的無疑義)、可行性(能夠經過有限次運算獲得結果)、輸入(0個或多個)、輸出(一個或多個)
正確性:不含語法錯誤;程序在輸入數據後能夠獲得滿意的結果;精心選擇的、典型的、苛刻的數據輸入能夠獲得滿意的結果;一切合法的輸入能夠獲得滿意的結果
可讀性:易於理解
健壯性:使對非法數據的處理也能夠獲得必定的結果
效率:時間和存儲空間
時間複雜度:程序在計算機上運行時間的度量;
2種方法:過後統計方法和事前分析估算方法;
過後統計方法的2個缺陷:一是必須提早運行程序,二是受到計算機硬件和軟件因素影響;
事前分析估算方法的5個取決因素:問題規模;算法策略;程序編寫的語言;編譯產生機器代碼的質量;機器執行指令的速度;
漸進時間複雜度:T(N) = O(F(N))
2種表示形式(對於隨問題規模變化算法的時間複雜度計算):一種是平均算法時間複雜度,另外一種是最壞狀況時間複雜度(通常使用這個)
常見的時間複雜度:
1>常量型:O(1);
2>多項式型:O(n)、O(n2)、...、O(nk)
3>對數型:O(log2n)、O(2log2n)
4>指數型:O(2n)、O(en)
經常使用的時間複雜度比較:
時間複雜度計算:只估算到F(n)的最高項的階,既不考慮低階項,也不考慮常係數。
空間複雜度:算法運行使用存儲空間的描述S(n);
原地工做:算法使用的對輸入數據和程序所佔以外的額外空間爲常數;
基本思想:儘量運用人類的天然思惟方式來創建問題空間的模型,構造儘量直觀、天然的表達方法求解問題的軟件系統;
面向對象=對象+分類+繼承+消息通訊;
對象:現實世界存在的具體事物,能夠是有形物體,也能夠是無形的事物或概念;
對象=數據+動做(方法、操做);
對象的2個內容:屬性和行爲;
對象的3個特徵:一個區別於其餘對象的名字;一組描述它屬性的狀態;一組決定其功能或行爲的操做;
對象3個特性:模塊的獨立性、動態的鏈接性、易維護性;
消息:對象間交互過程所傳遞的通訊信息;
3個性質:同一對象能夠接收不一樣的消息;相同形式的消息能夠發送給不一樣的對象產生不一樣的響應;消息發送時不考慮接收者,接受者能夠響應消息也能夠不響應;
消息序列:向同一個對象發送的多個信息或者一個對象向外發出多個消息;
共有消息:由外界對象向其發送的消息稱爲共有消息;
私有消息:由對象向其自身發送的消息;
3種類型(按功能劃分):返回對象內部狀態的消息;改變對象內部狀態的消息;完成特定操做改變系統狀態的消息;
類:具備相同屬性和系統操做的對象集合的抽象;
實例:類所定義的一個具體對象;
模板:類能夠看作是對象的模板,抽象地描述了屬於該類的所有對象的屬性和操做;
封裝性:將一段代碼「包裝」起來,應用時只知道這段代碼所能完成的功能,而沒必要知道該段代碼的具體實現細節;
3個條件:清楚的邊界+預留的對外接口+良好的內部實現細節隱蔽性
繼承性:子類能夠自動擁有或共享父類的所有屬性和方法;
4個優勢:類間清晰的層次關係;自動的屬性和方法共享,提升代碼的複用性;減小接口,程序更加易於維護;具體功能的擴充,細節的完善;
多態性:同一個名字(函數或運算符)在不一樣場合具備不一樣的意義(重載);同一個界面有多重不一樣的實現(虛函數)。分別對應於編譯時的多態性和運行時的多態性。
面對過程的程序設計:程序=數據結構+算法,數據結構與算法單獨設計
面對對象的程序設計:對象=數據結構+算法,將數據結構和算法封裝到對象內部
早期:LISP語言,Simula67語言,SmallTal語言,逐漸引入面向對象的一些概念
C++,Java等等