C语言数据结构 静态链表

静态链表:

本程序完成对静态链表的初始化,插入元素,和删除与插入相同的元素,以及对删除后结点的回收利用。在VS2010环境下用多组数据进行调试结果无误,该程序的源代码和执行结果如下所示。

C程序代码:

#include

#include

using namespace std;

#define MAXSIZE 1000

 

typedef struct{

    int data;

    int cur;

}component,SLinkList[MAXSIZE];

 

 

 

void InitSpace_SL(SLinkList &space)//链表初始化函数

{

//将一维数组的各分量链成一个备用链表,space[0].cur为头指针

//"0"表示空指针

    for(int i=0;i

    {

    space[i].cur=i+1;

    }

    space[MAXSIZE-1].cur=0;

}

 

 

 

int Malloc_SL(SLinkList &space)

    int i;

    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;

}

 

 

 

char*ss="\t";

char*ssss="\n";

void difference(SLinkList &space,int&S)

{

    int r,m,n;

    InitSpace_SL(space);

    S=Malloc_SL(space);

    r=S;

    char*sss="请输入m,n的值";

    printf("%s",sss);

    printf("%s",ssss);

    scanf("%d,%d",&m,&n);

    int i;

    for(int j=1;j<=m;++j)//向链表中插入元素

     {

         i=Malloc_SL(space);

         scanf("%d",&(space[i].data));

         space[r].cur=i;r=i;

      }

    space[r].cur=0;

    int t;

    sss="当前链表的元素";

    printf("%s",sss);

    printf("%s",ss);

    t=S;

    for(int j=1;j<=m;++j)//输出当前链表的元素

    {

   

          t=space[t].cur;

          printf("%d",space[t].data);

          printf("%s",ss);

     }

     printf("%s",ssss);

     int b,p,k;

     sss="输入要操作的元素,如果与已存在元素相同则执行删除操作,否则插入新的元素";

     printf("%s",sss);

     printf("%s",ssss);

     for(int j=1;j<=n;++j)

     {

                scanf("%d",&b);

                p=S;k=space[S].cur;

            while(k!=space[r].cur&&space[k].data!=b)

            {

             p=k;k=space[k].cur;

            }

            if(k==space[r].cur)

              {//当前表中不存在该元素,插入在r所指的结点之后

                i=Malloc_SL(space);

                space[i].data=b;

                space[r].cur=i;

                r=i;

                }

            else{//该元素在表中则删除

                space[p].cur=space[k].cur;

                Free_SL(space,k);

                    if(r==k)r=p;

 

              }

     }

    sss="输出操作后的链表";

    printf("%s",sss);

    printf("%s",ssss);

    t=S;

    while(t!=r)

       {

            t=space[t].cur;

            printf("%d",space[t].data);

            printf("%s",ss);

        }

}

 

 

 

void main()

{

    int ttt;

    SLinkList a;

    difference(a,ttt );

 

}


你可能感兴趣的:(C语言数据结构 静态链表)