順序線性表

2021-09-22 10:39:54 字數 1769 閱讀 8311

線性表的順序表示和實現

線性表的順序表示指的是用一組位址連續的儲存單元依次儲存線性表的資料元素。

線性表的第乙個資料元素a1的儲存位置,通常稱作線性表的起始位置或基位址。

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

陣列型別有隨機訪問的特性,因此通常都用陣列來描述資料接哦故中的順序儲存結構。由於線性表的長度可變,且所需最大儲存空間隨問題不同而不同,在c語言中可用動態分配的一維陣列,如下描述。

/*

線性表的動態分配順序儲存結構

*/#define list_init_size 100 /* 線性儲存空間的初始分配量 */

#define listincrement 10 /* 線性儲存空間的分配增量 */typedef

struct

sqlist;

在上述定義中,陣列指標elem指示線性表的基位址,length指示線性表的當前長度。順序表的初始化操作就是為順序表分配乙個預定定義大小的陣列空間,並將線性表的當前長度設為「0」。listsize指示順序表當前分配的儲存空間大小,一旦因插入元素而空間不足時,可進行再分配,即為順序表增加乙個大小為儲存listincrement個資料元素的空間。

要特別注意的是,c語言中陣列的下標是從「0」開始,因此,若l是sqlist型別的順序表,則表中第i個資料元素是l.elem[i-1]。

//構造乙個空的線性表

2 status initlist_sq(sqlist &l)

一般情況下,在第i(1<= i <= n)個元素之前插入乙個元素時,需將第n至第i(共n-i+1)個元素向後移動乙個位置。如下演算法:

1//2

//在順序線性表l中第i個位置之前插入新的元素e, i的合法值為 1<= i <= listlength_sq(l) + 1

3 status listinsert_sq(sqlist &l, int

i, elemtype e)

14 q = &(l.elem[i - 1]); //

q為插入位置

15for (p = &(l.elem[l.length - 1]); p >= q; --p)

16 *(p + 1) = *p; //

插入位置及之後的元素右移

17 *q =e;

18 ++l.length;

19return

ok;20 }

刪除第i(1<= i <= n)個元素時需將從第i+1至第n(共n-i)個元素依次向前移動乙個位置。如下演算法:

1

//刪除線性表中的元素2//

在順序線性表l中刪除第i個元素, 並用e返回其值, i的合法值為 1<= i <= listlength_sq(l)

3 status listdelete_sq(sqlist &l, int i, elemtype &e)

在順序表l中查訪是否存在和e相同的資料元素的最簡便的方法是,令e和l中的資料元素逐個比較。如下演算法:

1

int locateelem_sq(sqlist l , elemtype e , status (*compare)(elemtype , elemtype))

2

順序線性表的實現**如下:

順序線性表

sequential linear list this file define the ds of sequential linear list s basic operation,it includes linear list insert,delete,initial,and sort oper...

順序線性表

include int const maxsize 100 typedef int element typedef struct list element list get index value list int int main 函式 初始化線性表 void list init list ls ...

順序線性表

define true 1 define false 0 define ok 1 define error 0 define infeasible 1 define overflow 2 define list init size 100 define list increment 10 typed...