线性表处理

问题描述:

两个递增有序排列的线性表A和B,均以单链表做存储结构,编写算法,将两个表归并成一个递减有序的线性表C,要求C利用A, B表的结点空间

问题分析:

首先如果C表也是一个递增有序的,是不是简单些呢?当然,如果C是递增有序的,只要遍历两个表的中值,比较他们的大小,小的在大的前面,遍历完了以后,C表也就合并成了

在这里它要求C表是递减有序的,哪问题的关键是不是把递增变成递减呢?又要怎么去变呢?

想起昨天看过的算法,将首元节点变成尾元节点。说实话,暂时还是没想到好法子去变。。。经验少了,看的算法少了,看了下书,知道怎么弄了,把自己理解的重新理清楚下。

C表是利用A,B表的节点空间的,可以让A->next=null,或者B->next=null后,赋值给C;A,B 两个表原来是递增的,对不,也就是说,遍历的时候最先出来的是最小的,再在C前面依次添加最小的数据,这样就能实现逆置了。(这样的实现方式让我对链表有了进一步理解)

解题算法如下:

 1  Status ListMergeOppose_L(LinkList &A,LinkList &B,LinkList &C)
 2     {
 3          LinkList pa,pb,qa,qb;
 4          pa=A;
 5          pb=B;
 6          qa=pa;
 7          qb=pb;
 8          pa=pa->next;
 9          pb=pb->next;
10          B->next=NULL;
11          C=B;
12     while(pa&&pb)
13        {
14         if(pa->data>pb->data)
15          {
16             qa=pa;
17             pa=pa->next;
18             qa->next=B->next;
19             B->next=qa;
20          }
21         else
22         {
23               qb=pb;
24               pb=pb->next;
25               qb->next=B->next;
26               B->next=qb;
27         }
28        }
29    while(pa)
30    {
31      qa=pa;
32      pa=pa->next;
33      qa->next=B->next;
34      B->next=qa;
35    }
36   while(pb)
37    {
38      qb=pb;
39      pb=pb->next;
40      qb->next=B->next;
41      B->next=qb;
42     }
43    pa=A;
44    free(pa);
45    return OK;
46  }

最后说下这个编辑环境真好,把代码贴上去看得清晰明了。。

 本来想删除以前写的,重新把实现的代码放上去,但是算了吧,毕竟无论以前有多么无知,这也是个过程。

有些地方欠缺思考。。

 

转载于:https://www.cnblogs.com/wj204/archive/2013/04/22/3034986.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值