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

 

#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 SqInitial(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,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 i,n,d;
 scanf("%d",&n);
 SqInitial(L);
 for(i=1;i<=n;i++)
 {
  scanf("%d",&d);
  ListInsert(L,i,d);
 }
 purge(L);
 printf("%d\n",L.length);
 for(i=1;i<=L.length;i++)
 {
  printf("%d%c",L.elem[i-1],(i==L.length)?'\n':' ');
 }
 return 0;
}

/**************************************
 Problem id : SDUT OJ A
 User name : wy150428臧志栋
 Result  : Accepted
 Take Memory : 284K
 Take Time : 0MS
 Submit Time : 2016-08-02 20:25:32 
**************************************/

 

三个函数

SqInitial 用于创建与清空顺序表

ListInsert 用于给已经创建好的顺序表添加数据,并且对于输入结果进行判断

purge 逐一的浏览顺序表 若有重复 指针后移动

该算法的算法的时间复杂度为: O(L.length3)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值