第2章 線性表

2021-10-01 20:45:10 字數 2531 閱讀 9816

線性結構的特點是,在資料元素的非空有限集合中,除第乙個元素無直接前驅結點,最後乙個元素無直接後繼結點外,其餘每個元素有且僅有乙個直接前驅結點和乙個直接後繼結點。

線性表的特徵:

(1)同一性 線性表由同類資料元素組成,每乙個ai必須屬於同一資料物件。

(2)有窮性 線性表由有限個資料元素組成,表長度就是表中資料元素的個數。

(3)有序性 線性表中相鄰資料元素之間存在著序偶關係,即。

線性表的運算:

(1)置空表運算setnull(&l):用於將線性表設定成空表。

(2)求長度運算length(l):用於求給定線性表的長度。

(3)取元素運算geti(l,i):若1≤i≤length(l),則取線性表中的第i個元素;否則,取得的元素為null。

(6)刪除運算dele(&l,i):用於刪除線性表中第i個位置上的元素。

線性表的順序儲存結構:

線性表順序表示的優點如下。

(1)無須為表示結點間的邏輯關係而增加額外的儲存空間(因為邏輯上相鄰的元素其儲存的物理位置也是相鄰的)。

(2)可以很方便地隨機訪問表中的任一元素。

線性表順序表示的缺點如下。

(1)插入或刪除運算不方便,除表尾的位置外,在表的其他位置上進行插入或刪除操作都必須移動大量的結點,其效率較低。(2)由於順序表要求占用連續的儲存空間,其儲存分配只能預先進行靜態分配,因此當表長變化較大時,難以確定合適的儲存規模。若按可能達到的最大長度預先分配表空間,則可能造成一部分空間長期閒置而得不到充分利用;若事先對錶長估計不足,則插入操作可能使表長超過預先分配的空間而造成溢位。

線性表的鏈式儲存結構:

單鏈表、迴圈鍊錶、雙向鍊錶、靜態鍊錶

順序表和煉表的比較

(1)在鍊錶中的每個結點,除了資料域外,還需要額外設定指標(或游標)域,當每個結點的資料域所佔位元組不多時,指標域所佔儲存空間的比重就會更大。

(2)在鍊錶中的任何位置上進行插入和刪除操作時,都只需要修改指標。而在順序表中進行插入和刪除操作時,平均要移動表中近一半的結點,尤其是當每個結點的資訊量較大時,移動結點的時間開銷就相當大了。因此,對於頻繁進行插入和刪除的線性表,宜採用鍊錶做儲存結構;若表的插入和刪除主要發生在表的首尾兩端,則宜採用尾指標表示的單迴圈鍊錶;而若是按序號訪問,則宜採用順序表。

多項式相加

採用鏈式儲存結構表示多項式時,多項式中的每乙個非零係數項構成鍊錶中的乙個結點,對於係數為零的項則無需儲存。若只儲存非零係數項,則必須儲存相應的指數資訊才行。

兩個多項式相加:兩個多項式中所有指數相同的項的對應係數相加,若和不為零,則構成「和多項式」中的一項;所有指數不相同的項均複製到「和多項式」中。

本章小結

(1)線性表的邏輯結構特性是資料元素之間存在著線性關係,在計算機中表示這種關係的兩類不同的儲存結構是順序儲存結構和鏈式儲存結構。用前者表示的線性表簡稱為順序表,用後者表示的線性表簡稱為鍊錶。

(2)熟練掌握兩類儲存結構的描述方法,注意一維陣列的下標從0開始,並掌握鍊錶中指標p和結點*p的對應關係,鍊錶中的頭結點、頭指標和首元素結點的區別及迴圈鍊錶、雙向鍊錶的特點等。鍊錶是本章的重點和難點。紮實地掌握指標操作和記憶體動態分配的程式設計技術是學好本章的基礎。

(3)熟練掌握線性表在順序儲存結構上實現基本操作(查詢、插入和刪除)的演算法。

(4)熟練掌握在各種鍊錶結構中實現線性表操作的基本方法,能在實際應用中選用適當的鍊錶結構。

(5)能夠從時間和空間複雜度的角度綜合比較線性表兩種儲存結構的不同特點及其適用場合。

三、程式設計題

1.試設計一演算法:從順序表中刪除自第i個元素開始的k個元素。

2.試將乙個無序的順序表a=(11,17,45,23,87,56,19,25),轉換成乙個按公升序排列的有序順序表(用鍊錶實現)。

3.給出刪除單鏈表中值為k的結點的演算法。

4.試給出求單鏈表長度的演算法。

5.試給出在有序鍊錶中插入一值為k的結點的演算法。

6.試將入口為head的有序單鏈表,按所給關鍵字k分成兩個迴圈鍊錶。其中,比k小的所有結點組成入口為h1的迴圈鍊錶,比k大的所有結點組成入口為h2的迴圈鍊錶。

7.試設計一演算法來實現順序表的逆置。

8.對於順序表,寫出下列操作的演算法。

(1)從表中刪除最小值的元素並由函式返回,空出的位置由最後乙個元素補上,若為空表,則顯示錯誤資訊並退出執行。

(2)刪除表中值為x的結點並由函式返回。

(3)向表中第i個元素之後插入乙個值為x的元素。

(4)從表中刪除值在x~y之間的所有元素。

(5)將表中的元素排成乙個有序表。

(6)從有序表中刪除值在x~y之間的所有元素。

9.對於單鏈表,寫出下列操作的演算法。

(1)根據一維陣列建立乙個單鏈表,使單鏈表中元素的順序與陣列的次序相同。

(2)統計單鏈表中值在x~y之間的所有結點個數。

(3)刪除單鏈表中從第k個結點開始連續的j個結點。

(4)將該單鏈表分解為兩個單鏈表,使其中乙個單鏈表中僅含有奇數,另乙個單鏈表中僅含有偶數。

(5)將另乙個已經存在的單鏈表插入到該鍊錶的第k個結點之後。

(6)將單鏈表中的所有元素排成乙個有序序列。

第2章 線性表

一.線性結構 1.存在唯一乙個被稱作 第乙個 的資料元素。2.存在唯一乙個被稱作 最後乙個 的資料元素。3.除第乙個元素外,所以其它元素都只有乙個前驅,第乙個元素沒有前驅。4.除最後乙個元素外,所以其它元素都只有乙個後繼,最後乙個元素沒有後繼。5.線性表中的元素必須具有相同特性,即屬同一資料物件。二...

第2週第2次課 線性表(2)

順序表基本運算演算法 1.初始化線性表initlist l 2.銷毀線性表destroylist l 3.判斷線性表是否為空表listempty l 4.求線性表的長度listlength l 5.輸出線性表displist l 6.求線性表中的某個資料元素值getelem l,i,e 7.按元素值...

資料結構 王道2017 第2章 線性表

1.線性表的定義和基本操作 1.1 線性表的定義 線性表 i具有相同資料型別的n n 0 個資料元素的有限序列。其中n為表長,當n 0時,該線性表是乙個空表。若用l命名線性表,則一般表示為 l a1,a2,a3.ai,ai 1.an 其中,a1是唯一的第乙個資料元素,又稱為表頭元素 an是唯一的最後...