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

来源:互联网 发布:双十一淘宝秒杀怎么弄 编辑:程序博客网 时间:2024/06/02 00:45

题目描述

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

输入

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

输出

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

示例输入

125 2 5 3 3 4 2 5 7 5 4 3

示例输出

55 2 3 4 7

提示

用尽可能少的时间和辅助存储空间。

#include <stdio.h>
#include <stdlib.h>
#include<malloc.h>
#define LISTINCREASMENT 100
#define LISTSIZE 10
#define OVERFLOW -1
#define OK 1
typedef int ElemType;
typedef struct
{
    ElemType *elem;
    int length;
    int listsize;
}Sqlist;
int SqInitialList(Sqlist &L)//顺序表的初始化;
{
    L.elem=(ElemType *)malloc(LISTSIZE*sizeof(ElemType));
    if(!L.elem) exit(OVERFLOW);
    L.length=0;
    L.listsize=LISTSIZE;
    return OK;
}
int ListInsert(Sqlist &L,int i,ElemType e)//顺序表元素的添加;
{
    if(i<1||i>L.length+1)printf("ERROR!");
    if(L.length>=L.listsize)
    {
        ElemType*newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREASMENT)*sizeof(ElemType));//动态变量的空间扩充;
        if(!newbase) return OVERFLOW;      //判断是否空间开辟成功;
        L.elem=newbase;            
        L.listsize+=LISTINCREASMENT;
    }
    ElemType*q=&(L.elem[i-1]);
    ElemType*p;
    for(p=&(L.elem[L.length-1]);p>=q;--p)
        *(p+1)=*p;
        *q=e;
        ++L.length;
        return OK;
}

void purge(Sqlist &L)//顺序表相同元素的删除,位移算法;
{
     int i,b,j,k;
    for(i=0;i<L.length-1;i++)
    {
           j=i+1;
           while(j<L.length)
            if(L.elem[j]!=L.elem[i])  ++j;
            else
           {
               for(k=j+1;k<L.length;++k)
               L.elem[k-1]=L.elem[k];
               --L.length;
           }
    }
}
int main()
{
   Sqlist L;//顺序表的定义;
   int t=1,d,n;
   scanf("%d",&n);
   SqInitialList(L);//顺序表的初始化;
   for(t=1;t<=n;t++)
   {
       scanf("%d",&d);
       ListInsert(L,t,d);//顺序表元素的添加;
   }
   purge(L);//顺序表相同元素删除后的顺序表;
  printf("%d\n",L.length);//此顺序表的长度;
  for(t=1;t<=L.length;t++)//顺序表的所有元素输出;
  if(t!=L.length)
    printf("%d ",L.elem[t-1]);
  else
    printf("%d\n",L.elem[t-1]);
    return 0;
}

0 0
原创粉丝点击