資料結構:是相互之間存在一種或多種特定關係的資料元素的集合
資料:描述客觀事物的符號,能被計算機識別並操作的物件,能輸入到計算機中進行處理的符號集合
資料元素:組成資料的基本單位,通常作為整體處理,也稱為記錄(著眼點)
資料項:乙個資料元素可以由若干個資料項組成(最小單位,不能再分割)
資料物件:性質相同(即相同數量和型別的資料項)的資料元素的集合,是資料的子集
建模:建立模型,為了理解事物而對事物做出的一種抽象,是對事物的一種無歧義的書面描述
邏輯結構:指資料物件中資料元素之間的相互關係,針對具體問題來選擇合適的資料結構表示資料元素之間的邏輯關係,有以下幾種:
儲存結構(物理結構):資料的邏輯結構在計算機中的儲存形式,有兩種形式:
鏈式儲存結構:通過指標存放在任意的儲存單元裡,可以連續或不連續,更為靈活
資料型別:一組性質相同的值的集合及定義在這集合上的一些操作的總稱,以c為例,分兩類:
抽象:抽取出事物具有的普遍性的本質(隱藏了繁雜的細節,只保留實現目標所必須的資訊)
抽象資料型別(adt):指乙個數學模型及定義在該模型上的一組操作(取決於它的一組邏輯特性);乙個抽象資料型別定義了:乙個資料物件、資料物件中各資料元素之間的關係及對資料元素的操作,它體現了程式設計中問題分解、抽象和資訊隱藏的特性
演算法:解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,每條指令表示乙個或多個操作
好演算法例子:實現n的累加 sum=(1 + n) * n / 2
基本特性:
演算法設計應遵循:
演算法效率的度量方法:
事前分析估算法:依據統計方法對演算法進行估算,即f(x)=y
, 依賴於演算法好壞(f)和問題輸入規模(x)
函式的漸進增長:給定兩個函式f(n)和g(n),如果存在乙個整數n,使得對於所有的n > n,f(n)總是比g(n)大,那麼我們說f(n)的漸進增長快於g(n)
判斷乙個演算法的效率時,函式中的常數和次要項可以忽略,關注點是主項(最高端項)的階數
演算法時間複雜度:即演算法的時間量度,表示式為t(n)=o(f(n))
,隨著問題規模n的擴大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的漸進時間複雜度(簡稱時間複雜度),o()
為大o記法推導大o階方法:用 1取代所有常數;只保留最高階項;去除與這個項相乘的常數(若存在最高端且不是1)
常見時間複雜度:
由小到大比較:o(1) < o(logn) < o(n) < o(nlogn) < o(n²) < o(n³) < o(2^n) < o(n!) < o(n^n)
演算法空間複雜度:表示式為s(n)=o(f(n))
, f(n)是關於 n所佔儲存空間的函式;若所需的輔助空間對於輸入資料量而言是個常數,則稱此為原地工作,空間複雜度為o(1)
資料結構與演算法 認識遞迴
淺識 1 遞迴與迴圈 理論上,任何迴圈都可以重寫為遞迴形式 有些語言沒有迴圈語句,只能使用遞迴。2 迴圈改遞迴 1 發現邏輯 相似性 2 一定要有 出口 不然就會死迴圈 3 構造相似性 如果沒有明顯的相似性,可能是缺少引數,需要主動構造,與遞推類似 4 遞迴呼叫 1 遞迴呼叫僅僅是被調函式正好是主調...
資料結構1 認識資料結構與演算法
程式 文件 軟體 演算法 資料結構 程式 資料結構與演算法的理論基礎離散數學中的圖論 集合論和關係論等。資料結構課程的內容 於圖論 作業系統 編譯系統 編碼理論及檢索與排序技術等。非數值型程式設計 中資料的 組織方式及其處理 的演算法資料結構的三個方面 邏輯結是式資料的組織形式,與機器無關。4種基本...
資料結構與演算法基本
棧的演算法 計算機內部空間是連續儲存的,但是可以通過邏輯上改變記憶體的物理結構,資料在記憶體上呈現出的是連續分布狀態 主要的典型資料結構 在實現棧這種資料結構時,首先要定義乙個陣列和乙個變數。陣列中所包含的元素個數就是棧的大小 棧中最多能存放多少個資料 變數中則儲存著乙個索引,指向儲存在棧中最頂端的...