標(biāo)題中有序的表是數(shù)組,下面是從小到大排列的數(shù)組,其中包含了一些重復(fù)的元素?,F(xiàn)在我們的目的是從數(shù)組中刪除重復(fù)的元素。
為了方便起見,建議您將兩個指針變量分別設(shè)置為I和J,以便從左到右巡回。如果I記錄了要留下的元素數(shù)量;j記錄訪問的所有元素的數(shù)量。I總是在j后面。即i=j。這會將下一個元素指定給上一個元素。L.data[i]=L.date[j]不會產(chǎn)生重復(fù)的值,因此可以刪除所有重復(fù)的元素。
具體的代碼算法如下:
Bool DeleteSame(SeqList L) {
I==0)return false;//出口條件放在第一句話里,程序運行得更快,代碼簡潔明了
Int i、j;//I訪問要保留的元素,j訪問所有元素
For(i=0,j=1;J L.lengthj)
I[i]!=L.data[j]) //尋找與上一個元素值不同的下一個元素
l . data[I]=l . data[j];//找到后。向前移動元素
l . length=I 1;//I是數(shù)組下標(biāo),從0開始,數(shù)組長度加1,反映下標(biāo)和長度差1的關(guān)系
Return true
}程式中的j會詢問您從1開始執(zhí)行什么,因為無論元素0和元素1是否相同,元素0都必須永遠(yuǎn)保留,而刪除重復(fù)值的元素必須從元素1開始。
程序在for循環(huán)中進入if語句后,可以比較第一個元素1和第二個元素2,如果兩個數(shù)字不相同(即兩個值不重復(fù)),則兩個數(shù)字都可以留下。默認(rèn)情況下,將保留第一個元素。
到達(dá)語句L.data[ i]=L.data[j]時,I自動從0更改為1,j也變?yōu)?。這將成為L.data[1]=L.data[1],因此也留下了元素2。1號元素和2號元素不一樣,所以兩個元素都留下來了。在這個for循環(huán)中,j一直通過到最后。語句的結(jié)束條件是,只有當(dāng)j等于線性表的長度時,才會從for循環(huán)語句中彈出。
再次運行For語句時,j、j將從原始位置1更改為位置2、I或原始位置1。此時,比較兩個位置的數(shù)量后,2和2是相同的,因此除非進入if語句,否則無法指定值,也無法存儲數(shù)據(jù)。I仍然在1個位置,j變成3個位置,相當(dāng)于刪除第二個位置的2。
再次在for循環(huán)中執(zhí)行if語句時,位置1的位置2和位置3的值不重復(fù),進入循環(huán)后,I首先加1,然后變成2位置,因此J的位置3的數(shù)字3被分配給位置2,位置2存儲元素3。
這樣依次遍歷,i=j始終將下一個元素分配給前面,從而避免重復(fù)值。
1.《【0號元素】如何從排序順序表中刪除所有重復(fù)的元素》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識,僅代表作者本人觀點,與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。
2.《【0號元素】如何從排序順序表中刪除所有重復(fù)的元素》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。
3.文章轉(zhuǎn)載時請保留本站內(nèi)容來源地址,http://f99ss.com/gl/2578610.html