顺序表应用1:多余元素删除之移位算法

来源:互联网 发布:企业网络建设方案 编辑:程序博客网 时间:2024/06/03 13:47

顺序表应用1:多余元素删除之移位算法
Time Limit: 1000MS Memory Limit: 650KB
Submit Statistic
Problem Description

一个长度不超过10000数据的顺序表,可能存在着一些值相同的“多余”数据元素(类型为整型),编写一个程序将“多余”的数据元素从顺序表中删除,使该表由一个“非纯表”(值相同的元素在表中可能有多个)变成一个“纯表”(值相同的元素在表中只保留第一个)。
要求:
1、必须先定义线性表的结构与操作函数,在主函数中借助该定义与操作函数调用实现问题功能;
2、本题的目标是熟悉顺序表的移位算法,因此题目必须要用元素的移位实现删除;
Input

第一行输入整数n,代表下面有n行输入;
之后输入n行,每行先输入整数m,之后输入m个数据,代表对应顺序表的每个元素。
Output

输出有n行,为每个顺序表删除多余元素后的结果
Example Input

4
5 6 9 6 8 9
3 5 5 5
5 9 8 7 6 5
10 1 2 3 4 5 5 4 2 1 3
Example Output

6 9 8
5
9 8 7 6 5
1 2 3 4 5

#include <iostream>#include <stdio.h>#include <stdlib.h>#define OK 1#define ERORR 0using namespace std;typedef int element;typedef int Status;#define LISTSIZE 10000#define max   100typedef struct{    element *elem;    int length;    int listsize;} Sqlist;Sqlist l;Status InitList(Sqlist &L)   ///初始化顺序表{    L.elem= (element *)malloc(LISTSIZE *sizeof(element));    if(!L.elem) exit(ERORR);    L.length=0;    L.listsize=LISTSIZE;    return OK;}void Create(Sqlist &L, element m)    ///输入数据{    int i;    for(i=0; i<m; i++)    {        cin>>L.elem[i];    }    L.length=m;}void  Delete(Sqlist &L,int t)           ///删除移位{    int k;    for(k=t;k<L.length-1;k++)        {L.elem[k]=L.elem[k+1];}}void delete1(Sqlist &L)       ///删除{    int i,j;    int t;    for(i=0; i<L.length; i++)    {        t=0;        for(j=0; j<i; j++)        {            if(L.elem[i]==L.elem[j])            {                t=i;                Delete(l,t);                L.length--;                i--;                break;            }        }    }}void display(Sqlist &L)     ///输出{    int i;    for(i=0; i<L.length-1; i++)    {        cout<<L.elem[i]<<" ";    }    cout<<L.elem[L.length-1]<<endl;}int main()     ///主函数{    int m,n;    cin>>n;    while(n--)    {        cin>>m;        InitList(l);        Create(l,m);        delete1(l);        display(l);    }    return 0;}
0 0