-
什么是邏輯結構?
簡單說,邏輯結構就是數據之間的關系。而按數據之間的關系來說,邏輯結構大概可以分為兩種:線性結構和非線性結構(集合、樹、網)。
- 線性結構:有且只有一個開始結點和一個終端結點,並且所有結點都最多只有一個直接前驅和一個直接后繼。例如:線性表,典型的線性表有:順序表、鏈表、棧(順序棧、鏈棧)和隊列(順序隊列、鏈隊列)。它們共同的特點就是數據之間的線性關系,除了頭結點和尾結點之外,每個結點都有唯一的前驅和唯一的后繼,也就是所謂的一對一的關系。
- 非線性結構:對應於線性結構,非線性結構也就是每個結點可以有不止一個直接前驅和直接后繼。常見的非線性結構包括:樹(二叉樹)、圖(網)等。
-
什么是存儲結構?
邏輯結構指的是數據間的關系,而存儲結構是邏輯結構的存儲映像。通俗的講,可以將存儲結構理解為邏輯結構用計算機語言的實現。常見的存儲結構有順序存儲、鏈式存儲、索引存儲以及散列存儲(哈希表)。
-
順序存儲:把邏輯上相鄰的節點存儲在物理位置上相鄰的存儲單元中,結點之間的邏輯關系由存儲單元的鄰接關系來體現。由此得到的存儲結構為順序存儲結構,通常順序存儲結構是借助於數組來描述的。優點:節省空間,可以實現隨機存取;缺點:插入、刪除時需要移動元素,效率低。
-
鏈式存儲:在計算機中用一組任意的存儲單元存儲線性表的數據元素(這組存儲單元可以是連續的,也可以是不連續的)。特點是元素在物理上可以不相鄰,所以每個數據元素包括了一個數據域和一個指針域,數據域用來存放數據,而指針域用來指向其后繼結點的位置。優點:插入、刪除靈活;缺點:不能隨機存取,查找速度慢。
-
-
邏輯結構和存儲結構的區別
這兩者並不沖突,一個指的是數據之間的關系,而另一個指這種關系在計算機中的表現形式。比如,線性表中的棧,數據元素之間的關系是一對一的,除頭和尾結點之外的每個結點都有唯一的前驅和唯一的后繼,這體現的是邏輯結構;而對於棧中的結點來說,它們可以順序存儲(也就是順序棧),取一段連續的存儲空間,將棧結點按順序存入,每個結點和其前驅和后繼在物理上都是相鄰的。同時,棧結點也可以鏈式存儲(鏈棧),每個結點中包括數據域和指針域,而指針域就是用來指向其后繼的,在訪問時就可以通過指針來找到其后繼進行訪問,每個結點之間物理上可以相鄰也可以不相鄰。
另外的總結
不同的線性表之間的區別:
線性表在元素的關系上是一樣的,都是“線性“關系,不同的線性表區別主要體現在不同的特性上。比如:隊列的先進先出、棧的后進先出等。
以存儲結構相同、邏輯結構又同為線性表的鏈棧和鏈隊列為例,它們都是鏈式存儲的,每個結點都是由數據域和指針域組成,每個結點也都有唯一的前驅和唯一的后繼(除頭尾結點外)。那么它們看起來就很相似,區別呢?區別就在於給他們定義的特殊操作,它們都有”出“和”入“兩種操作,一個是“先進先出”,而一個是“后進先出”。