數據的邏輯結構:
數據的邏輯結構指元素之間的邏輯關系(和現實無關)。
分類一:線性結構和非線性結構
線性結構:有且只有一個開始結點和一個終端結點,並且所有結點都最多只有一個直接前驅和一個直接后繼。
線性表就是一個典型的線性結構,它有四個基本特征:
1.集合中必存在唯一的一個"第一個元素";
2.集合中必存在唯一的一個"最后的元素";
3.除最后元素之外,其它數據元素均有唯一的"直接后繼";
4.除第一個元素之外,其它數據元素均有唯一的"直接前驅"。
生活中的案例:冰糖葫蘆、排隊上地鐵
非線性結構:
相對應於線性結構,非線性結構的邏輯特征是一個結點元素可能對應多個直接前驅和多個直接后繼。
常見的非線性結構有:
樹(二叉樹等),圖(網等)。
樹:一個結點可以對應多個直接后繼,但每個結點只能對應一個直接前驅(一對多)
圖(網):一個結點可以對應多個直接后繼和直接前驅(多對多)
樹:生活案例
單位組織架構、族譜
技術案例:文件系統
圖:生活案例
交通線路圖、地鐵線路圖
分類2:集合結構、線性結構、樹狀結構、網絡結構
邏輯結構有四種基本類型:集合結構、線性結構、樹狀結構和網絡結構。
表和樹是最常用的兩種高效數據結構,許多高效的算法能夠用這兩種數據結構來設計實現。
1.集合結構:
就是數學中所學的集合,集合中的元素有三個特征:
1).確定性(集合中的元素必須是確定的)
2).唯一性(集合中的元素互不相同。例如:集合A={1,a},則a不能等於1)
3).無序性(集合中的元素沒有先后之分。例如:集合{3,4,5}和{3,5,4}算作同一個集合)
該結構的數據元素之間的關系是"屬於同一個集合",此外無其他關系。
因為集合中元素關系很弱,數據結構中不對該結構進行研究。
2.線性結構:
數據結構中線性結構指的是數據元素之間存在着"一對一"的線性關系的數據結構。
3.樹狀結構:
除了一個數據元素(元素01)以外每個數據元素有且僅有一個直接前驅元素,但是可以有多個直接后繼元素。
特點是數據元素之間是1對多的聯系
4.網絡結構:
每個數據元素可以有多個直接前驅元素,也可以有多個直接后繼元素。特點是數據元素之間是多對多的聯系
舉例說明:
一個班的學生是什么邏輯結構?
答:一個班的學生是一個集合
排隊做某項事情時就是線性結構
學生會成員上下級關系就是樹狀結構
同學之間的座位關系就是網狀結構
數據的存儲結構
數據的存儲結構主要包括數據元素本身的存儲以及數據元素之間關系表示,是數據的邏輯結構在計算機中的表示
常見的存儲結構有順序存儲,鏈式存儲,索引存儲,以及散列存儲
1.順序存儲結構:
把邏輯上相鄰的節點存儲在物理位置上相鄰的存儲單元中,結點之間的邏輯關系由存儲單元的鄰接關系來體現
由此得到的存儲結構為順序存儲結構,通常順序存儲結構是借助於計算機程序設計語言(例如C/C++)的數組來描述的。
數據元素的存儲對應於一塊連續的存儲空間,數據元素之間的前驅和后繼關系通過數據元素在存儲器中的相對位置來反映。
優點:
1.節省存儲空間,因為分配給數據的存儲單元全用來存放結點的數據(不考慮C/C++語言中數組需要指定大小的情況),結點之間的邏輯沒有占用額外的存儲空間。
2.采用這種方法時,可以實現對節點的隨機存取,即每一個節點對應一個序號,由該序號直接計算出來節點的存儲地址。
缺點:
1.插入和刪除操作需要移動元素,效率較低。
2.必須提前分配固定數量的空間,如果存儲元素少,可能導致空間的浪費。
2.鏈式存儲結構:
數據元素的存儲對應的是不連續的存儲空間,每個存儲節點對應一個需要存儲的數據元素
1.每個結點是由數據域和指針域組成。元素之間的邏輯關系通過存儲結點之間的鏈接關系反映出來。
(每個結點中需要存儲本結點的數據和下一個結點數據的指針/地址)
2.邏輯上相鄰的結點物理上不必相鄰
缺點:
1.比順序存儲結構的存儲密度小(每個結點都由數據域和指針域組成,所以相同空間內假設全存滿的話順序比鏈式存儲更多)。
2.查找結點時鏈式存儲要比順序存儲慢。
優點:
1.插入、刪除靈活(不必移動結點、只要改變結點中的指針)。
2.有元素才會分配結點空間,不會有閑置的結點。
3.索引存儲結構:
除建立存儲結點信息外,還建立附加的索引表來標識結點的地址。
比如圖書、字典的目錄。
4. 散列存儲結構:
根據每個結點的關鍵字直接計算出該結點的存儲地址HashSet、HashMap
一種神奇的結構,添加、查詢速度快。就像數組中按索引查找。
注意:
同一種邏輯結構可以對應多種存儲結構
同樣的運算,在不同的存儲結構中,其實現過程是不同的(運算依賴於存儲結構)