順序儲存結構和鏈式儲存結構
廣義表知識點習題
線性表是最基本、最簡單、也是最常用的一種資料結構。線性表(linear list)是資料結構的一種,乙個線性表是n個具有相同特性的資料元素的有限序列。
線性表,全名為線性儲存結構。使用線性表儲存資料的方式可以這樣理解,即「把所有資料用一根線兒串起來,再儲存到物理空間中」。
如圖 1 所示,這是一組具有「一對一」關係的資料,我們接下來採用線性表將其儲存到物理空間中。
首先,用「一根線兒」把它們按照順序「串」起來,如圖 2 所示:
圖 2 中,左側是「串」起來的資料,右側是空閒的物理空間。把這「一串兒」資料放置到物理空間,我們可以選擇以下兩種方式,如圖 3 所示。
圖 3a) 是多數人想到的儲存方式,而圖 3b) 卻少有人想到。我們知道,資料儲存的成功與否,取決於是否能將資料完整地復原成它本來的樣子。如果把圖 3a) 和圖 3b) 線的一頭扯起,你會發現資料的位置依舊沒有發生改變(和圖 1 一樣)。因此可以認定,這兩種儲存方式都是正確的。
將具有「一對一」關係的資料「線性」地儲存到物理空間中,這種儲存結構就稱為線性儲存結構(簡稱線性表)。
線性表的基本概念
具有「一對一」邏輯關係的資料,最佳的儲存方式是使用線性表。
使用線性表儲存的資料,如同向陣列中儲存資料那樣,要求資料型別必須一致,也就是說,線性表儲存的資料,要麼全部都是整形,要麼全部都是字串。一半是整形,另一半是字串的一組資料無法使用線性表儲存。
圖 3 中我們可以看出,線性表儲存資料可細分為以下 2 種:
也就是說,線性表儲存結構可細分為順序儲存結構和鏈式儲存結構。
前驅和後繼
資料結構中,一組資料中的每個個體被稱為「資料元素」(簡稱「元素」)。例如,圖 1 顯示的這組資料,其中 1、2、3、4 和 5 都是這組資料中的乙個元素。
另外,對於具有「一對一」邏輯關係的資料,我們一直在用「某一元素的左側(前邊)或右側(後邊)」這樣不專業的詞,其實線性表中有更準確的術語:
以圖 1 資料中的元素 3 來說,它的直接前驅是 2 ,此元素的前驅元素有 2 個,分別是 1 和 2;同理,此元素的直接後繼是 4 ,後繼元素也有 2 個,分別是 4 和 5。如圖 4 所示:
廣義表(lists,又稱列表)是一種非線性的資料結構,是線性表的一種推廣。即廣義表中放鬆對錶元素的原子限制,容許它們具有其自身結構。(書上規定了列表的表頭可以是原子或者子表,但是表尾必須是子表)
原子和子表:
通常,廣義表中儲存的單個元素稱為 「原子」,而儲存的廣義表稱為 「子表」。
例如建立乙個廣義表 ls = },我們可以這樣解釋此廣義表的構成:廣義表 ls 儲存了乙個原子 1 和子表 。
廣義表的表頭和表尾
當廣義表不是空表時,稱第乙個資料(原子或子表)為"表頭",剩下的資料構成的新廣義表為"表尾"。
強調一下,除非廣義表為空表,否則廣義表一定具有表頭和表尾,且廣義表的表尾一定是乙個廣義表。
例如在廣義表中 ls=,5} 中,表頭為原子 1,表尾為子表 和原子 5 構成的廣義表,即 ,5}。
再比如,在廣義表 ls = 中,表頭為原子 1 ,但由於廣義表中無表尾元素,因此該錶的表尾是乙個空表,用 {} 表示。
關於廣義表的三個重要結論:
列表的元素可以是子表,而子表的元素還可以是子表,也就是說廣義表是可以巢狀定義的。
列表可以為其他列表所共享
列表可以是乙個遞迴的表,如e = (a , e)
設順序表的長度為 n 。下列演算法中,最壞情況下比較次數小於 n 的是( )
a. 尋找最大項
b. 堆排序
c. 快速排序
d. 順序查詢法
正確答案:a
答案解析:
從邏輯上可以把資料結構分為哪兩大類
a. 初等結構、構造型結構
b. 線性結構、非線性結構
c. 動態結構、靜態結構
d. 順序結構、鏈式結構
正確答案:b
答案解析:
資料的邏輯結構:指反映資料元素之間的邏輯關係的資料結構,其中的邏輯關係是指資料元素之間的前後件關係,而與他們在計算機中的儲存位置無關。
下列敘述錯誤的是()
a. 線性表可以是空表
b. 線性表的所有節點有且僅有乙個前件和後件
c. 線性表是由n個元素組成的有限序列
d. 線性表是一種線性結構
正確答案:
答案解析:
下列說法正確的是()
a. 二叉排序樹的平均查詢長度和二叉排序樹的形態無關
b. 順序查詢法要求代查詢表應採用順序儲存結構且按關鍵字大小有序排列
c. 折半查詢法要求代查詢表應採用順序儲存結構且按關鍵字大小有序排列
d. 二叉排序樹可以通過逐個插入節點演算法來建立
正確答案:cd
答案解析:
在結點數確定的二叉排序樹上進行查詢的平均查詢長度與二叉樹的形態有關,最差的情況是二叉排序樹為單支樹的時候。
順序查詢法不需要關鍵字有序排列
在下列表述中,錯誤的是()
a. 氣泡排序在初始關鍵字序列為逆序的情況下執行的交換次數最多。
b. 棧和佇列都是線性表,只是在插入和刪除時收到了一些限制。
c. 所謂取廣義表的表尾就是返回廣義表中最後乙個元素
d. 在索引順序表中,實現分塊查詢,在等概率查詢情況下,其平均查詢長度不僅與表中元素個數有關,而且與每塊中元素個數有關。
正確答案:c
答案解析:
n為表的長度,當n = 0時,ls為空表;n >0時,表的第乙個表元素稱為廣義表的表頭(head),除此之外,其它表元素組成的表稱為廣義表的表尾(tail)。即當a1為表頭元素時,(a2,a3 ……an)為表尾元素。
線性表之廣義表
廣義表 lists,又稱列表 是一種非線性的資料結構,是線性表的一種推廣。定義 廣義表是n n 0 個元素a1,a2,ai,an的有限序列。其中 ai 或者是原子或者是乙個廣義表。廣義表通常記作 ls a1,a2,ai,an ls是廣義表的名字,n為它的長度。若ai是廣義表,則稱它為ls的子表。注意...
線性表,順序表,廣義表
定義 乙個線性表是n個具有相同特性的資料元素的有限序列,線性表中資料元素之間的關係是一對一的關係,即除了第乙個和最後乙個資料元素之外,其它資料元素都是首尾相接的 注意,這句話只適用大部分線性表,而不是全部 特徵 1 集合中必存在唯一的乙個 第一元素 2 集合中必存在唯一的乙個 最後元素 3 除最後乙...
資料結構3 2線性表的推廣 廣義表
廣義表的資料元素本身也可以是乙個資料結構,但與陣列不同,廣義表的不同元素可以有不同的結構。廣義表是n個元素a1,a2,a3,an的有限序列,其中ai或者是原子項,或者是乙個廣義表。一般記為 ls a1,a2,a3,an ls為廣義表的名字,n為廣義表的長度,若n為0,稱為空表。若ai是原子型的資料元...