DS-003 順序表--刪除所有值為x的元素
阿新 • • 發佈:2018-12-12
題目:長度為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 |
解析:
- 函式型別void,不返回值。
- 函式需要順序表地址和x兩個引數。函式可以直接操作L。
- k記錄不等於x的元素個數,k初始值為0。
- for迴圈遍歷整個順序表,如果if條件成立,將第i個位置的元素放到第k個位置。
- 比如上面的順序表,第一次for迴圈,i=0,k=0,滿足if語句,第一個位置元素保留。第二次for迴圈,if語句不成立,i=1,k=0;直接執行第三次迴圈,if語句成立,i=2,k=1,把第二個元素的位置放到第一個位置,等於刪除了x。
- 遍歷到最後,前k個元素均不等於x。將L.length設定為k,只保留前k個元素,刪除了所有的x。