資料結構 線性表

2021-08-13 16:41:10 字數 2218 閱讀 1258

一、

順序表

線性表的定義:  線性表是一種最簡單的線性結構。

1、線性結構的基本特徵為: 線性結構是 乙個資料元素的有序(次序)集

(1).集合中必存在唯一的乙個「第一元素」;(2).集合中必存在唯一的乙個 「最後元素」 ;(3).除最後元素在外,均有 唯一的後繼;(4).除第一元素之外,均有 唯一的前驅。

2、線性表上的基本操作有:

⑴  建立線性表:createlist()

⑵  求線性表的長度:lengthlist(l)      

(3)  按值查詢:searchlist(l,x),x是給定的一  個資料元素。

(4)  插入操作:inslist(l,i,x)

(5)  刪除操作:dellist(l,i)

(6)  顯示操作:showlist(l)

例1:假設:有兩個集合 a 和 b 分別用兩個線性表 la 和 lb 表示,即:線性表中的資料元素即為集合中的成員。現要求乙個新的集合a=a∪b。

即要求對線性表作如下操作:

擴大線性表 la,將存在於線性表lb 中而不存在於線性表 la 中的資料元素插入到線性表 la 中去。

void union(list &la, list lb)

} // union

例2:已知乙個非純集合 b,試構造乙個純集合 a,使 a中只包含 b 中所有值各不相 同的資料元素。

3、順序表的優缺點?

優點:順序儲存結構的線性表是可以隨機訪問其中的任意元素。

缺點:(1)資料元素最大個數需預先確定,

(2)插入與刪除運算的效率很低。

(3)儲存空間不便於擴充

小結:

線性表的順序儲存結構中任意資料元素的儲存位址可由公式直接匯出,因此順序儲存結構的線性表是可以隨機訪問其中的任意元素。

但是,順序儲存結構也有一些不方便之處,主要表現在:

(1)資料元素最大個數需預先確定,使得高階程式語言編譯系統需預先分配相應的儲存空間;

(2)插入與刪除運算的效率很低。為了保持線性表中的資料元素順序,在插入操作和刪除操作時需移動大量資料。對於插入和刪除操作頻繁的線性表、將導致系統的執行速度難以提高。

(3)儲存空間不便於擴充。當乙個線性表分配順序儲存空間後,若線性表的儲存空間已滿,但還需要插入新的元素,則會發生「上溢」錯誤。

鏈式表

以「結點的序列」表示線性表       稱作鍊錶

以線性表中第乙個資料元素    的儲存位址作為線性表的位址,稱作線性表的頭指標。

有時為了操作方便,在第乙個結點之前虛加乙個「頭結點」,以指向頭結點的指標為鍊錶的頭指標。

單鏈表操作的實現:

單鏈表是一種順序訪問的結構,為找第 i 個資料元素,必須先找到第 i-1 個資料元素。因此,查詢第 i 個資料元素的基本操作為:移動指標,比較 j 和 i 。 令指標 p 始終指向線性表中第 j 個資料元素。

在鍊錶中插入結點只需要修改指標。但同時,若要在第 i 個結點之前插入元素,修改的是第 i-1 個結點的指標。因此,在單鏈表中第 i 個結點之前進行插入的基本操作為:找到線性表中第i-1個結點,然後修改其指向後繼的指標。

鍊錶是乙個動態的結構,它不需要予分配空間,因此生成鍊錶的過程是乙個結點「逐個插入」 的過程。

循壞鍊錶:

最後乙個結點的指標域的指標又指回第乙個結點的鍊錶。和單鏈表的差別僅在於,判別鍊錶中最後乙個結點的條件不再是「後繼是否為空」,而是「後繼是否為頭結點」。

鍊錶的優缺點?

優點:鏈式儲存結構克服了順序儲存結構的缺點,它的結點空間可以動態申請和釋放;它的資料元素的邏輯次序靠結點的指標來指示,進行資料插入或刪除時不需要移動資料元素。

缺點:①每個結點中的指標域需額外占用儲存空間,當每個結點的資料域所佔位元組不多時,指標域所佔儲存空間的比重就顯得很大;②鏈式儲存結構是一種非隨機儲存結構。

一元多項式的表示和相加

線性表的鏈式儲存結構:線性表的鏈式儲存結構就是用一組任意的儲存單元——結點(可以是不連續的)儲存線性表的資料元素。表中每乙個資料元素,都由存放資料元素值的資料域和存放直接前驅或直接後繼結點的位址(指標)的指標域組成。

迴圈鍊錶:迴圈鍊錶(circular linked list)是將單鏈表的表中最後乙個結點指標指向鍊錶的表頭結點,整個鍊錶形成乙個環,從表中任一結點出發都可找到表中其他的結點。

雙向鍊錶:雙向鍊錶中,在每乙個結點除了資料域外,還包含兩個指標域,乙個指標(next)指向該結點的後繼結點,另乙個指標(prior)指向它的前驅結點。

資料結構(線性表)

1.試寫一演算法,在無頭結點的動態單鏈表上實現線性表操作insert l,i,b 並和在帶頭結點的動態單鏈表上實現相同操作的演算法進行比較。status insert linklist l,int i,int b 在無頭結點鍊錶l的第 i個元素之前插入元素 belse insert 2.已知線性表中...

資料結構 線性表

參考 一 線性表 順序表 單鏈表 迴圈鍊錶 雙鏈表 順序表 1.表的初始化 void initlist seqlist l 2.求表長 int listlength seqlist l 3.取表中第i個結點 datatype getnode l,i 4.查詢值為x的結點 5.插入 具體演算法描述 v...

資料結構 線性表

線性表是最基礎的一種資料結構,這樣的資料物件包含的資料元素具有一對一的前驅後繼關係。按其邏輯儲存方式的不同可分為兩類線性表 順序表和鏈式表。其中鏈式表又可分為線性鍊錶 迴圈鍊錶和雙向鍊錶。下面分別介紹下這幾種線性表的資料結構 1.順序表 typedef struct sqlist 插入演算法 i到n...