#include<iostream.h>
#define OK 1
#define OVERFLOW -2
#define ERROR 0
typedef int Status;
typedef char ElemType;
const int MaxSize=11; //静态链表大小
typedef struct node
{
//静态链表结点
ElemType data;
int cur;
}SNode,SLinkList[MaxSize];
void Visit_SL(SLinkList,int);
//int Unused;//空闲静态链表头指针
void InitSpace_SL(SLinkList &space)
{
//初始化静态链表space
int i;
for(i=0;i<MaxSize-1;i++)
space[i].cur=i+1; //构成空闲链表
//标记链尾
space[MaxSize-1].cur=0;
}//InitList_SL
int Malloc_SL(SLinkList &space)
{
//
int i=space[0].cur;
if(space[0].cur)
space[0].cur=space[i].cur;
return i;
}//Malloc_SL*/
void Free_SL(SLinkList &space,int k)
{
//将下标未k的空闲结点收回到备用表
space[k].cur=space[0].cur;
space[0].cur=k;
}//Free_SL
void difference(SLinkList &space,int &S)
{
//S为头指针
int i,j,k,n,m;
int r,p;
ElemType e,b;
InitSpace_SL(space);
S=Malloc_SL(space);
r=S; //r指向S的当前最后结点
cout<<"input number A,B m,n=";
cin>>m>>n;
cout<<"input element A(m) e=";
for(j=1;j<=m;j++)
{
//建立集合A的链表
i=Malloc_SL(space);
cin>>e;
space[i].data=e;
space[r].cur=i;
r=i;
}//for
space[r].cur=0;
Visit_SL(space,S);
cout<<"input element B(n) b=";
for(j=1;j<=n;j++)
{
cin>>b; //输入b集合中的一个元素
p=S;
k=space[S].cur;
while(k!=space[r].cur && space[k].data!=b)
{
p=k;
k=space[k].cur;
}//while
if(k==space[r].cur)
{
i=Malloc_SL(space);
space[i].data=b;
space[i].cur=space[r].cur;
space[r].cur=i;
}//if
else
{
space[p].cur=space[k].cur;
Free_SL(space,k);
if(r==k)
r=p;
}//else
}//for
}//difference
void Visit_SL(SLinkList space,int S)
{
int p=space[S].cur;
while(p)
{
cout<<space[p].data<<" ";
p=space[p].cur;
}
cout<<endl;
}
void main()
{
SLinkList space;
int i,j,k,n,p;
int S;
ElemType x;
InitSpace_SL(space);
difference(space,S);
cout<<S<<endl;
Visit_SL(space,S);
}