1. 程式人生 > >順序儲存結構線性表的各種演算法(不定時補充)

順序儲存結構線性表的各種演算法(不定時補充)

儲存結構

如下。

//儲存結構
#define MAXSIZE 100
typedef struct {
	int elem[MAXSIZE];
	int last; //末尾元素下標
} SeqList;

一、刪除操作

雖說順序儲存結構不適合刪除操作,但是有時候為了追求時間複雜度和空間複雜度最優,還是頗有難度。

1 刪除值為elem的所有元素

首先想到的就是用elem的值從下標為0的元素開始比較,如果相同就把後面的元素依次前移,這樣的話時間複雜度為O(n2),其實還可以進一步優化為時間複雜度為O(n),程式碼如下。

void delAllElem(SeqList * L, int e) {
	int j =
0; for(int i=0;i<=L->last;i++) { if(L->elem[i]==e) { j++; } else { L->elem[i-j] = L->elem[i]; } } L->last = L->last-j; }