線性結構之線性表

2021-08-21 12:42:27 字數 2657 閱讀 5935

線性結構的特點:

存在唯一的乙個被稱做「第乙個」的資料元素;

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

除第乙個之外,集合中的每個資料元素均只有乙個前驅;

除最後乙個之外,集合中每個資料元素均只有乙個後繼;

線性表:乙個線性表是n個資料元素的有限序列。

線性表再物理結構的表示上可以分為(1)順序表示和(2)鏈式表示。

通常,稱順序儲存結構(或順序映像)的線性表尾順序表。順序表的特點是:為表中相鄰的元素賦以相鄰的儲存位置。換句話說,以元素在計算機內「物理位置相鄰」來表示線性表中資料元素之間的邏輯關係。每乙個資料元素的儲存位置都和線性表的起始位置相差常數個資料元素大小。由此,只要確定了儲存線性表的起始位置,線性表中任一資料元素都可隨機訪問,所以線性表的順序儲存結構是一種隨機訪問的儲存結構。

下面是線性表的動態分配順序儲存結構的c**:

/*

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

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

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

typedef structsqlist;

附上標頭檔案(status是函式返回值狀態碼,elemtype是儲存的資料型別,這裡我以int型為例):

# include using namespace std;

# define true 1

# define false 0

# define ok 1

# define error 0

# define infeasible -1

# define overflow -2

typedef int status;

typedef int elemtype;

初始化乙個空的線性表:

/*

構造乙個空的線性表l

*/status initlist_sq(sqlist &l)

//initlist_sq

/*

在順序表的第i個位置前插入元素e

*/status listinsert_sq(sqlist &l, int i, elemtype e)

elemtype *q = &(l.elem[i-1]);//插入位置

for(elemtype *p=&(l.elem[l.length-1]); p>=q; --p)//插入點後的元素後移

*(p+1) = *p;

*q = e;//插入e

++l.length;//表長加1

return ok;

}//listinsert_sq

由以上演算法可以看出,當在順序儲存結構的線性表中的某個位置上插入或刪除(偷懶沒寫,與插入類似)乙個資料元素時,其時間主要耗費在移動元素上(換句話說,移動元素的操作為預估演算法時間複雜度的基本操作),而移動元素的個數取決於插入或刪除元素的位置,若表長為n,則插入和刪除演算法的時間複雜度為o(n),除此之外,容易看出,順序表的「求表長」和「取第i個資料元素」的時間複雜度均為o(1)。

在順序表l中查訪是否存在和e相同的資料元素:

/*

在順序表l中查訪是否存在和e相同的資料元素

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

//locateelem_sq

這裡的「status (*compare)(elemtype, elemtype)」表示,形參compare是乙個指標變數,它指向什麼呢?它指向乙個函式,什麼函式呢?乙個含有兩個elemtype型別形參並且返回值為status型別的函式。在前面我們定義了status是int型別,elemtype為int型別,所以實質上這裡可以寫成int (*compare)(int, int),它表示這是指向乙個含有兩個整形形參並且返回值為int型的函式的形參compare,實參傳的是滿足條件的函式名,用*compare呼叫這個函式。這裡我寫的函式實參原型是:

int equal_int(int a, int b)

想一想這裡為什麼不直接呼叫上面的函式,反而「多此一舉」呢?

合併順序表:

/*

順序表的合併

*/void mergelist_sq(sqlist la, sqlist lb, sqlist &lc)

else

}while(i<=la.length-1)//插入la剩餘的元素

while(j<=lb.length-1)//插入lb剩餘的元素

/*可將1234步改為initlist_sq(lc);

5678步改為listinsert_sq(lc, k, i)或listinsert_sq(lc, k, j)

*/}//mergelist_sq

(未排序的表需先進行排序,否則。恩,你懂得)

(如果是求兩個集合的並集,則應該把相等的情況拿出來單獨討論)

線性結構 線性表

線性結構 線性表 棧 佇列 串和陣列 線性結構的特點 除了第乙個元素和最後乙個元素外,每個資料元素有乙個前驅和乙個後繼,線性表是最簡單 最基本 最常用的資料結構,它有順序儲存和鏈式儲存兩種儲存方案 線性表是n個資料元素的有限序列,在表中,元素之間存在著線性的邏輯關係 特點 同一性 線性表由同類元素組...

線性結構 線性表

資料結構是 adt abstract data type,資料抽象型別 的物理實現。什麼是線性表?線性表 由同型別的資料元素構成有序序列的線性結構 兩種實現模型 順序表,鍊錶 資料物件集 n個元素構成的有序序列 初始化鍊錶 init 返回鍊錶長度 len 判斷為空 is empty 指定位置新增 i...

線性結構 線性表

由同型別資料元素構成有序序列的線性結構 list makeempty int find elementtype x,list ptrl void insert elementtype x,int i,list ptrl if i 1 i ptrl last 2 for j ptrl last j i...