PTA: jmu-ds- 顺序表删除重复元素

设计一个算法,从顺序表中删除重复的元素,并使剩余元素间的相对次序保存不变。

  • 输入格式: 第一行输入顺序表长度。 第二行输入顺序表数据元素。中间空格隔开。
  • 输出格式:数据之间空格隔开,最后一项尾部不带空格。
  • 输出删除重复元素后的顺序表。
  • 你需要实现的函数有下面三个:

函数接口定义:

void CreateSqList(List &L,int a[],int n);  //创建顺序表
void DispSqList(List L);//输出顺序表
void DelSameNode(List &L) ;//删除顺序表重复元素
  • L :顺序表
  • a :输入数组
  • n :输入数据个数

裁判测试程序样例:

#define maxsize 50
#include 
using namespace std;
typedef struct{
    int data[maxsize];
    int length;
}SqList;
typedef SqList *List;
void CreateSqList(List &L,int a[],int n);
void DispSqList(List L);
void DestroyList(List &L);
void DelSameNode(List &L) ;
void DestroyList(List &L){
    delete L;
}
int main()
{
    int i,n;
    int a[maxsize];
    List L;
    cin>>n; 
    for(i=0;i>a[i];
     CreateSqList(L,a,n)  ;
     DelSameNode(L) ;
     DispSqList(L);  
     DestroyList(L);
}

/* 请在这里填写答案 */

输入样例:

5
1 2 3 2 1

输出样例:

1 2 3

代码如下:

void CreateSqList(List &L,int a[],int n)//创建顺序表
{
    L=new SqList;
    L->length=n;//设置顺序表的长度
    for(int i=0;i>a[i];
        L->data[i]=a[i];
    }
}
void DispSqList(List L)//输出顺序表
{
    int i=0;
    if(L->length!=0)//避免输出空的顺序表
    {
        cout<data[i];
        i++;
    }
    while(ilength)//遍历顺序表,输出剩余元素
    {
        cout<<" "<data[i];
        i++;
    }
    cout<length;i++)//遍历原顺序表的每个元素
    {
        int j;
        for(j=0;jdata[i]==L->data[j])//若不重复,则j会在最后一次更新时等于k,达到保留元素的效果
            {
                break;
            }
        }
        if(j==k)//若j等于k,说明当前元素L->data[i]不重复,将其添加到去重后的顺序表中,否则会直接跳过该元素达到删除的效果
        {
            L->data[k]=L->data[i];
            k++;
        }
    }
    L->length=k;//更新数组长度
}

 PS:

1)List &L 这种参数声明方式允许函数直接修改调用者提供的指针,并且避免了不必要的复制开销。

你可能感兴趣的:(C语言PTA习题,算法,c++,数据结构)