1. 程式人生 > 其它 >資料結構第一章 緒論

資料結構第一章 緒論

技術標籤:資料結構

第一章 緒論

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函式

說明:資料結構中,通常用建構函式實現資料結構的初始化操作。解構函式用於實現資料結構的銷燬操作

成員函式的引數傳遞
值引數引用引數
不含任何修飾符“&”
單向傳遞雙向傳遞
不會修改原來的實參的值和實參共享相同的儲存空間,修改會改變原來的值
不含任何修飾符“&”
單向傳遞雙向傳遞
不會修改原來的實參的值和實參共享相同的儲存空間,修改會改變原來的值