SDUT 1130 数据结构上机测试1:顺序表的应用

 

 

数据结构上机测试1:顺序表的应用

Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description

在长度为n(n<1000)的顺序表中可能存在着一些值相同的“多余”数据元素(类型为整型),编写一个程序将“多余”的数据元素从顺序表中删除,使该表由一个“非纯表”(值相同的元素在表中可能有多个)变成一个“纯表”(值相同的元素在表中只能有一个)。

Input

第一行输入表的长度n;
第二行依次输入顺序表初始存放的n个元素值。

Output

第一行输出完成多余元素删除以后顺序表的元素个数;
第二行依次输出完成删除后的顺序表元素。

Sample Input

12
5 2 5 3 3 4 2 5 7 5 4 3

Sample Output

5
5 2 3 4 7

提示:本题要求完成顺序表中多余元素的删除,具体可以参照之前的移位算法和建表算法,都可以实现顺序表的元素删除操作。

代码实现如下(gcc):
#include<stdio.h>
#include<stdlib.h>
int i,j,k,c=0;
typedef struct
{
    int data[10010];
} SL;

void creatlist(SL *l,int n)
{
    for(i=0; i<n; i++)
    {
        scanf("%d",&l->data[i]);
    }
}

int deletelist(SL *l,int n)
{
    for(i=0; i<n-1; i++)
    {
        for(j=i+1; j<n; j++)
        {
            if(l->data[i]==l->data[j])
            {
                c++;
                n--;
                for(k=j; k<n; k++)
                {
                    l->data[k]=l->data[k+1];
                }
                j--;
            }
        }
    }
    return n;
}

void printlist(SL *l,int n)
{
    for(i=0; i<n; i++)
    {
        i<n-1? printf("%d ",l->data[i]):printf("%d
",l->data[i]);
    }
}

int main()
{
    int n,m;
        scanf("%d",&n);
        m=n;
        for(i=0;i<n;i++)
        {
        SL l;
        creatlist(&l,n);
        n=deletelist(&l,n);
        printf("%d
",m-c);
        printlist(&l,n);
        }
    return 0;
}


/***************************************************
Result: Accepted
Take time: 0ms
Take Memory: 156KB
****************************************************/
原文地址:https://www.cnblogs.com/jkxsz2333/p/9487108.html