數據結構筆記(持續更新中)
第一章 緒論
數據結構基本概念
- 基本概念和術語
數據 :信息的載體,描述客觀事物屬性的數,字符及所有能輸入到計算機中並被計算機程序識別和處理的符號的集合。
數據對象:具有相同性質的數據元素的集合,是數據的一個子集。
數據元素:數據的基本單位,通常做爲一個整體進行考慮和處理。
數據項:構成數據元素的不可分割的最小單位。
數據類型(集合+操作) |
---|
原子類型 ------------ 結構類型 ------------- 抽象數據類型ADT |
值的集合+操作 -------- 結構的集合+操作 ---------- 數據對象+數據關係+操作 |
數據不是孤立存在的,他們之間存在着某種關係,這種相互關係我們叫結構。
數據結構:相互存在一種多多種特定關係的數據元素的集合。
2. 數據結構三要素*
邏輯結構
邏輯結構是指數據元素之間的邏輯關係,即從邏輯關係上描述數據。
- 集合結構中的數據元素之間除了 “同屬於一個集合”的關係外,別無其他關係。
- 圖狀結構或網狀結構結構中的數據元素之間存在多對多的關係。
- 線性結構結構中的數據元素之間只存在一對一的關係。
- 樹形結構結構中的數據元素之間存在一對多的關係。
物理結構
存儲結構(順序存儲、鏈式存儲、索引存儲、散列存儲)
數據運算
運算包括運算的定義和實現,運算的定義針對邏輯結構,運算實現針對存儲結構
算法和算法評價
- 算法基本概念
算法:對特定問題求解步驟的一種描述,它是指令的有限序列,其中每條指令表示一個或多個操作。
五大特性:確定性、有窮性、可行性、輸入、輸出
算法與程序:
算法是解決問題的過程
程序是某種程序設計語言對算法的具體體現
區別:
算法必須有窮,程序可以無窮
算法必須正確,程序可以錯誤
算法可以用僞代碼,程序語言描述,程序只能用編程語言編寫並編譯運行 - 算法效率度量
“好”算法:正確、可讀、健壯、效率與儲存量
時間複雜度
語句頻度:語句可重複執行次數
T(n):所有語句之和,n爲問題的規模
int sum = 0;
for (int i = 1;i <= n;i++)
sum += i;
//語句頻度是n
//T(n) = 1 + n
//O(f(n)) = 1
時間複雜度T(n) = O(f(n)) O表示T(n)與f(n)在n->正無窮時爲同階無窮大
最壞時間複雜度(實際意義)、最好時間複雜度、平均時間複雜度、
基本運算頻度來分析算法時間複雜度
空間複雜度
算法消耗的存儲空間,記S(n) = O(g(n))
除本身所用的指令、常數、變量和輸入數據外,還需要一些對數據進行操作的工作單元和存儲爲實現算法所需一些信息的輔助空間。
算法原地工作時算法所需的輔助空間爲常量,O(1)
第二章 線性表
線性表的定義和基本操作
線性表的定義
線性表是具有相同類型的n(n>0)個元素的有限序列,其中n爲表長,當n=0時,該表爲空表。
L命名爲線性表,一般表示爲:L = (a1,a2,…,ai,ai+1,…,an)
特點:
- 表中數據個數有限
- 邏輯上的順序性,在序列中的各個元素排序有其先後次序
- 表中元素都是數據元素,每個元素都是單個元素
- 表中元素的數據類型相同,這意味着每一個佔相同的儲存空間
- 表中元素具有抽象性,即討論的元素間一對一的邏輯關係,而不考慮元素究竟表示的內容
- 邏輯結構,表示元素間一對一相鄰
線性表的九種基本操作
- InitList(&L) 初始化表,構造空表
- DestroyList(&L) 銷燬操作,銷燬線性表,釋放空間
- LocateElem(L,e) 按值查找,在表L查找具有給定關鍵字的元素
- GetElem(L,i) 按位查找,獲取表L中的第i個位置的元素值(i在表長範圍內)
- ListInsert(&L,i,e) 插入操作,在第i個元素之前插入指定元素
- ListDelete(&L,i,&e) 刪除操作,刪除表中第i個位置的元素,並用e返回刪除元素的值
- PrintList(L) 輸出操作,按前後順序輸出L所有元素的值
- Empty(L) 判空,爲空返回TRUE,否則返回FALSE
- Length(L) 求表長,返回L元素個數