#include<iostream>
using namespace std;
#define InitSize 50
typedef int ElemType;
typedef struct{
ElemType *data;
int length, MaxSize;
}SqList;
void InitList(SqList &L)
{
L.data = new ElemType[InitSize];
L.length = 0;
L.MaxSize = InitSize;
}
bool Merge(SqList A, SqList B, SqList &C)
{
int i = 0, j = 0, k = 0;
if (A.length + B.length > C.MaxSize)
return false;
while( i < A.length && j < B.length)
{
if (A.data[i] <= B.data[j])
C.data[k++] = A.data[i++];
else
C.data[k++] = B.data[j++];
}
while (i < A.length) C.data[k++] = A.data[i++];
while (j < B.length) C.data[k++] = B.data[j++];
C.length = k;
return true;
}
void printList(SqList L)
{
for (int i = 0; i < L.length; i++)
cout << L.data[i] << " ";
cout << endl;
}
void delet(SqList C)
{int i=0,k=0;
while(i < C.length)
if(C.data[i]==C.data[i+1])
while(i<C.length)
{C.data[i]=C.data[i+1];
i++;}
k++;
C.length-=k;
}
int main()
{
SqList A;
InitList(A);
SqList B;
InitList(B);
A.length = 6; B.length = 5;
for (int i = 0; i < A.length; i++)
//A.data[i] = 2*i + 1;
cin>>A.data[i];
for (int i = 0; i < B.length; i++)
//B.data[i] = 2*(i + 1);
cin>>B.data[i];
SqList C;
InitList(C);
printList(A);
printList(B);
if (Merge(A,B,C))
{delet(C);
printList(C);}
return 0;
}
有
外层元素应该是k吧
原来程序逻辑是乱的,我调了一下你参考一下,有帮助请采纳谢谢!
void delet(SqList C)
{int i=0,k=0;
while(i < C.length-1)
if(C.data[i]==C.data[i+1]){
k=i;
while(k<C.length-1)
{C.data[k]=C.data[k+1];
k++;}
C.length-=1;
}
else
i++;
}
如果是删除元素的话,建议从最后面开始往前面遍历的比较好
我有一个简单粗暴的方法,Map集合只允许不重复的元素添加,如果是重复的元素添加是无效的,可以利用这个特性将你的数据全部添加到map集合中,然后遍历,这样就没有重复的元素了,这个方法在竞赛以及实战中用的特别多,有帮助望采纳。