删除数组中相同的数据元素 C语言 比如1 1 1 1 1 2 2 3 1 1 4 结果是1 2 3 4#include int main() { int a[10],i,j,k,n=10; for(i=0;i

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/30 11:43:59

删除数组中相同的数据元素 C语言 比如1 1 1 1 1 2 2 3 1 1 4 结果是1 2 3 4#include int main() { int a[10],i,j,k,n=10; for(i=0;i
删除数组中相同的数据元素 C语言 比如1 1 1 1 1 2 2 3 1 1 4 结果是1 2 3 4
#include
int main()
{
int a[10],i,j,k,n=10;
for(i=0;i

删除数组中相同的数据元素 C语言 比如1 1 1 1 1 2 2 3 1 1 4 结果是1 2 3 4#include int main() { int a[10],i,j,k,n=10; for(i=0;i
修订版:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int T;
// 打印数组
void Print(T* beg,T* end,const char* msg)
{
printf(msg);
while(beg != end)
printf("%d ",*beg++);
putchar('\n');
}
// 把元素向左移以覆盖重复元素
void MoveUp(T* dest,T* src,T* end)
{
while(src != end)
*dest++ = *src++;
}
// 去重
T* Unique(T* beg,T* end)
{
T* dupBeg = end;
if(end - beg <= 1)
return end;
while(++beg != end)
{
if(*(beg - 1) == *beg)
{
dupBeg = beg;
while(*++dupBeg == *(dupBeg - 1) && dupBeg != end);
if(dupBeg == end)
return beg;
else
{
MoveUp(beg,dupBeg,end);
end -= dupBeg - beg;
}
}
}
return end;
}
// 求差集
T* SetDiff(T* a,T* endOfA,T* b,T* endOfB,T* c)
{
T* p;
for(; a != endOfA; ++a)
{
for(p = b; p != endOfB; ++p)
if(*p == *a)
break;
if(p == endOfB)
*c++ = *a;
}
return c;
}
inline int Cmp(const void* lhs,const void* rhs)
{
return *(const T*)lhs - *(const T*)rhs;
}
int main()
{
// 只是个示例,元素个数很多的话可以用动态数组
T a[] = ,*endOfA = a + sizeof(a) / sizeof(a[0]);
T b[] = ,*endOfB = b + sizeof(b) / sizeof(b[0]);
T* c,*endOfC;
// 排序
qsort(a,endOfA - a,sizeof(T),Cmp);
qsort(b,endOfB - b,sizeof(T),Cmp);
// 去重
endOfA = Unique(a,endOfA);
endOfB = Unique(b,endOfB);
Print(a,endOfA,"Set A:");
Print(b,endOfB,"Set B:");
// c = a - b;
c = (T*)malloc(sizeof(T) * (endOfA - a));
endOfC = SetDiff(a,endOfA,b,endOfB,c);
Print(c,endOfC,"Difference of A & B:");
free(c);
return 0;
}
这样的话用C++更简单,直接set_difference:
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
using namespace std;
int main()
{
int a[] = ;
int b[] = ;
list<int> la(a,a + 6);
list<int> lb(b,b + 5);
list<int> lc;
// 排序
la.sort();
lb.sort();
// 去重
la.unique();
lb.unique();
// 求差集,存在lc中
set_difference(la.begin(),la.end(),lb.begin(),lb.end(),back_inserter(lc));
// 打印
copy(lc.begin(),lc.end(),ostream_iterator<int>(cout," "));
}
至于存储数据的数据结构,list,deque都是理想的选择,vector不太适合,因为你的数据量比较大,其他的就不用我说了吧,数据结构 + <algorithm> 就可以了,STL的算法和数据结构效率应该够高了吧,思路给你,具体的地方需要的话自己改一下.
如果嫌list是占用空间大的话可以用deque,但是unique和sort等方法就必须使用<algorithm>中的了,还有别忘了erase.

删除数组中相同的数据元素 C语言 比如1 1 1 1 1 2 2 3 1 1 4 结果是1 2 3 4#include int main() { int a[10],i,j,k,n=10; for(i=0;i C语言,删除数组中的重复元素设计算法,在数组r[n]中删除重复的元素,要求移动元素的次数较少并使剩余元素间的相对次序保持不变. 已知一个数组中的元素按元素值非递减有序排列,编写一个函数删除数组中多余的值相同的元素 C语言读取 未知长度 的矩阵并存入二维数组重点:测试文件中的数组元素由 空格隔开,每行代表矩阵中一行的数比如文件中数据0 15 2 7 91 9 7 4 512 3 8 3 14 5 6 8 25 9 1 4 10只懂一点c,哎还是不太明白 一维数组中所有偶数元素的平方根之和,A数组的数据为53,78,93,45,41,34,12,90,26,75.c语言 在matlab语言中,如何将两个数组内的数据重新组成一个数组,且在新的数组中,两原数组的元素间隔出现.如a=[1 2 3],b=[a b c],新的 数组c=[1 a 2 b 3 c] VB编程:随机生成10个互不相同的1~100之间的整数,存放在一维数组中,找出最大的元素,并从数组中删除该元素急啊,在线等答案,打下救命! 输入数字定义数组元素个数【题目描述】删除数组中所有值为0的元素,其后元素向数组首端移动序【输入数据】共两行第一行是一个整数 N:表示需要输入多少个数组元素,其中 1 怎样从一个二维数组中删除一列元素 C#语言 求一维数组中下标为奇数的元素之和. 求一维数组中各元素的平均值.C语言的 C#如何删除数组中的一个元素,剩余的元素组成新数组,数组名不变double[] arr = new double[n];需要删除的是第m+1个数据arr[m]求新数组arr.(新数组arr包含n-1个元素)m,n数值已知 (C语言用指针)从键盘输入一组数据存入数组a[3][3]中,求其主对角线下方元素之和. 编写程序,实现两个集合的交运算(用C语言)1、已知两个整数集合中的数据以递增次序分别存放在数组A,B中,编写程序实现两个集合的交运算(即取两个集合相同的数据元素),并把得到的交 C语言 【给数组中的元素按顺序编号】对数组 a[10] 中的十个整数从小到大进行连续编号,输出各个元素的编号.要求不能改变数组 a 中元素的顺序,且相同的整数要具有相同的编号.例如数组是: 整型数组a中有10个元素,整型数组b中有6个元素,编程将那些在数组a中而不在数组b的数据组成新数组c并输出 用c语言编写:从键盘输入10个数存入数组a中,统计数组下标是奇数且数组元素值为偶数的元素个数 c语言 填空//16、del函数的作用是删除有序数组a中的指定元素x,n为数组a的元素个数,函数返回删除后的数组a元素个数,请填空使程序完整.int del (int a[10],int n,int x){ int p=0,i ;while (x>=a[p]&&p c语言 对角线数据 输入一个5×5的数组,分别求其主对角线和辅对角线上元素之和