算法2.14~算法2.17

例223假設由終端輸入集合元素,先建立表示集合A的靜態鏈表S,而后在輸入B的元素的同時查找S表,若存在和B相同的元素,則

從S表中刪除之,否則將此元素插入S表

過程:

1.將整個數組空間初始化成一個鏈表

2.從備用空間取得一個節點

3.將空閑節點鏈結到備用鏈表上

算法如下:

算法2.14

void InitSpace_SL(SLinkList &space)

{

     //將一維數組space中各分量鏈成一個備用鏈表,space[0].cur為頭指針

     //"0"表示空指針

     for(i=0;i<MaxSize-1;++i)

     {

          space[i].cur=i+1;

     }

     space[MaxSize-1].cur=0;

}//InitSpace_SL

 算法2.15

int Malloc_SL(SLinkList &space)

{

     //若備用空間鏈表非空,則返回分配的節點下標,否則返回0

     i=space[0].cur;

     if(space[0].cur)

     {

          soace[0].cur=space[i].cur

     }   

     return i;

}Malloc_SL

算法2.16

void Free_SL(SLinkList &space,int k)

{

     //將下標為k的空閑節點回收到備用鏈表

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

     space[0].cur=k;

}//Free_SL

算法2.17

void difference(SLinkList &space,int &S)

{

     //依次輸入集合A和B的元素,在一維數組space中建立表示集合(A-B)U(B-A)

     //的靜態鏈表,S為其頭指針.假設備用空間足夠大,space[0].cur為其頭指針

     InitSpace_SL(space);                      //初始化備用空間

     S=Malloc_SL(space);                      //生成S的頭節點

     r=S;                                             //r指向S的當前最后節點

     scanf(m,n)                                    //輸入A和B的元素個數

     for(j=1;j<=m;++j)                        //建立集合A的鏈表

     {

          i=Malloc_SL(space);                  //分配節點

          scanf(space[i].data);                //輸入A的元素值

          space[r].cur=i;                         //插入到表尾

          r=i;

     }//for

     space[r].cur=0                              //尾巴節點的指針為空

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

     {

          scanf(b);

          p=S;

          k=space[S].cur;                        //k指向集合A中的第一個節點

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

          {

               p=k;

               k=space[k].cur;

          }//while

          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;

          }//if

          else

          {//該元素已在表中,刪除之

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

               Free_SL(space,k);

               if(r==k)  r=p;//若刪除的是所指示的節點,則需要修改尾指針               

          }//else

     }//for

}//difference

转载于:https://www.cnblogs.com/luckylu/archive/2009/03/08/1406252.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值