标题中有序的表是数组,下面是从小到大排列的数组,其中包含了一些重复的元素。现在我们的目的是从数组中删除重复的元素。
为了方便起见,建议您将两个指针变量分别设置为I和J,以便从左到右巡回。如果I记录了要留下的元素数量;j记录访问的所有元素的数量。I总是在j后面。即i=j。这会将下一个元素指定给上一个元素。L.data[i]=L.date[j]不会产生重复的值,因此可以删除所有重复的元素。
具体的代码算法如下:
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是数组下标,从0开始,数组长度加1,反映下标和长度差1的关系
Return true
}程式中的j会询问您从1开始执行什么,因为无论元素0和元素1是否相同,元素0都必须永远保留,而删除重复值的元素必须从元素1开始。
程序在for循环中进入if语句后,可以比较第一个元素1和第二个元素2,如果两个数字不相同(即两个值不重复),则两个数字都可以留下。默认情况下,将保留第一个元素。
到达语句L.data[ i]=L.data[j]时,I自动从0更改为1,j也变为1。这将成为L.data[1]=L.data[1],因此也留下了元素2。1号元素和2号元素不一样,所以两个元素都留下来了。在这个for循环中,j一直通过到最后。语句的结束条件是,只有当j等于线性表的长度时,才会从for循环语句中弹出。
再次运行For语句时,j、j将从原始位置1更改为位置2、I或原始位置1。此时,比较两个位置的数量后,2和2是相同的,因此除非进入if语句,否则无法指定值,也无法存储数据。I仍然在1个位置,j变成3个位置,相当于删除第二个位置的2。
再次在for循环中执行if语句时,位置1的位置2和位置3的值不重复,进入循环后,I首先加1,然后变成2位置,因此J的位置3的数字3被分配给位置2,位置2存储元素3。
这样依次遍历,i=j始终将下一个元素分配给前面,从而避免重复值。
1.《【0号元素】如何从排序顺序表中删除所有重复的元素》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《【0号元素】如何从排序顺序表中删除所有重复的元素》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/gl/2578610.html