查看全部128种考试
软件水平考试
 考试动态 报考指南 历年真题 模拟试题 复习资料 心得技巧 专业英语 技术文章 软考论坛 考试用书
 程序员 软件设计师 网络管理员 网络工程师 系统分析师 数据库系统工程师
1
2
3
4
5
6
7
8
9
10
ak47  
【字体: 程序员考试下午试题程序填空解题方法
程序员考试下午试题程序填空解题方法
spks.exam8.com 来源:老顽童 更新:2005-5-12 23:46:00 软件水平考试 考试论坛

    1、理解题目:

  已知条件为两个链表La和Lb,最后得到的结果也是两个链表,只不过是La中的部分结点移动到Lb中,因此,本问题主要是解决是怎么移动的。

    2、算法:

  在题目中没有给出结点移动的算法,我们先可以结合实例自己设计一个算法,然后看是不是与程序中的算法一致。如果不是,则再找算法。

    实例:

  如图所示,如果我们找到实线的指针,它们分别指向La中的Key1结点(p指针)、Key1的前一个结点(q指针)、Aj(从Key1结点开始的第len个结点,r指针)和Lb中的Key2的前一个结点(s指针),则根据链表操作,用图中的虚线指针连接,我们就可以把La中从Key1结点开始的共len个结点全部移动到Lb链表中。因此算法大致如下:

  (1)找到p和q指针;

  (2)找到r指针;

  (3)找到s指针;

  (4)r->next=s->next(即把Aj结点连接到K2结点之前);

  (5)s->next=q(即把K1结点连接到原来Lb中K2结点的前一个结点的后面); 

  注意:经过(4)、(5)两步操作,即实现了移动操作。

  (6)要注意的是现在La链表已经断开,也必须重新连接上,故要:

  但是注意一下程序,就会发现里面有很多判断,主要是看判断是否可以移动。我们考虑后(也可以看程序)发现,在以下几种情况下,操作不能进行:

  (1)La或Lb是空链表;

  (2)len表示个数的值,因此不能不大于0;

  (3)La中不存在Key1的结点;

  (4)La中从Key1结点开始的结点个数小于len个;

  (4)Lb中不存在Key2的结点;

    3、现在主要是看程序结构是不是和我们自己考虑的算法符合。

  程序段(5)~(8):其中有p指针在向后移动,一直到Key1为止,因此,它们的功能就是找到指向Key1结点的指针;同时,另有一个指针prep一直在p的后面,因此它就是指向Key1的前一个结点的指针。

  程序段(10)~(13):其中有一个k变量,每次循环后增加1,因此它是一个计数器。通过计数len次,就可以找到从Key1结点开始的第len个结点。这时,应该有一个指针(q)同时移动,使得这个指针就是指向第len个结点的指针。

  程序段(15)~(18):其中有s指针在向后移动,一直到Key2为止,因此,它们的功能就是找到指向Key2的前一个结点的指针。

  程序段(20)~(22):就是移动La中的结点到Lb,并把La中断开的链表连接。从上述的分析发现,程序结构是和我们自己考虑的算法一致的。

    4、考虑细节,并填空。

  (1)我们的目的是找指向第len个结点的指针,找到后循环应该结束,因此,要填k  (2)q指针应该同时移动,故应填:q=q->next

  (3)这一段程序的功能是找到指向Key2的前一个结点的指针。其中s指针是指向Key2结点的,而pres指针跟在s后面。但是pres指针缺少初值,因此,这儿应该给pres赋值。故,应填:pres=Lb。

  (4)程序块(20)、(21)、(22)的功能是移动La中的结点到Lb,并把La中断开的链表连接。根据链表操作的方法,显然(20)是把La中断开的链表连接,因此,(4)应该填:prep->next;而(21)、(22)是移动La中的结点到Lb,因此,(5)应该填:pres->next。

上一页  [1] [2] 

转帖于:软件水平考试_考试吧
文章搜索  
看了本文的网友还看了:
软件水平考试权威辅导教材: 订书电话:010-62168566  更多>>>
网友评论
昵 称: *  评 分: 1分 2分 3分 4分 5分
标题:   匿名发表    (共有条评论)查看全部评论>>
版权声明 -------------------------------------------------------------------------------------
  如果软件水平考试网所转载内容不慎侵犯了您的权益,请与我们联系,我们将会及时处理。如转载本软件水平考试网内容,请注明出处。
关于本站  网站声明  广告服务  联系方式  付款方式  站内导航  客服中心  友情链接  考试论坛  网站地图
Copyright © 2004-2008 考试吧软件水平考试网 All Rights Reserved    
中国科学院研究生院权威支持(北京) 电 话:010-62168566 传 真:010-62192699
百度大联盟黄金认证  十佳网络教育机构  经营许可证号:京ICP060677