一、无返回值的增删改查(且成员elem以指针形式)
#include <stdio.h>
#include <malloc.h>
#define list_init_size 100
#define add_list 10
#define ERROR 0
#define OK 1
typedef int Elemtype;
typedef struct{
Elemtype *elem;
int length;
int listsize;
}sqlist;
void Initlist(sqlist *L) //初始化
{
L->elem=(Elemtype *)malloc(list_init_size*sizeof(Elemtype));
if(!L->elem)
printf("error");
L->length=0;
L->listsize=list_init_size;
}
void listinsert(sqlist *L,int i,Elemtype e) //插入
{
Elemtype *p,*q,*newbase;
if(i<1||i>L->length+1)
printf("error");
if(L->length>=L->listsize)
{
newbase=(Elemtype *)realloc(L->elem,(L->listsize+add_list)*sizeof(Elemtype));
L->elem=newbase;
L->listsize+=add_list;
}
q=&(L->elem[i-1]);
for(p=&(L->elem[L->length-1]);p>=q;--p)
{
*(p+1)=*p;
}
*q=e;
L->length++;
}
void deletelist(sqlist *L,int i) //删除
{
int j;
if(i<1||i>L->length)
printf("error");
else
{
for(j=i;j<=L->length-1;j++)
{
L->elem[j-1]=L->elem[j];
}
L->length--;
}
}
int searchlist(sqlist L,int e) //查找
{
int i;
for(i=0;i<L.length;i++)
{
if(L.elem[i]==e)
return i+1;
}
return 0;
}
void dellist(sqlist *L) //删除相邻相同数据
{
int i=0,j;
while(i<L->length-1)
{
if(L->elem[i]==L->elem[i+1])
{
for(j=i+1;j<L->length;j++)
{
L->elem[j-1]=L->elem[j];
}
L->length--;
}
else
i++;
}
}
void changelist(sqlist *L,int i,int e)//修改
{
if(i<1||i>L->length)
{
printf("error");
}
L->elem[i]=e;
}
int main()
{
sqlist L;
int i=3;
int e=8;
int j;
int search;
Initlist(&L);
for(j=0;j<5;j++)
{
scanf("%d",&L.elem[j]);
L.length++;
}
listinsert(&L,i,e);
for(j=0;j<L.length;j++)
{
printf("%d ",L.elem[j]);
}
printf("\n");
deletelist(&L,i);
for(j=0;j<L.length;j++)
{
printf("%d ",L.elem[j]);
}
printf("\n");
dellist(&L);
for(j=0;j<L.length;j++)
{
printf("%d ",L.elem[j]);
}
printf("\n");
changelist(&L,2,7);
for(j=0;j<L.length;j++)
{
printf("%d ",L.elem[j]);
}
printf("\n");
printf("%d",searchlist(L,5));
}
#include <stdi