假如结构体数组中的数据为:3 3 5 5 5 3 7 0 2 5 ,删除后的结构体数组中的数据为:3 5 3 7 0 2 5
用个土方法吧,先吧结构体的数据截取出来,放在数组里遍历。在截取该数组的足后一个对象来遍历比较是否有相同的,有就删除,没有就吧该对象存放在新的数组中。
如果你的数据最大小于数组的长度则可以这样实现。
思想: 根据拆装箱思想,先统计各个数据重复个数,再删除重复数据
#include
#include
using namespace std;
int main(){
int a[] = {3, 3, 5, 5, 5 ,3 ,7, 0 ,2, 5 };
int n = sizeof(a) / sizeof(int);
int *p = new int[n];
//3,3
memset(p, 0, n * sizeof(int));
for (int i = 0; i < n; i++){
p [a[i]] ++;
cout << p[i] << ",";
}
int count = 0;
for (int k = 0; k < n; k++)
{
if (p[k] >= 1){
a[count++] = k;
}
}
cout << "删除后的数组" << endl;
cout << "长度: " << count << endl;
cout << "数据: ";
for (int k = 0; k < count; k++)
{
cout << a[k] << ", ";
}
delete p;
getchar();
return 0;
}
如果不满足第一种方法,则用下面这种,时间复杂度取决于快排
思想:先排序,后挑选不重复的数据
#include
#include
using namespace std;
int cmp(const void a, const void *b){
return((int *)a - *(int *)b);
}
void show(int a[], int n){
for(int i = 0; i < n; i++) {
cout << a[i] << ",";
}
}
int main(){
//fun1();
int a[] = {3, 3, 5, 5, 5 ,3 ,7, 0 ,2, 5 };
int n = sizeof(a) / sizeof(int);
int *p = new int[n];
qsort(a, n, sizeof(a[0]),cmp);
//show(a, n);
int count = 0;
for(int i = 0; i < n; i++) {
if( a[i] == a[i + 1]) {
continue;
}
p[count++]= a[i];
}
show(p, count);
getchar();
return 0;
}
0
如果你的数据最大小于数组的长度则可以这样实现。
思想: 根据拆装箱思想,先统计各个数据重复个数,再删除重复数据
#include
#include
using namespace std;
int main(){
int a[] = {3, 3, 5, 5, 5 ,3 ,7, 0 ,2, 5 };
int n = sizeof(a) / sizeof(int);
int *p = new int[n];
//3,3
memset(p, 0, n * sizeof(int));
for (int i = 0; i < n; i++){
p [a[i]] ++;
cout << p[i] << ",";
}
int count = 0;
for (int k = 0; k < n; k++)
{
if (p[k] >= 1){
a[count++] = k;
}
}