資料結構的起源
計算機從解決數值計算問題到解決生活中的問題
現實生活中的問題涉及不同個體間的複雜關係
需要在電腦程式中描述生活中個體間的聯絡
資料結構主要研究非數值計算程式問題中的操作物件以及它們之間的關係
不是研究複雜的演算法
資料結構中的基本概念
資料—程式的操作物件,用於描述客觀事物
資料的特點:
可以輸入到計算機
可以被電腦程式處理
資料是乙個抽象的概念,將其進行分類後得到程式語言中的型別。如:int,float……
資料元素:組成資料的基本單位
資料項:乙個資料元素由若干資料項組成
資料物件 – 性質相同的資料元素的集合 (比如:陣列,鍊錶)
資料元素之間不是獨立的,存在特定的關係,這些關係即結構
資料結構指資料物件中資料元素之間的關係
資料結構:研究關係
節點和節點之間的關係(陣列、鍊錶、樹、圖)
資料的邏輯結構
指資料元素之間的邏輯關係。即從邏輯關係上描述資料,它與資料的儲存無關,是獨立於計算機的。邏輯結構可細分為4類:
(集合)----資料元素間除「同屬於乙個集合」外,無其它關係
線性結構----乙個對乙個,如線性表、棧、佇列
樹形結構----乙個對多個,如樹
圖狀結構----多個對多個,如圖
資料的物理結構
物理結構亦稱儲存結構,是資料的邏輯結構在計算機儲存器內的表示(或映像)。它依賴於計算機
儲存結構可分為4大類:順序、鏈式、索引、雜湊
最常用的儲存結構為:
順序儲存結構----借助元素在儲存器中的相對位置來表示資料元素間的邏輯關係
鏈式儲存結構----借助指示元素儲存位址的指標表示資料元素間的邏輯關係
資料的邏輯結構與儲存結構密切相關
演算法設計à邏輯結構
演算法實現à儲存結構
資料的運算
在資料的邏輯結構上定義的操作,它在資料儲存結構上實現
最常見的資料運算有5種:
插入、刪除、修改、查詢、排序
演算法概念
演算法是特定問題求解步驟的描述
在計算機中表現為指令的有限序列
演算法是獨立存在的一種解決問題的方法和思想
對於演算法而言,語言並不重要,重要的是思想
演算法和資料結構區別
資料結構只是靜態的描述了資料元素之間的關係
高效的程式需要在資料結構的基礎上設計和選擇演算法
程式=資料結構+演算法
總結:演算法是為了解決實際問題而設計的
資料結構是演算法需要處理的問題載體
資料結構與演算法相輔相成
演算法特性
輸入:演算法具有0個或多個輸入
輸出:演算法至少有1個或多個輸出
有窮性:演算法在有限的步驟之後會自動結束而不會無限迴圈
確定性:演算法中的每一步都有確定的含義,不會出現二義性
可行性:演算法的每一步都是可行的
演算法效率的度量
事後統計法
比較不同演算法對同一組輸入資料的執行處理時間
缺陷為了獲得不同演算法的執行時間必須編寫相應程式
執行時間嚴重依賴硬體以及執行時間的環境因素
演算法的測試資料的選取相當困難
事後統計法雖然直觀,但是實施困難且缺陷多
事前分析估算
依據統計的方法對演算法效率進行估算
影響演算法效率的主要因素
演算法採用的策略和方法
問題的輸入規模
編譯器所產生的**
計算機執行速度
判斷乙個演算法的效率時,往往只需要關注運算元量的最高次項,其它次要項和常數項可以忽略。
在沒有特殊說明時,我們所分析的演算法的時間複雜度都是指最壞時間複雜度。
大o表示法
演算法效率嚴重依賴於操作(operation)數量
在判斷時首先關注運算元量的最高次項
運算元量的估算可以作為時間複雜度的估算
o(5) = o(1)
o(2n+1) = o(2n) = o(n)
o(n2+n+1) = o(n2)
o(3n3+1) = o(3n3) = o(n3)
常見時間複雜度
執行次數函式
階非正式術語
o(1)
常數階2n+3
o(n)
線性階3n2+2n+1
o(n2)
平方階5log2n + 20
o(logn)
對數階2n+3nlog2n+19
o(nlogn)
nlogn階
6n3+2n2+3n+4
o(n3)
立方階2n
o(2n)
指數階一般的關係:
o(1)< o(logn)< o(n)< o(nlogn)< o(n2)< o(n3)< o(2n)n)
1//此次**在codeblocks 17.12 下成功執行
2 #include 3
4using
namespace
std;5//
時間換空間6/*
7問題:
8在乙個由自然數1-1000中某些數字所組成的陣列中,每個數字可能出現零次
9或者多次。設計乙個演算法,找出出現次數最多的數字
10*/
1112
void search(int *a, int
len);
1314
intmain()15;
17 search(ary,sizeof(ary)/sizeof(*ary));
18return0;
19}2021
void search(int *a, int
len)22;
24int i = 0;25
int max = 0;26
27//
將陣列中的值減1賦給另外乙個陣列的索引即下標
28for(i=0; i)
2933
34//
在新的陣列空間內找出最大的次數
35for(i=0; i<1000; i++)
3641}42
43//
輸出出現最多次數的數字
44for(i=0; i<1000; i++)
4551
}52 }
資料結構 01
輸入一顆二元樹,從上往下按層列印樹的每個結點,同一層中按照從左往右的順序列印。例如輸入 演算法流程 個人演算法思想 定義乙個佇列 queue 1.根節點先入佇列 2.拿出佇列中第乙個元素尋找其左右孩子 3.如果有入隊,再拿下乙個,直到拿完第乙個孩子入隊之前的所有元素,並以此進行迴圈直至佇列中元素為空...
資料結構 學習筆記01
第一章 概 論 1.資料 資訊的載體,能被計算機識別 儲存和加工處理。2.資料元素 資料的基本單位,可由若干個資料項組成,資料項是具有獨立含義的最小標識單位。3.資料結構 資料之間的相互關係,即資料的組織形式。它包括 1 資料的邏輯結構,從邏輯關係上描述資料,與資料儲存無關,獨立於計算機 2 資料的...
資料結構 01 資料與資料結構
1.資料data 資料是描述客觀事物的符號,是計算機中可以操作的物件,是能被計算機識別,並輸入給計算機處理的符號集合。2.資料元素data elements 資料元素是組成資料的 有一定意義的基本單位,在計算機中通常作為整體進行處理。3.資料物件data object 資料物件是性質相同的資料元素的...