資料結構 1 線性表順序表的主要操作的實現

2021-07-09 20:18:06 字數 2869 閱讀 4959

#include//順序表:1.使用動態分配的一維陣列

// 2.使用靜態分配的一維陣列

//本例項使用靜態分配

#define list_init_size 100

typedef int elemtype;

typedef struct sqlistsqlist;

//建立乙個長度為n的順序線性表

void createsqlist(sqlist &l, int n)

l.len = n;

//printsqlist(l);

}

//列印輸出順序線性表

void printsqlist(sqlist l)

printf("\n");

}

演示:

//在第i(1<=i<=n)個元素之前插入乙個元素,需要向後移動n-i+1個元素,

//在最後插入則不需要移動任何元素,可供插入的位置有n+1個,

//從後往前找插入的位置,其中i表示位序,第i個元素的下標i-1,i的範圍是1~n+1

//時間複雜度:o(n)

void insertsqlist(sqlist &l,int i, elemtype e)else if(l.len >= list_init_size)else

l.data[i-1] = e;

l.len++;

}}

演示:

//建立乙個線性表實際上也是不斷往乙個空表裡插入元素的過程

//所以可利用插入演算法實現線性表的建立

void createuseinsertsqlist(sqlist &l, int n)

l.len = n;

}

演示:

//刪除第i(1<=i<=l.len)個元素,並用e返回其值

//時間複雜度:o(n)

void delsqlist(sqlist &l, int i, elemtype &e)

int j = i-1;//j是要被刪除元素的下標

e = l.data[j];

printf("刪除的第%d位置的資料是%d\n",i,e);

for(j;j演示:

//已知線性表la和lb中的資料元素按值非遞減排列,現要求將la和lb歸併為乙個新的線性表lc,且lc中的資料元素仍然按值非遞減有序排列

//實現:為保持lc的非遞減有序,則當a<=b時,c=a;當a>b時,c=b

//時間複雜度:o(la.len+lb.len)

//例項:la=(3,5,8,11),lb=(2,6,8,9,11,15,20),lc=(2,3,5,6,8,8,9,11,11,15,20),注意並沒有去重,只是做了合併

利用兩個線性表la,lb分別表示兩個集合a和b(線性表中的資料元素即為集合元素),現要求乙個新的集合a=aub

實現:擴充套件線性表la,即從lb中依次取得每個資料元素,並依值在la中進行查訪,若在la中不存在則插入之。

//例項:la=(3,5,8,11),lb=(2,6,8,9,11,15,20),union以後的la=(3,5,8,11,2,6,9,15,20),la.len=9,注意有去重,但不care求並集以後的順序

//時間複雜度:o(la.len * lb.len)

int locateelem(sqlist l, elemtype e)

if(i<=l.len)

return i;

else

return 0;

}void unionsqlist(sqlist &la, sqlist lb)

}}

演示:

注意:將merge第乙個迴圈體中以switch語句代替if語句,即分出3種情況,當a=b時,只將兩者之一插入到lc中,則此時演算法完成的操作和union完全相同,而時間複雜度卻不同,其原因有二:

1.la,lb中的元素都是依值遞增(同一集合中元素不等),則對lb中每個元素,不需要再la中從表頭至表尾進行全程搜尋

2.由於用新錶lc表示「並集」,則插入操作實際上借助「複製」完成,而無須因插入導致移動一系列元素

由此可見,若以線性表表示集合並進行集合的各種運算,應先對錶中的元素進行排序,則可降低集合運算的時間複雜度

順序線性表 資料結構 1

線性表的一種,是與記憶體結構對應的,故稱之為線性順序表。資料結構第二周目,整理下以前的 對應書上的p19 p26。typedef struct sqlist 順序表 2017 04 23 c2 1.h 線性表的動態分配順序儲存結構。在教科書第22頁 define list init size 30 ...

資料結構 線性表 順序表

豐富了前邊的功能,更加完善。include include define list init size 100 線性表儲存空間的初始分配量 define listincrement 10 線性表儲存空間的分配增量 using namespace std const int overflow 2 ty...

資料結構 線性表 順序表

線性表是具有相同特性的資料元素的乙個有限序列。線性表的順序儲存結構是,把線性表中的所有元素按照其邏輯順序依次儲存到從計算機儲存器中指定的儲存位置開始的一塊連續的儲存空間。include include include define maxsize 50 using namespace std 假設l...