資料結構第一章 緒論
技術標籤:資料結構
第一章 緒論
1.1 什麼是資料結構
Nicklaus教授提出:
程式=演算法+資料結構
1.1.1 資料結構定義
資料元素data element:資料的基本單位,也稱結點(node)或記錄(record)
資料項data item:具有獨立含義的資料的最小單位,也稱域
資料物件:性質相同的有限個數據元素的集合,資料的一個子集
資料結構Data Structure:相互之間存在一種或者多種特定關係的資料元素的集合
定義2: 2+1(兩個層次和一個操作)
邏輯結構:4種
儲存結構(物理結構):4種
操作(運算,行為)
1.1.2邏輯結構
劃分方法一
線性結構:線性表、棧、佇列、串
非線性結構:樹、圖
劃分方法二
集合:同一個集合,沒有其他關係
線性結構1:1
樹形結構 1:m
圖形結構n:m
反應資料元素之間的邏輯關係,獨立於計算機
前驅結點 後繼結點 開始結點 終端結點
1.1.3儲存結構
順序儲存結構(陣列):邏輯結構到儲存結構的直接對映,連續
鏈式儲存結構(指標):
- 一個邏輯元素用一個結點儲存
- 可以連續也可以不連續
- 通過指標域來反映資料元素的邏輯地址
索引儲存結構:建立索引表
雜湊儲存結構:根據關鍵字通過雜湊函式直接計算出值
1.1.4資料的運算
增刪改查–插入、刪除、修改、查詢、排序
1.1.5資料結構與資料型別
C語言中:
基本資料型別:char、int、float、double、void
構造資料型別:陣列、結構體、共用體、檔案
資料型別:一組性質相同的值的集合和定義再次幾何上的一組操作的總稱
**抽象資料型別ADT(Abstract Data Type)**也稱增廣資料型別:邏輯結構+抽象運算
包括:資料物件、資料關係和基本運算
特徵:資料抽象和資料封裝(類實現)
表示:(D、S、P)三元組
D–資料物件 S是D上的關係集 P是D中資料來源算的基本運算集
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-z635wvmy-1613202420035)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\1613139065644.png)]
1.2演算法和演算法分析
1.2.1定義:
有窮的指令集,這些指令為解決某一特定任務規定了一個運算序列。(描述集、指令集、序列集)
特徵5個
輸入性 有0個或多個輸入
輸出性 至少一個以上輸出
有窮性 執行有窮步後結束
確定性 每步定義都是確切、無歧義的
可行性(有效性)
演算法的評價(設計的目標):
正確性
可讀性 易讀
健壯性 魯棒性
高效性(時間代價和空間代價)
1.2.2演算法效率的度量(評價演算法優劣標準)
時間複雜度(重要)
事前統計:
- 依據演算法選用何種策略
- 問題規模
- 程式語言
- 編譯程式產生機器程式碼質量
- 機器執行指令速度
事後統計:利用計算機內的計時功能(一般不用)
時間複雜度漸進表示法
大O法:T(n)=O(n) 隨問題規模n變大,演算法執行時間增長率和f(n)的增長率相同
語句頻度法:計算該語句重複次數
空間複雜度
三個組成部分
儲存演算法本身所佔用的空間
演算法的輸入/輸出資料佔用的空間
演算法在執行過程中臨時佔用的輔助空間
第一章總結
重點 1:基本術語:資料結構
重點 2:抽象資料型別
重點 3:演算法優劣的評價標準 (時間複雜度)
重點 4:資料結構的學習方法
常見增長率 | 增長率 | |
---|---|---|
O(1) | 常量階,與 n 無關 | 慢 |
O(log n) | log n 階 | | |
O(n) | 常數階 | | |
O(n log n) | n log n 階 | | |
O(n²) | 平方階 | | |
O(n³ ) 立方階 | 立方階 | ↓ |
O(2ⁿ ) | 指數階 | 快 |
補充:
1.3C++中描述演算法的相關內容(重要)
new運算子:為一個指標變數分配一片連續的空間
delete運算子:釋放new分配的空間
char *p;
p=new char[10];//動態分配10個連續的空間,並將該空間的首地址賦值給p
strcpy(p,"China");//將“China”存放到p指向的空間
cout<<*p<<endl;//輸出p的首地址字元‘C’
cout<<p<<endl;//輸出整個字元
delete[]p;
C++中的結構體型別
結構體:一組被稱為結構體成員或者資料域的資料項組成。
struct teacher //教師結構體型別名為teacher
{ int no;
char name[8];
int age;
};
//定義一個結構體變數t
teacher t;
//定義結構體變數並初始化
teather t1={1,“王強”,35};
//引用成員
t1.no
C++中的共同體型別
共同體:不同的成員組織為一個整體,他們在記憶體中共享一段儲存單元
union tag{
short int n;
char[2];
};
//定義一個共同體變數u
union tag u;
//引用n成員
u.n;
//引用ch成員
u.ch[0];
C++中類的設計
類的定義格式和類物件的宣告
//類的宣告
class 類名
{
private:
私有資料成員和成員函式;
protected:
保護資料成員和成員函式;
public:
公有函式成員和成員函式;
}
//類的實現
各個成員函式的實現
建構函式
建構函式的名字與類名相同;一定具有public訪問許可權;沒有任何型別。不屬於返回值函式也不屬於void函式;類可以有多個建構函式,此時它們的引數各不相同
解構函式
物件是類的例項,類的變數;解構函式在類物件銷燬時自動執行;一定具有public訪問許可權;一個類只能有一個解構函式,且解構函式沒有引數;沒有任何型別;不屬於返回值函式也不屬於void函式
說明:資料結構中,通常用建構函式實現資料結構的初始化操作。解構函式用於實現資料結構的銷燬操作
成員函式的引數傳遞
值引數 | 引用引數 |
---|---|
不含任何修飾符 | “&” |
單向傳遞 | 雙向傳遞 |
不會修改原來的實參的值 | 和實參共享相同的儲存空間,修改會改變原來的值 |
不含任何修飾符 | “&” |
單向傳遞 | 雙向傳遞 |
不會修改原來的實參的值 | 和實參共享相同的儲存空間,修改會改變原來的值 |