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