數據結構基本概念算法
1 數據:數據是用來描述現實世界的數字、字符、圖像、聲音,以及可以輸入到計算機中並能被計算機處理的符號集合數據結構
2 數據元素:數據元素是數據的基本單位,在計算機中一般做爲一個總體進行考慮和處理,一般也稱爲「元素」、「記錄」、「節點」等函數
3 數據對象:數據對象是具備相同性質的數據元素的集合,是數據的一個子集spa
4 數據結構:在實際問題中,數據元素不是孤立存在的,而是在相互之間存在一種或多種特定的關係,這種數據元素相互間的關係稱爲「數據結構「.net
注:我以爲應該重點理解」數據元素「和」數據結構「指針
數據元素舉例:在學生信息表中,可能含有姓名、學號、性別等字段(屬性),每一個學生的信息能夠稱爲一條記錄,也就是一個數據元素,而且通常做爲總體處理對象
數據結構:包含數據邏輯結構和數據存儲結構兩方面的描述索引
1、數據的邏輯結構ip
1 集合結構 : 集合結構的數據元素除了同屬於一個集合外,他們之間沒有任何聯繫.get
2 線性結構 : 數據元素存在」一對一」的關係
3 樹形結構 : 數據元素存在」一對多」的關係
4 圖形結構 : 數據元素存在」多對多」的關係
2、數據的存儲結構
數據的存儲結構就是數據元素及其相互關係的存儲方式。要想用計算機處理數據,就必須把數據的邏輯結構映射爲數據的存儲結構。
按照數據的存儲結構,通常將數據結構分爲順序存儲結構、鏈式存儲結構、索引存儲結構和散列存儲結構。
1 順序存儲結構 : 主要特色是邏輯上相鄰的數據元素在物理位置上也是相鄰的。
2 鏈式存儲結構 : 藉助指針表達數據元素之間的邏輯關係。
3 索引存儲結構 : 在存儲數據元素的同時,還創建附加的索引表。經過索引表,能夠快速的找到存儲數據元素的節點。
4 散列數據結構 : 根據散列函數和處理衝突的方法肯定數據元素的存儲位置
說明:
數據的邏輯結構和數據的存儲結構是指一個事物的兩個方面,而不是兩個事物。一種邏輯結構能夠映射爲多種存儲結構,而一種存儲結構也能夠對應多種邏輯結構。
抽象數據類型:數據類型名稱、數據對象、數據關係及其基本操做科學完整的描述
通常形式以下:
ADT <抽象數據類型名> {
數據對象:<數據對象的定義>
數據關係:<數據關係的定義>
基本操做:<基本操做的定義>
} ADT <抽象數據類型名> ;
「線性表」抽象數據類型的定義
ADT List {
數據對象:D={ai|aiElemSet, i=1,2,3…,n, n>=0}
數據關係:R={<ai-1,ai>|ai-1,ai D, i=2,3,… n }
基本操做:
InitList(*L):創建一個空的線性表
ListEmpty(L):斷定線性表是否爲空。若爲空,則返回True
ListLength(L):獲取線性表中數據元素的個數
TraverseList(L):遍歷線性表中數據元素
ListInsert(*L, i, e):將數據元素插入到線性表中第i個位置處,線性表長度加1
ListDelete(*L, i, *e):刪除線性表中第i個位置的數據元素,並存放到e中,線性表長度減1
Find(L, e):查找數據元素e所在位置
GetElem(L, i, *e):從線性表中獲取第i個位置處的數據元素,並存放到e中
GetPrior(L, x, *pre_e):在線性表中獲取數據元素x的前一個數據元素的值,並存放到pre_e中
GetNext(L, x, *next_e):在線性表中獲取數據元素x的後一個數據元素的值,並存放到next_e中
ClearList(*L):將線性表置空
} ADT List;
算法特徵
定義:算法是對特定問題求解步驟的一種描述,它是指令的有限序列。
算法的5個重要特徵:
(1) 可行性
(2) 有窮性:算法的有窮性是算法和程序的分界點。
(3) 肯定性
(4) 有輸入
(5) 有輸出
算法的度量及分析
(1) 時間效率:時間複雜度 (time complexity)---算法開始運行到結束所需時間(假設執行每條語句的時間均爲單位時間)
(2) 空間效率:空間複雜度 (space complexity)---算法所需存儲空間的量度
*時間複雜度的分析
示例:T(n)=O(n2)
T(n)用來表示時間複雜度,O(n2)表示具體的時間複雜度爲n2 ;
常見時間複雜度:
(1)常量階:O(1)
(2)線性階:O(n)
(3)平方階和立方階:O(n2)和O(n3)
(4)對數階:一般以2爲底—O(log2n)
(5)其餘:指數階—O(2n), 階乘階—O(n!)
經常使用時間複雜度所耗費的時間從小到大依次爲:
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)