1. 程式人生 > >DS-004 順序表-刪除值重複的元素

DS-004 順序表-刪除值重複的元素

題目:從有序順序表中刪除所有其值重複的元素,使表中的值均不同。

演算法思想:有序順序表,值重複的元素一定在連續的位置上。用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; 
}

解析:

  1. 函式型別為bool,函式會返回true或false
  2. for迴圈中i從0開始,j從1開始,因為第一個元素肯定會被留下,放在L.data[0]的位置。初始時,比較第二個元素和第一個元素的值是否相同就好。
  3. if條件不成立,即當前掃描的元素,和前面留下來的最後一個元素相等。那麼不會執行之後的語句,i不變,j自增1。
  4. if條件成立,當前元素和前面保留下來的元素都不相等。i自增1,當前元素會被保留在第i+1個位置。繼續掃描下一個元素。
  5. 掃描完成後,L.data[0]~L.data[i]就是要值不重複的順序表。
  6. 修改L.length為i+1,保留的都是不重複的元素,即刪除了重複元素。L.length從1開始計數,陣列下標從0開始計數。