刪除線性表中多個元素的高效方法

2021-09-24 19:03:26 字數 1180 閱讀 4015

題目

刪除線性表中所有值為x

xx的元素。

方法一用k

kk記錄順序表中不等於x

xx的元素的個數,掃瞄順序表l

ll,若當前元素不等於x

xx,則將當前元素移動到k

kk位置,若當前元素等於x

xx,不做任何處理。

void

del_x_1

(sqlist &l, elemtype x)

} l.length = k;

}

方法二

用k

kk記錄順序表中等於x

xx的元素的個數,順序掃瞄l

ll,若當前元素等於x

xx,則k+1

k+1k+

1,若當前元素不等於k

kk,則將當前元素前移k

kk位。

void

del_x_2

(sqlist &l, elemtype x)

l.length = l.length - k;

}

方法三

設定頭尾兩個指標(i = 1, j = n),從兩端向中間移動,反遇到最左端值x的元素時,直接將最右端非x的元素移至這個位置,當右端指標遇到值x的元素時,直接忽略這個元素,指標繼續前移,最後當兩指標相遇時迴圈結束,指標以後的部分都被刪除,指標的值即為順序表長度。這個方法的缺點就是會改變表中元素的相對位置。

void

del_x_3

(sqlist &l, elemtype x)

if(l.data[head-1]

== x)

head++;}

l.length = head;

}

總結

方法一和方法二是兩個·互逆思路,遍歷整個順序表,其時間複雜度為o(n

)o(n)

o(n)

,這兩個方法便於理解,方法三平均只需遍歷半個順序表,在效能上更優,但確定就是改變了原順序表元素的相對位置,對於無序要求的情況下,方法三時首選;

三種方法的空間複雜度均為o(1

)o(1)

o(1)

線性表刪除元素

時間限制 1 sec 記憶體限制 128 mb 提交 14 解決 13 提交 狀態 討論版 命題人 uzzoj 利用線性表順序儲存的動態儲存,實現建立線性表,以及刪除線性表中的某個元素 輸入包括 輸入元素個數,以及相應的線性表元素,以及要刪除的位置 輸出刪除後的線性表 5 1 2 3 4 5 31 ...

刪除相同元素 線性表

線性表 在乙個遞增有序的線性表中,有數值相同的元素存在。若儲存方式為單鏈表,設計演算法去掉數值相同的元素,使表中不再有重複的元素。輸入長度 6 輸入資料 2 3 4 5 5 7 2 3 4 5 7 68 9 10 11 22 22 8 9 10 11 22 include define null 0...

刪除相同元素 線性表

description 線性表 在乙個遞增有序的線性表中,有數值相同的元素存在。若儲存方式為單鏈表,設計演算法去掉數值相同的元素,使表中不再有重複的元素。input 輸入長度 6 輸入資料 2 3 4 5 5 7 output 2 3 4 5 7 sample input 68 9 10 11 22...