1. 程式人生 > >DS-003 順序表--刪除所有值為x的元素

DS-003 順序表--刪除所有值為x的元素

題目:長度為n的順序表L,編寫一個時間複雜度為O(n),空間複雜度為O(1)的演算法,該演算法刪除線性表中所有值為x的資料元素。

演算法思想:用k記錄不等於x的元素個數,即需要儲存的元素個數。邊掃描L邊統計k,並將不等於x的元素向前放置k位置上,最後修改L的長度。

程式碼:

void del_x(Sqlist &L, ElemType x){
	int k = 0;
	for(i=0; i<L.length; i++)
		if(L.data[i]!=x){
		L.data[k] = K.data[i];
		k++; // k記錄不等於x的元素個數
        }
	L.length=k;
}
1 x 3 x 5 6 x 5 4

解析:

  1. 函式型別void,不返回值。
  2. 函式需要順序表地址和x兩個引數。函式可以直接操作L。
  3. k記錄不等於x的元素個數,k初始值為0。
  4. for迴圈遍歷整個順序表,如果if條件成立,將第i個位置的元素放到第k個位置。
  5. 比如上面的順序表,第一次for迴圈,i=0,k=0,滿足if語句,第一個位置元素保留。第二次for迴圈,if語句不成立,i=1,k=0;直接執行第三次迴圈,if語句成立,i=2,k=1,把第二個元素的位置放到第一個位置,等於刪除了x。
  6. 遍歷到最後,前k個元素均不等於x。將L.length設定為k,只保留前k個元素,刪除了所有的x。