delet函数有问题,求怎么将重复元素删掉?


#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集合中,然后遍历,这样就没有重复的元素了,这个方法在竞赛以及实战中用的特别多,有帮助望采纳。