線性表 順序儲存結構之 順序表

2021-06-22 02:12:42 字數 2687 閱讀 8304

順序表

,用順序方法儲存的線性表也叫做順序表

如果乙個線性表用一組連續的儲存單元依次儲存線性表的資料元素,那麼這個表就是順序表。(類似陣列)

資料元素在計算機內「物理位置相鄰」

【例】如果用

address(ai)表示資料元素ai的儲存位置,

l表示資料元素占用的儲存單元,則:

address(ai) = address( a1 ) + (i-1)*l

由此,只要確定了順序表的起始位置,順序表中任一資料元素都可隨即訪問,所以順序表是一種隨機訪問的儲存結構。

具體定義如下:

#define list_init_size   100     //順序表儲存空間的初始化分配量

#define list_increment 10 //如果記憶體不夠,順序表儲存空間分配增量

typedef struct

sqlist

void initlist(sqlist * l)

l->length = 0; //空表長度為0

l->listsize = list_init_size; //初始儲存容量

}

void getnode(sqlist l, int i, elemtype * e)

int  listlength(seqlist * l)

(1) 插入運算的邏輯描述

線性表的插入運算是指在表的第i(1≤i≤n+1)個位置上,插入乙個新結點x,使長度為n的線性表: (a1

,…,a

i-1,a

i,…an)

變成長度為n+1的線性表: (a1

,…,a

i-1,x,a

i,…an)

注意:① 由於向量空間大小在宣告時確定,當l->length≥listsize時,表空間已滿,不可再做插入操作

② 當插入位置i的值為i>n或i<1時為非法位置,不可做正常插入操作

(2) 順序表插入操作過程

在順序表中,結點的物理順序必須和結點的邏輯順序保持一致,因此必須將表中位置為n ,n-1,…,i上的結點,依次後移到位置n+1,n,…,i+1上,空出第i個位置,然後在該位置上插入新結點x。僅當插入位置i=n+1時,才無須移動結點,直接將x插入表的末尾。

具體過程見【

動畫演示

】(3)具體演算法描述

void insertlist(seqlist * l,elemtype x,int i)

(4)演算法分析

① 問題的規模

表的長度l.length(設值為n)是問題的規模。

② 移動結點的次數由表長n和插入位置i決定

演算法的時間主要花費在for迴圈中的結點後移語句上。該語句的執行次數是n-i+1。

當i=n+1:移動結點次數為0,即演算法在最好時間複雜度是0(1)

當i=1:移動結點次數為n,即演算法在最壞情況下時間複雜度是0(n)

③ 移動結點的平均次數e

is(n) 

其中:在表中第i個位置插入乙個結點的移動次數為n-i+1pi

表示在表中第i個位置上插入乙個結點的概率。不失一般性,假設在表中任何合法位置(1≤i≤n+1)上的插入結點的機會是均等的,則p1

=p2=…=p

n+1=1/(n+1)

因此,在等概率插入的情況下,

即在順序表上進行插入運算,平均要移動一半結點。

(1)刪除運算的邏輯描述

線性表的刪除運算是指將表的第i(1≤i≤n)個結點刪去,使長度為n的線性表(a1

,…,a

i-1,

ai ,a

i+1,…,an)

變成長度為n-1的線性表(a1

,…,a

i-1,a

i+1,…,an)

注意:當要刪除元素的位置i不在表長範圍(即i<1或i>l->length)時,為非法位置,不能做正常的刪除操作

(2)順序表刪除操作過程

在順序表上實現刪除運算必須移動結點,才能反映出結點間的邏輯關係的變化。若i=n,則只要簡單地刪除終端結點,無須移動結點;若1≤i≤n-1,則必須將表中位置i+1,i+2,…,n的結點,依次前移到位置i,i+1,…,n-1上,以填補刪除操作造成的空缺。其刪除過程【

參見動畫演示

】(3)具體演算法描述

void deletelist(seqlist * l, int i)

(4)演算法分析

①結點的移動次數由表長n和位置i決定:

i=n時,結點的移動次數為0,即為0(1)

i=1時,結點的移動次數為n-1,演算法時間複雜度分別是0(n)

②移動結點的平均次數e

de(n)

其中:刪除表中第i個位置結點的移動次數為n-ipi

表示刪除表中第i個位置上結點的概率。不失一般性,假設在表中任何合法位置(1≤i≤n)上的刪除結點的機會是均等的,則p1

=p2=…=p

n=1/n

因此,在等概率插入的情況下,

順序表上做刪除運算,平均要移動表中約一半的結點,平均時間複雜度也是0(n)。

線性表之順序表儲存結構

順序表的儲存結構適用於一些資料相對穩定的線性表,如 學生學籍,公司職工資訊。最基本的線性表操作 新增,刪除,插入,清空,查詢,判空,判滿。順序表的儲存結構一般用陣列儲存。首先定義乙個結構體,用於儲存線性表的資料,線性表長度,以及線性表的中元素個數。struct list 第一步就是初始化表void ...

線性表的順序儲存結構 順序表

線性表的順序儲存結構 順序表一.在c c 語言中,借助陣列型別來實現順序表,也就是說,用陣列存放線性表的元素及其邏輯關係,陣列的基本型別就是線性表中元素的的型別,陣列大小 即陣列上界 下界 1 要大於等於線性表的長度,否則該陣列不能存放對應線性表的所有元素。所以當線性表長度小於陣列大小時,該陣列中會...

線性表的順序儲存結構 順序表

什麼是線性表?線性表簡稱表,是n n 0 個具有相同型別的資料元素的有限序列,線性表中資料元素的個數稱為線性表的長度,長度為0的表稱為空表。什麼是順序表?線性表的順序儲存結構稱為順序表。順序表是用一段位址連續的儲存單元依次儲存線性表的資料元素,因為線性表中每個元素的型別相同,通常用一維陣列來實現線性...