資料結構緒論
資料結構基礎:線性資料結構+非線性資料結構
線性資料結構:
線性表(連結串列),棧,佇列,一維陣列,串
非線性資料結構:
二維陣列,多維陣列,廣義表,樹+二叉樹,圖
資料結構應用:查詢+排序
查詢:靜態查詢,動態查詢
排序:內部(針對記憶體)排序(插入類,交換類,歸併累,選擇類),外部排序(硬碟)
資料結構基本概念
- 資料
- 是能輸入計算機且能被計算機處理的各種符號集合
- 資訊的載體
- 是對客觀事物符號化的表示
- 能夠被計算機識別,儲存和加工
- 資料元素
- 資料的基本單位,通常作為一個整體進行考慮和處理
- 資料項
- 一個資料元素可由若干個資料項組成,資料項是資料元素的不可分割的最小單位
- 資料物件
- 具有相同性質的資料元素的集合,是資料的一個子集
- 資料結構
- 相互之間存在一種或者多種特定關係的資料元素的集合
資料結構的三要素:
一、邏輯結構:
從邏輯關係上描述資料,與資料的儲存無關,是從具體問題抽象處理的數學模型(邏輯結構獨立於儲存結構)
集合結構:
各元素同屬於一個結構,別無其他關係
線性結構:
資料元素之間是一對一的關係,有且僅有一個開始和一個終端結點,除了第一個元素,所有的元素都有唯一前驅,除了最後一個元素,所有元素都有唯一後繼(例如:線性表,棧,佇列,串)
樹形結構:
資料元素之間是一對多的關係
圖(網)狀結構:
資料元素之間是多對多的關係
二、資料的運算:
資料上的某些操作,包括(1)查詢(2)插入(3)刪除(4)修改(5)排序
運算的定義是針對邏輯結構的,指出運算的功能
運算的實現是針對儲存結構的,指出運算的具體操作步驟
三、物理結構(儲存結構):
資料元素及其關係在計算機中記憶體中的儲存形式(又稱映像)
順序儲存:
把邏輯上相鄰的元素儲存在物理位置上也相鄰的儲存單元中,即資料元素存放在地址連續的儲存單元裡,例如陣列
鏈式儲存:
把資料元素存放在任意的儲存單元裡,這組儲存單元可以連續也可以不連續,利用結點中的指標來表示資料元素之間的關係
索引儲存:
在儲存元素資訊的同時,還建立附加的索引表。索引表中的每項稱為索引項,索引項的一般形式是(關鍵字,地址 / 指標),類似目錄
雜湊儲存:
根據元素的關鍵字直接計算出該元素的物理(儲存)地址,又稱雜湊(hash)儲存
注意:
- 若採用順序儲存,則各個資料元素在物理上必須是連續的;若採用非順序儲存,則各個資料元素在物理上可以是離散的
- 資料的儲存結構會影響儲存空間分配的方便程度
- 資料的儲存結構會影響對資料運算的速度
資料型別和抽象資料型別
資料型別:是指一組性質相同的值的集合和定義在此集合上的一組操作的總稱
(1) 原子型別
其值不可再分的資料型別,例如:布林型別,整型,實型,字元型等
(2) 結構型別
其值可以再分解為若干成分(分量)的資料型別,例如:結構體
抽象資料型別:是指一個數學模型及定義在該模型上的一組操作(對資料結構邏輯關係的描述),包括三個方面
( 1 ) 由使用者定義:從具體問題抽象出數學模型(邏輯結構)
( 2 ) 資料的運算:定義在此數學模型上的一組抽象操作
( 3 ) 不考慮在計算機內的具體儲存結構與運算的具體實現
抽象資料型別 = 邏輯結構 + 抽象運算
抽象資料型別實質上是一個對求解問題的形式化描述(與計算機無關),程式設計師可以在理解基礎上實現
抽象資料型別定義
資料結構由一個四元組來表示:
Data_Structure = (D,R,L,O)
,資料元素,資料元素之間的邏輯關係,邏輯關係在計算機中的儲存表示,以及所規定的操作這四部分
抽象資料型別 ADT 一般包含資料元素,資料元素之間關係以及操作三要素 (D,R,O)
,其中:
D
是資料元素集
R
是 D
上的關係集合
O
是對 D
的基本操作集(抽象操作)
可以用抽象資料型別定義一個完整的資料結構
ADT 抽象資料型別名 {
//資料物件,資料關係的定義用虛擬碼操作
資料物件:<資料物件的定義>
資料關係:<資料關係的定義>
基本操作:<基本操作的定義>
} ADT 抽象資料型別名
//Circle 圓的定義
ADT Circle {
D = {r,x,y|r,x,y均為實數}
R = {r,x,y|r是半徑,<x,y>為圓心座標}
Circle(&C,r,x,y)
操作結果:構造一個圓
} ADT Circle