#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 //定义Sqlist别名
{
ElemType *elem;
int length;
int listsize;
int incrementsize;
}Sqlist;
int SqInitList(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 purg(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;
}
}
}
/*ElemType GetElem(Sqlist &L,int i)
{
if(i<1||i>L.length) printf("ERROR!");
else
{
return L.elem[i-1];
}
}*/
int main()
{
Sqlist L;
int t=1,d,n;
SqInitList(L);
scanf("%d",&n);
for(t=1;t<=n;t++) //建表
{
scanf("%d",&d);
ListInsert(L,t,d); //加数据
}
purg(L);
printf("%d\n",L.length); //输出表长
for(t=1; t<=L.length; t++) //读表
{
if(t==L.length)printf("%d\n",L.elem[t-1]);//最后一个数据换行
else printf("%d ",L.elem[t-1]);
}
return 0;
}
数据结构上机测试1:顺序表的应用
最新推荐文章于 2017-09-21 10:49:36 发布