以上为题目
题目代码为:
#include <stdio.h>
#include <stdlib.h>
#define Error 0
#define Max_size 10000
typedef int Element;
typedef struct//定义
{
Element *elem;//存储空间基址
int length;//当前长度
int listsize;//当前分配的储存容量
}Sqlist;
int Initlist(Sqlist *L)//构造一个空的线性表L
{
L->elem=(Element *)malloc(Max_size*sizeof(Element));
if(!L->elem)exit(Error);//存储分配失败
L->length=0;//空表长度为0
L->listsize = Max_size;//初始储存容量
return 0;
}
void Create(Sqlist *L,int k)//为表加入K个数据
{
int i;
for(i=0;i<k;i++)
{
scanf("%d",&L->elem[i]);
}
L->length=k;//当前表长为k
}
int Delete(Sqlist *L,int k)//移位删除表中指定元素
{
Element *p,*q;
if(k<1||k>L->length)return Error;//需要判断k的位置是否合法
q=L->elem+L->length;//q指向最后一位的后面
for(p=&(L->elem[k]);p<q;p++)//p指向被删除元素,
{
*p=*(p+1);//由被删除元素开始被覆盖
}
L->length--;//覆盖一个元素,表长度减一
return 1;
}
int Locatelist(Sqlist *L)//搜索是否有相同的元素,若有跳转至移位删除函数
{
Element *q,*p;
for(p=L->elem;p<L->elem+L->length;p++)//从表头开始,搜索至表尾
for(q=p+1;q<L->elem+L->length;q++)
{
if(*p==*q)
{
Delete(L,(q-L->elem));//(q-L->elem)为要删除元素的位序
q--;//移位之后还是从原位置开始搜索
}
}
}
void Display(Sqlist *L)//输出函数
{
int i;
printf("%d\n",L->length);
for(i=0;i<L->length;i++)
{
printf(i==L->length-1?"%d\n":"%d ",L->elem[i]);
}
}
int main()
{
int i,n;
Sqlist L;
scanf("%d",&n);
Initlist(&L);
Create(&L,n);
Locatelist(&L);
Display(&L);
return 0;
}
此代码为在Code::blocks中编译,函数中void Display(Sqlist *L)中也可为Sqlist &L