用C语言编写一个算法从一个顺序列表中提取单个元素(这个元素可能是重复的)(在线等)

比如:{5,5,6,6,8,8,8,8,12,12}提取后应该为{5,6,8,12}
2025-02-25 15:19:20
推荐回答(3个)
回答1:

既然已经排序好了的就简单了
#include
void get(int *numIn,int len,int * numOut,int *outLen)
{
int i,j;
j = 0;
i = 0;
*(numOut + j) = *(numIn + i);
for(i = 0;i < len;i++)// for(i = 1;i < len;i++) 更好
{
if(*(numOut + j)) != *(numIn + i))
{
j++;
*(numOut + j) = *(numIn + i);
}
}
*outLen = j + 1;//长度为最大下标加 1
}
void main()
{
int i;
int numList[10] = {5,5,6,6,8,8,8,8,12,12};
int numOut[10] = {0};
int outLen = 0;
get(numList,10,numOut,&outLen);
for(i = 0;i < outLen;i++)
{
printf("%d ",*(outLen + i));
}
}

回答2:

这个简单,假设是数组的话并且已经排好序,如你的示例所说。

#include
#include
int* unique (int* first, int* last);
int main() {
    int a[] = {5,5,6,6,8,8,8,8,12,12};
    int * end = unique(a, a + 10);
    for (int* start = a; start != end; start++)
    {
        printf("%d ", *start);
    }
    return 0;
}
int* unique (int* first, int* last)
{
 if (first==last) return last;
 
 int * result = first;
 while (++first != last)
 {
   if (!(*result == *first))
     *(++result)=*first;
 }
 return ++result;
}

回答3:

http://jingyan.baidu.com/article/0aa22375b3c5a688cc0d6423.html 在这个基础上修改一下就能做到,用到它的查询和输出。思考一下,如果不懂可以追问。