數據結構小白入門
數據結構指一組相互之間存在一種或多種特定關系的數據元素的集合,
當我們需要在計算機中存儲這些數據時,還涉及到數據的,組織方式,在計算機中的存儲方式,以及定義在該數據上的一組操作;
- 一組數據相互之間有某種關系
- 組織方式
- 存儲方式
- 以及可對其進行的一組操作
理解:
我們學習的最終目的是要在計算機中存儲一組數據,但是不得不先考慮數據的組織方式,在計算機中的存儲方式,以及可以對這些數據進行的一組操作,當然了既然是一組數據必然表明了這寫數據之間是存在想換的關聯關系的;關系可能還會有多種;
例如:
一組數據:12345
組織方式:從小到大
存儲方式:可使用線性存儲結構
操作:要取出最大的一個
數據結構研究方向
問題:
- 機外處理
- 處理要求
建模:
- 邏輯結構
- 基本運算
實現:
- 存儲結構
- 算法
基本術語
數據(Data):
所有能被計算機處理的符號的集合
數據元素(DataElement):
是數據集合中的一個 個體,即數據的基本單位
數據項(DataItem):
數據元素常常可分為若干個數據項,數據項是數據具有意義的最小單位
組織數據的三個層次:
數據(表)->數據元素(行)->數據項(字段)
實際問題中的數據成為原始數據
邏輯結構(LogicalStructure)
數據元素之間的結構關系,如從小到大/一對一/一對多
物理結構(PhysicalStructure)
也會叫做存儲結構,指數據在計算機內的表示,邏輯結構在計算機中的具體實現
邏輯結構
常見的邏輯結構如下:
集合:
數據元素屬於同一個集合,表示為R{}; 數據之間不存在特定關系
組織結構松散,任意兩節點之間都沒有鄰接關系
線性:
除了起始節點d1和終端階段dn外,每個節點都有一個前驅和一個后繼,表示為R={d1,d2...dn},數據之間存在前后順序關系
各節點按邏輯關系排列,形成一條'鏈'
樹狀:
每個元素最多有一個前驅,可以有多個后繼,表示為(D,{R}),就像一個樹干長了多個樹枝
具備分支,層次特性,上層節點可以和下層多個節點相鄰接,但是下層節點只能和一個上層節點鄰接
圖狀:
任何兩個元素之間都可以相鄰接,表示為(D,{R})
注意:
邏輯結構
-
與元素本身的形式,內容,無關
-
元素的相對位置,無關
-
與包含的節點個數,無關
存儲結構
存儲結構由 存儲節點(每個存儲節點存放一個數據元素)
和 節點之間的邏輯關系
共同組成
反過來說,一個完整的存儲結構必須可以存儲數據元素
,以及元素之間的邏輯關系
存儲結構分類分為四種:(缺圖)
順序存儲
使用索引(相對起始位置)來表示數據的邏輯結構,數據被存儲在一組連續的存儲單元中
特點:
- 需預先分配長度,
- 插入和刪除慢,需要移動其他元素
- 存取數據快捷,屬於隨機存儲結構(可通過索引直接訪問任意位置數據)
鏈式存儲
借助元素地址指針表示數據的邏輯結構,每個元素都會包含指向下一個元素的指針
這種結構需要在節點上附加一個指針項,指出后繼節點的位置,即每個節點存儲單元包含兩個部分:[數據項,指針項]
特點:
- 動態分配內容,不需要預先分配內存
- 插入刪除快捷,不需要移動其他元素
- 非隨機存取結構(獲取數據必須遍歷前面的所有節點)
索引存儲(Map是否屬於索引結構 很疑惑?)
借助索引表來指示數據元素的存儲位置
索引表中包含了所有數據元素的地址,查詢索引表能夠快速的定位到需要的數據
特點:
- 索引是一份獨立於實際存放數據,的數據結構(就像書的目錄都在正文前面)
- 索引需要占用額外的存儲空間
- 當實際數據發生改變時需要重建索引
- 查詢數據快
- 插入修改,刪除慢
散列存儲(哈希表)
通過散列函數計算得出元素的位置
特點:
- 在散列函數不變時,相同數據會得出相同的位置
- 存入順序和取出順序通常不一致
- 無法完成隨機存取(指定獲取某個元素)
順序和鏈式是最基本的也是最常用的存儲結構,需要重點掌握,包括各自的優缺點,使用場景等
鏈式存儲結構可實現樹結構(邏輯結構)
運算
運算指的是某種邏輯結構上可以進行的操作;
運算分為兩類:
-
加工型運算
會改變原邏輯結構的內容,順序,個數等的操作
-
引用型運行
與加工型運算相反
常見運算:
建立,查找,讀取,插入,刪除
其中:
加工型:建立,插入,刪除 引用型:讀取,查找