静态链表

#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);
}

 

posted on 2013-04-23 21:51  绕指柔yy  阅读(151)  评论(1编辑  收藏  举报

导航