数据结构考研:线性表,顺序表,有序表,链表,数组的概念的区别与联系(软件工程/计算机/王道论坛)
一、問題背景
不管是計算機專業的考研初試還是工作面試,數據結構都是很重要的課程。而博主最近看的王道論壇2020的數據結構開篇就有按照邏輯結構和存儲結構將各種數據結構進行分類,本文就結合所有知識點充分講解各個數據結構之間的區別與聯系。
二、相似概念的線性表區分
在數據結構考試題目中我們總是要區分這三個概念:線性表、順序表、有序表、鏈表,甚至還有線性表的其他概念。
下圖便是博主在結合王道論壇數據結構書本上以及網絡上的相關線性表的概念做出的思維導圖。
1.線性表
線性表是具有相同特性的數據元素的一個有限序列。線性表屬于邏輯結構中的線性結構,它包括順序表、鏈表、棧、隊列等。
2.順序表
順序表是順序存儲結構的線性表,是把線性表中的所有元素按照其邏輯順序依次存儲到計算機存儲器中指定位置開始的一塊連續的物理地址的空間中。由于順序表的邏輯地址與其物理地址皆相鄰,故稱為順序表。
編程語言中的數組就是順序表的一個典型實例。
3.鏈表
鏈表是鏈式存儲結構的線性表,是用任意一組物理地址來存儲數據元素,而數據元素之間的邏輯關系通過指針來表示。所以它的存儲結構可以是連續的,也可以不是連續的。
一般我們說的鏈表都是不連續的。有一種用數組來表示的特殊鏈表,叫做靜態鏈表,它的存儲結構就是連續的。
4.有序表
我們很容易把有序表與順序表、鏈表相提并論,其實這是錯誤的。因為順序表、鏈表是根據線性表的存儲結構(順序或鏈式)來劃分概念的,而有序表是根據線性表的數據元素的數值大小來劃分概念,故有序表與順序表、鏈表不是相互獨立的,而是內容互相交錯的。
有序表是指表中所有數據元素的數值以遞增或遞減方式有序排列,是數據元素的數值的有序性。
有序表只描述元素之間的邏輯關系,故為邏輯結構,因此有序表既可以順序存儲也可以鏈式存儲。
例如,數組int array[3]=[1,2,3];是順序存儲結構的有序表。因為是數組,所以是順序存儲結構;因為數據元素[1,2,3]是從小到大排列,故是有序表。而單鏈表1->2->3則是鏈式存儲結構的有序表。由這個例子可見:有序表與順序表、鏈表不是相互獨立的,而是內容互相交錯的,我們不能把他們相提并論。
三、邏輯結構與存儲結構的區分
在數據結構的考研真題和計算機筆試中,總有區分邏輯結構與存儲結構的題目。
下圖是博主總結的數據結構的三要素:邏輯結構、存儲結構(物理結構)、數據運算的思維導圖。
先說結論:線性表、有序表是邏輯結構;順序表,鏈表是存儲結構。
邏輯結構與存儲結構的判定方法:當一個結構(如數組、鏈表、樹、圖),在邏輯結構中只有一種定義,而在物理結構中卻有兩種或多種定義,那么這個結構就屬于邏輯結構;相反,當此結構在原有基礎上加上了某種限定詞(如二叉樹->線索二叉樹),使得其在物理結構中只有一種定義,那么這個結構就屬于物理(存儲)結構,或稱為數據結構;
舉例1:棧屬于什么結構?
分析:棧在邏輯結構中只能屬于線性結構,而在物理結構中它可以使用順序存儲(數組),也可以使用鏈式存儲(鏈表),所以說棧是一種邏輯結構。
舉例2:線索二叉樹屬于什么結構?
分析:首先因為二叉樹既可以順序存儲又可鏈式存儲,故可以得到二叉樹是一種邏輯結構。但是線索二叉樹是二叉樹加上限定詞線索后的鏈表結構(不能用順序存儲),也就是說,線索二叉樹在計算機內部的只有一種存儲結構,所以線索二叉樹是物理結構。
邏輯結構和存儲結構的區別點在于:數據的邏輯結構是獨立于在計算機中的存儲結構的,數據的存儲方式有多種不同的選擇。例如棧是一種邏輯結構,它可以用順序存儲也可以用鏈式存儲。
而數據結構是既可以描述邏輯結構又可以描述存儲結構和數據運算,必須包含以上三種元素。所以像順序表、哈希表、單鏈表都是數據結構。
本文參考文獻:
[1]線性表,順序表,鏈表,數組的區別與聯系
[2]數據結構知識整理4線性表——順序表、鏈表、有序表
[3]有序表
[4]如何判斷某種結構是邏輯結構還是存儲結構或數據結構?
總結
以上是生活随笔為你收集整理的数据结构考研:线性表,顺序表,有序表,链表,数组的概念的区别与联系(软件工程/计算机/王道论坛)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(3181):ant-desig
- 下一篇: Taro+react开发(21)--注意