静态链表
#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); }