一、无返回值的增删改查(且成员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));
}
二、有返回值的增删改查(且成员elem以数组出现)
#include <stdio.h>
#define list_init_size 100
#define add_list 10
typedef int Elemtype;
typedef struct{
Elemtype elem[list_init_size];
Elemtype length;
}sqlist;
void initlist(sqlist L)//初始化
{
L.length=0;
}
sqlist insertlist(sqlist L,Elemtype i,Elemtype e)//插入
{
int k;
if(i<1||i>L.length+1)
printf("error1");
for(k=L.length-1;k>=i-1;k--)
{
L.elem[k+1]=L.elem[k];
}
L.elem[i-1]=e;
L.length++;
return L;
}
sqlist deletelist(sqlist L,Elemtype i)//删除
{
if(i<1||i>L.length)
printf("error");
for(;i<L.length-1;i++)
{
L.elem[i-1]=L.elem[i];
}
L.length--;
return L;
}
sqlist changelist(sqlist L,Elemtype i,Elemtype e)//修改
{
if(i<1||i>L.length)
printf("error");
L.elem[i-1]=e;
return L;
}
int searchlist(sqlist L,Elemtype e)//查找
{
int i;
for(i=0;i<L.length&&L.elem[i]!=e;i++);
if(i<L.length)
return i+1;
else
return 0;
}
sqlist dellist(sqlist L)//删除相邻相同数据
{
int i=0,j;
while(i<L.length-2)
{
if(L.elem[i]==L.elem[i+1])
{
for(j=i;j<L.length;j++)
{
L.elem[j]=L.elem[j+1];
}
--L.length;
}
else
++i;
}
return L;
}
sqlist dellist_two(sqlist L)//删除顺序表中相同的数(可相邻也可不相邻,100以内)
{
int i=0,j=0;
int c;
for(L.length=1,i=0;i<5;i++)
{
scanf("%d",&c);
//L.length++;
L.elem[c]=1;
}
return L;
}
void list_display(sqlist L)//输出
{
int j;
for(j=0;j<L.length-1;j++)
{
printf("%d ",L.elem[j]);
}
printf("\n");
}
int main()
{
sqlist L;
int i;
int search;
initlist(L);
printf("input 5 numbers:\n");
for(L.length=1,i=0;i<5;i++)
{
scanf("%d",&L.elem[i]);
L.length++;
}
printf("在第二位置插入7\n");
L=insertlist(L,2,7);
list_display(L);
printf("删除第二个位置的数\n");
L=deletelist(L,2);
list_display(L);
printf("将第二个数改为8\n");
L=changelist(L,2,8);
list_display(L);
printf("寻找1\n");
search=searchlist(L,1);
printf("%d\n",search);
printf("删除相邻相同的数\n");
L=dellist(L);
list_display(L);
printf("输入5个数\n");
for(i=0;i<=99;i++)
{
L.elem[i]=0;
}
L=dellist_two(L);
printf("删除顺序表中相同的数,100以内");
for(i=1;i<=99;i++)
{
if(L.elem[i]==1)
printf("%d ",i);
}
return 0;
}