#include <stdio.h>
#define N 100
typedef struct{
char data;
int cur;
}SList;
void init_sl(SList slist[]){
int i;
for(i=0;i<N-1;i++)
{
slist[i].cur=i+1;
}
slist[N-1].cur=0;
}
int malloc_sl(SList slist[]){
int i=slist[0].cur;
if (i)
{
slist[0].cur=slist[i].cur;
}
return i;
}
void free_sl(SList slist[],int k){
slist[k].cur=slist[0].cur;
slist[0].cur=k;
}
int difference_sl(SList slist[],int n){
int i,m,q,p;
char tmp[2];
int start,end;
init_sl(slist);
start=malloc_sl(slist);
end=start;
while (n--)
{
scanf("%s",tmp);
i=malloc_sl(slist);
slist[i].data=tmp[0];
slist[end].cur=i;
end=i;
}
slist[end].cur=0;
printf("B集合元素个数:\n");
scanf("%d",&m);
printf("B集合元素:\n");
while (m--)
{
scanf("%s",tmp);
q=start;
p=slist[start].cur;
while (p!=slist[end].cur&&slist[p].data!=tmp[0])
{
q=p;
p=slist[p].cur;
}
if (p!=slist[end].cur){
slist[q].cur=slist[p].cur;
free_sl(slist,p);
if (end==p)
{
end=q;
}
}
else{
i=malloc_sl(slist);
slist[i].data=tmp[0];
slist[i].cur=slist[end].cur;
slist[end].cur=i;
}
}
return start;
}
void print_sl(SList slist[],int start){
int p=slist[start].cur;
while (p)
{
printf("%c ",slist[p].data);
p=slist[p].cur;
}
printf("\n");
}
int main(){
int n,start;
SList slist[N];
printf("A集合元素个数:\n");
int s=scanf("%d",&n);
printf("A集合元素:\n");
start=difference_sl(slist,n);
printf("(A-B)U(B-A)集合运算:\n");
print_sl(slist,start);
return 0;
}
|