#include<stdio.h>
#include<stdlib.h>
#define maxsize 100
typedef struct
{
int *date;
int len;
}sqlist;
void initsqlist(sqlist *l) //构造表
{
l->date=(int *)malloc(maxsize*sizeof(int));
l->len=0;
}
void clearlist(sqlist l)
{
int i;
for(i=0;i<l.len;i++)
l.date[i]=0;
}
void destroysqlist(sqlist *l)//删除表
{
if(l->date)
{
free(l->date);
l->len=0;
}
}
void listinsert(sqlist *l,int i,int e)
{
int j=0;
if(i<1||i>l->len)
{
printf("插入位置不合法!\n");
exit(0);
}
if(i==l->len)//插入元素位置在末尾
{
l->date=(int *)realloc(l->date,maxsize+10*sizeof(int));
l->date[l->len]=e;
}
else
{
for(j=l->len-1;j>=i-1;j--)
l->date[j+1]=l->date[j];
l->date[i-1]=e;
}
l->len+=1;
}
void destory(sqlist *l,int i,int *x)//删除元素
{
int j;
if(i<0||i>=l->len)//删除位置不合法
{
printf("删除位置不合法!\n");
exit(0);
}
*x=l->date[i-1];
l->date[i-1]=0;//当删除位置在末尾时
for(j=i;j<l->len;j++)
l->date[j-1]=l->date[j];
l->len-=1;
}
int locatelist(sqlist l,int e)//查询
{
int i;
for(i=0;i<l.len;i++)
{
if(l.date[i]==e)
return 1;
}
return 0;
}
void print(sqlist l)//输出
{
int i;
for(i=0;i<l.len;i++)
printf("%d ",l.date[i]);
printf("\n");
}
int main()
{
int i,num;
sqlist head;
initsqlist(&head);//构造表
printf("输入表的长度:\n");
scanf("%d",&head.len);
printf("输入元素数据:\n");
for(i=0;i<head.len;i++)
scanf("%d",&head.date[i]);
printf("输入要插入的位置和元素:\n");
scanf("%d %d",&i,&num);
listinsert(&head,i,num);
print(head);//输出元素
printf("输入要删除的元素位置:\n");
scanf("%d",&i);
destory(&head,i,&num);
printf("删除位置的元素:%d\n",num);
print(head);
printf("输入要查询的数据:\n");
scanf("%d",&num);
if (locatelist(head,num))//查询元素
printf("元素存在。\n");
else
printf("元素不存在!\n");
printf("清空表:");
clearlist(head);//清空表
print(head);
destroysqlist(&head);//销毁表
return 0;
}
转载于:https://my.oschina.net/u/3026393/blog/784221