DS-004 順序表-刪除值重複的元素
阿新 • • 發佈:2019-01-03
題目:從有序順序表中刪除所有其值重複的元素,使表中的值均不同。
演算法思想:有序順序表,值重複的元素一定在連續的位置上。用i記錄不重複的元素。用順序表前面的i個位置儲存不重複的元素,後面的元素如果與要保留的順序表最後一個元素不相同,則留下。掃描完成後,留下的0~i位就是值不重複的元素。
程式碼:
bool Delete_Same(SeqList &L){ if(L.length==0) return false; int i, j; //i記錄要留下的那個元素存放位置,j用來遍歷陣列 for(i=0, j=1; j<L.length; j++) if(L.data[i] != L.data[j]) L.data[++i] = L.data[j]; L.length = i+1; return true; }
解析:
- 函式型別為bool,函式會返回true或false
- for迴圈中i從0開始,j從1開始,因為第一個元素肯定會被留下,放在L.data[0]的位置。初始時,比較第二個元素和第一個元素的值是否相同就好。
- if條件不成立,即當前掃描的元素,和前面留下來的最後一個元素相等。那麼不會執行之後的語句,i不變,j自增1。
- if條件成立,當前元素和前面保留下來的元素都不相等。i自增1,當前元素會被保留在第i+1個位置。繼續掃描下一個元素。
- 掃描完成後,L.data[0]~L.data[i]就是要值不重複的順序表。
- 修改L.length為i+1,保留的都是不重複的元素,即刪除了重複元素。L.length從1開始計數,陣列下標從0開始計數。