题目描述
输入
第二行依次输入顺序表初始存放的n个元素值。
输出
第二行依次输出完成删除后的顺序表元素。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define maxsize 1000
int i;
typedef int element;
typedef struct
{
element *elem;//elem相当于数组名此时还未开辟空间
int length;
int listsize;
}splist;
int intilist(splist *l)
{
l->elem=(element*)malloc(maxsize*sizeof(element));
if(!l->elem) return -1;
l->length=0;
l->listsize=maxsize;
return 0;
}
void insert(splist*l,int k)
{
for(i=0;i<=k-1;i++)
scanf("%d",&l->elem[i]);
l->length=k;
}
int Del(splist *l,int k)
{
element *p,*q;
if(k<0||k>l->length)
return -1;
q=l->elem+l->length;
for(p=&(l->elem[k]);p<q;p++)
{
*p=*(p+1);
}
l->length--;
return 1;
}
void search(splist*l,int k)
{
element *p,*q;
for(p=l->elem;p<l->elem+l->length;p++)
{
for(q=p+1;q<l->elem+l->length;q++)
{
if(*p==*q)
{
Del(l,(q-l->elem));//传进来的是结构体指针,l就是地址类比于链表struct node*head,head->next
q--;
}
}
}
}
void display(splist *l)
{ printf("%d\n",l->length);
for(i=0;i<l->length-1;i++)
printf("%d ",l->elem[i]);
printf("%d\n",l->elem[l->length-1]);
}
int main()
{
splist l;
int n;
scanf("%d",&n);
intilist(&l);//建表
insert(&l,n);//插入
search(&l,n);//查询,删除
display(&l);//输出
return 0;
}