头文件“2_13.h” # include<stdio.h> # include<iostream.h> # define MAXSIZE 100 //链表的最长长度 typedef struct{ char data; int cur; }component,SLinkList[MAXSIZE]; void InitSpace_SL(SLinkList &space){ //将一维数组space中各分量链成一个备用链表,space[0].cur为头指针 //“0”表示空指针 for(int i=0;i<MAXSIZE-1;i++) space[i].cur=i+1; space[MAXSIZE-1].cur=0; } int Malloc_SL(SLinkList &space){ //若备用空间链表非空,则返回分配的结点下标,否则返回0 int i=space[0].cur; if(space[0].cur) space[0].cur=space[i].cur; return i; } void Free_SL(SLinkList &space,int k){ //释放结点空间 space[k].cur=space[0].cur;space[0].cur=k; } void show(SLinkList space,int s){ //输出操作 int p=space[s].cur; while(space[p].cur){ cout<<space[p].data<<" "; p=space[p].cur; } cout<<space[p].data; } void difference(SLinkList &space,int &s){ //测试 InitSpace_SL(space); s=Malloc_SL(space); //s为头结点 int r=s; //r指向s的当前最后结点 int m,n,i,j; scanf("%d%d",&m,&n); flushall(); for(j=1;j<=m;j++){ //建立集合A的链表 i=Malloc_SL(space); //分配结点 space[i].data=getchar(); flushall(); space[r].cur=i;r=i; } flushall(); space[r].cur=0;char b;int p,k; show(space,s); for(j=1;j<=n;j++){ b=getchar(); flushall(); p=s; //指向头结点 k=space[s].cur; //k指向集合A中第一个结点 while(k!=space[r].cur&&space[k].data!=b){ //在当前表中查找 p=k;k=space[k].cur; } if(k==space[r].cur){ //当前表中不存在该元素,插入在r所指结点之后,且r的位置不变 i=Malloc_SL(space); space[i].data=b; space[i].cur=space[r].cur; space[r].cur=i; } else{ //该元素已在表中,删除之 space[p].cur=space[k].cur; Free_SL(space,k); if(r==k) r=p; //若删除的是r所指结点,则需要修改尾指针 } } cout<<endl; show(space,s); } 主文件“test.cpp” # include"2_13.h" void main(){ SLinkList space; int s; difference(space,s); } 输出结果: