資料結構 線性表順序儲存結構

2021-12-30 06:37:41 字數 3363 閱讀 5591

線性表是一種典型的線性結構。其基本特點是線性表中的資料元素是有序且是有限的。在這種結構中:① 存在乙個唯一的被稱為「第乙個」的資料元素;

② 存在乙個唯一的被稱為「最後乙個」的資料元素;

③ 除第乙個元素外,每個元素均有唯一乙個直接前驅;

④ 除最後乙個元素外,每個元素均有唯一乙個直接後繼。

線性表(linear list) :是由n(n≧0)個資料元素(結點)a1,a2, …an組成的有限序列。該序列中的所有結點具有相同的資料型別。

線性表中的資料元素 ai 所代表的具體含義隨具體應用的不同而不同。**性表的定義中,只不過是乙個抽象的表示符號,它可以是乙個數字、乙個字串或乙個記錄。◆ 線性表中的結點可以是單值元素(每個元素只有乙個資料項) 。

例1: 26個英文本母組成的字母表:

(a,b,c、…、z)

例2 : 某校從2023年到2023年各種型號的計算機擁有量的變化情況,用線性表的形式給出:

(6,17,28,50,92,188)

例3 : 一副撲克的點數

(2,3,4,…,j,q,k,a)

線性表中的資料元素是各種各樣的,但同一線性表必定具有相同的特性,即屬同一資料物件。相鄰資料元素之間存在序偶關係。將非空的線性表記作:

(a1,a2,…an)

a1 (無前驅)稱為線性表的第乙個(首)結點,

an (無後繼)稱為線性表的最後乙個(尾)結點。

當n=0時,稱為空表。

a1,a2,…ai-1都是ai(2 ≤ i ≤ n)的前驅,其中ai-1是ai的直接前驅;

ai+1,ai+2,…an都是ai(1≤i ≤ n-1)的後繼,其中ai+1是ai的直接後繼。

順序儲存 :把線性表的結點按邏輯順序依次存放在一組位址連續的儲存單元裡。用這種方法儲存的線性表簡稱順序表。順序儲存的線性表的特點:

◆ 線性表的邏輯順序與物理順序一致;

◆ 資料元素之間的關係是以元素在計算機內「物理位置相鄰」來體現。

在高階語言(如c語言)環境下:陣列具有隨機訪問的特性,因此,借助陣列來描述順序表。

除了用陣列來儲存線性表的元素之外,順序表還應該有表示線性表的長度屬性,所以用結構型別來定義順序表型別。

#define ok 1

#define error -1

#define max_size 100

typedef int status ;

typedef int elemtype ;

typedef struct sqlist

sqlist ;順序儲存結構中,很容易實現線性表的一些操作:初始化、賦值、查詢、修改、插入、刪除、求長度等。以下將對幾種主要的操作進行討論

status init_sqlist( sqlist *l ) //新建一張名為l的空表

**性表 l= (a1,…a i-1,ai, ai+1,…,an) 中的第i(1≦i≦n+1)個位置上插入乙個新結點e,使其成為線性表:

l=(a1,…a i-1,e,ai,ai+1,…,an)若i=n+1,則表示將元素插入到表最後位置

實現步驟

(1) 將線性表l中的第i個至第n個結點後移乙個位置。

(2) 將結點e插入到結點ai-1之後。

(3) 線性表長度加1。

插入演算法思想

若i=n+1,則將x插入到表尾;

若表長度n<0或插入位置不適當,則輸出錯誤資訊,並返回-1;

當1<=i<=n時,則從表尾開始到第i個依次向後移動乙個位置(共需移動n-i+1個資料元素。

最後將e存入l->elem_array[i]中,表長n增1插入成功,函式返回值為1。

演算法實現

status insert_sqlist(sqlist *l,int i ,elemtype e)

for ( j = l->length-1; j >=i-1; --j )

l->elem_array[j+1]=l->elem_array[j];

/* i-1位置以後的所有結點後移 */

l->elem_array[ i-1 ]=e; /* 在第i個位置插入結點 */

l->length++ ;

return ok ;

}**性表l中的第i個位置插入新結點,其時間主要耗費在表中結點的移動操作上,因此,可用結點的移動來估計演算法的時間複雜度。若i=1,需移動全部n個結點(最壞:o(n))

若i=n+1(在表尾插入),無需用移動結點。(最好o(1))

設**性表l中的第i個元素之前插入結點的概率為pi,不失一般性,設插入各個位置的概率相等,則pi=1/(n+1),而插入時移動結點的次數為n-i+1。

**性表 l=(a1,…a i-1,ai, ai+1,…,an) 中刪除結點ai(1≦i≦n),使其成為線性表:

l= (a1,…ai-1,ai+1,…,an)實現步驟

(1) 將線性表l中的第i+1個至第n個結點依次向前移動乙個位置。

(2) 線性表長度減1。

刪除演算法思想

若表長度n<=0或刪除位置不適當,則輸出錯誤資訊,並返回-1;

若i=n,只需刪除尾結點,不用移動結點;

當1<=i

刪除演算法實現

elemtype delete_sqlist(sqlist *l,int i)

else if ( i<1||i>l->length )

else

}**性表 l= (a1,a2,…,an) 中刪除值為x的第乙個結點。

實現步驟

(1) **性表l中查詢值為x的第乙個資料元素。

(2) 將從找到的位置至最後乙個結點依次向前移動乙個位置。

(3) 線性表長度減1。

演算法描述

status locate_delete_sqlist(sqlist *l,elemtype x)

/* 刪除線性表l中值為x的第乙個結點 */

}if (i>l->length)

return ok;

}時間主要耗費在資料元素的比較和移動操作上。首先,**性表l中查詢值為x的結點是否存在;

其次,若值為x的結點存在,且**性表l中的位置為i ,則**性表l中刪除第i個元素。

設**性表l刪除資料元素概率為pi,不失一般性,設各個位置是等概率,則pi=1/n。

◆ 比較的平均次數: ecompare=∑pi*i (1≦i≦n)

∴ ecompare=(n+1)/2 。

◆ 刪除時平均移動次數:edelete=∑pi*(n-i) (1≦i≦n)

∴ edelete=(n-1)/2 。

平均時間複雜度:ecompare+edelete=n ,即為o(n)

資料結構 線性表 順序儲存結構

1.線性表定義 線性表 list 零個或多個資料元素的有限序列。關鍵知識點 1.首先它是乙個序列,元素之間室友順序的 2.線性表強調的是有限的,元素個數是有限的 3.在較複雜的線性表中,乙個資料元素可以由若干個資料項組成。其數學定義 若將線性表標記為 a1,ai 1 ai ai 1 a n 則表中的...

《資料結構 線性表》順序儲存

一 什麼是線性表?線性表定義 0個 或 多個 資料元素 有限 序列。序列 這個必須是有順序的,若元素存在多個,則第乙個元素無前驅,最後乙個元素無後驅。乙個元素只能有乙個前驅 後驅。有限 線性表必須是有限的,無限的只存在於數學中。線性表元素個數必須是 大於 0,當 n 0 時,稱為空表。二 線性表抽象...

資料結構 線性表順序儲存(順序表)

特點 線性表的順序儲存是指用一組位址連續的儲存單元依次儲存線性表中的各個元素。作用 線性表中在邏輯結構上相鄰的資料元素儲存在相鄰的物理儲存單元中,即通過資料元素 物理儲存的相鄰關係來反映 資料元素之間 邏輯上的相鄰關係 順序儲存的實現 一維陣列儲存順序表中的資料 缺點 大小固定,使用前需要分配位址,...