您的位置:首页 > 其它

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

2018-03-26 19:57 295 查看

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

Time Limit: 1000 msMemory Limit: 650 KiB[align=center][/align]

Problem Description

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

Input

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

Output

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

Sample 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

Sample Output

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

Hint

 

Source


#include<bits/stdc++.h>
using namespace std;
typedef struct{
    int *date;
    int length;
    int listsize;
}List;
void creat(List *L, int n){//创建顺序表
    //L -> date = (int *)malloc((n + 10)*sizeof(int));
    L -> date = new int [101];//动态数组
    if(!L -> date)exit(0);
    L -> length = 0;
    for(int i = 0; i < n; i++){
        cin >> L -> date[i];
        L -> length++;
    }
    L -> listsize = 101;
}
void Listdelete(List *L){//元素删除
    int *p, *q;
    p = L -> date;
    q = L -> date + L -> length;
    for(; p < q; p++){
        for(int *t = p + 1; t < q; t++){
            if(*p == *t){
                for(int *k = t; k < q - 1; k++){
                    *k = *(k + 1);
                }
                L -> length--;
                q--;
                t--;
            }
        }
    }
}
int main(){
    int t, n;
    cin>>t;
    while(t--){
        cin>>n;
        List r;//一开始写的是一个指针变量  样例正确 Runtime Error  具体在题后
        creat(&r, n);
        Listdelete(&r);
        for(int i = 0; i < r.length; i++){
            if(i == r.length - 1)cout<<r.date[i]<<endl;
            else cout<<r.date[i]<<' ';
        }
    }
    return 0;
}

/*int main(){初学不是太理解
    int t, n;
    cin>>t;
    while(t--){
        cin>>n;
        List *r;
        creat(r, n);
        Listdelete(r);
        for(int i = 0; i < r->length; i++){
            if(i == r->length - 1)cout<<r->date[i]<<endl;
            else cout<<r->date[i]<<' ';
        }
    }
    return 0;
}*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: