#include<stdlib.h>
#include<stdio.h>
#include<malloc.h>
#define INIT_LIST_SIZE 100
#define OVERFLOW 1
typedef int elemtype;
typedef struct sqlist{
elemtype *elem;
int length;
int list_size;
}seqlist,*pseqlist;
void Inital_list(pseqlist l)
{
l->elem=(elemtype *)malloc(INIT_LIST_SIZE*sizeof(elemtype));
if(!l->elem)exit(OVERFLOW);
l->length=0;
l->list_size=INIT_LIST_SIZE;
}
void Creat_list(pseqlist l,pseqlist p)
{
scanf("%d",&l->length);
scanf("%d",&p->length);
for(int i=0;i<l->length;i++)
{
scanf("%d",&l->elem[i]);
}
for(int j=0;j<p->length;j++)
{
scanf("%d",&p->elem[j]);
}
}
void prit_list(pseqlist l)
{
for(int i=0;i<l->length;i++)
{
printf("%d ",l->elem[i]);
}
}
void Delete_list(pseqlist la,pseqlist lb,void(*D)(pseqlist l,int i))
{
for(int i=0;i<la->length;i++)
{
for(int j=0;j<lb->length;j++)
{
if(la->elem[i]==lb->elem[j])
{
(*D)(la,i);
}
}
}
}
void Delete_member(pseqlist l,int i)
{
for (;i<=l->length;i++)
{
l->elem[i-1]=l->elem[i];
}
l->length--;
}
int Empty(pseqlist l)
{
if(l->length==0)
{
return NULL;
}
return 0;
}
int main()
{
seqlist a;
seqlist b;
Inital_list(&a);
Inital_list(&b);
Creat_list(&a,&b);
Delete_list(&a,&b,Delete_member);
prit_list(&a);
return 0;
}
注意这段代码中的void Delete_list(pseqlist la,pseqlist lb,void(*D)(pseqlist l,int i))与void Delete_member(pseqlist l,int i)
因为刚开始的时候有定义自定义结构体类型
typedef struct sqlist{
elemtype *elem;
int length;
int list_size;
}seqlist,*pseqlist;
la是pseqlist类型,所以la就是一个地址;
所以回调void Delete_member(pseqlist l,int i)(即(*D)(la,i);)的时候
绝对不能用(*D)(&la,i);
这样的话就只是形参是一个指针类型的地值的数值,而不是整个结构体的指针;