首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下技术说明和C语言函数,将C程序段中(1)-(5)空缺处的语句填写完整。 [说明] 函数DelA - InsB ( LinkedList La, LinkedList Lb, int key 1,int key 2,int len)的功能
阅读以下技术说明和C语言函数,将C程序段中(1)-(5)空缺处的语句填写完整。 [说明] 函数DelA - InsB ( LinkedList La, LinkedList Lb, int key 1,int key 2,int len)的功能
admin
2009-02-15
25
问题
阅读以下技术说明和C语言函数,将C程序段中(1)-(5)空缺处的语句填写完整。
[说明]
函数DelA - InsB ( LinkedList La, LinkedList Lb, int key 1,int key 2,int len)的功能是,将线性表A中关键码为key 1的节点开始的len个节点,按原顺序移至线性表B中关键码为key 2的节点之前。若移动成功,则返回0;否则返回-1。
线性表的存储结构为带头节点的单链表,La为表A的头指针,Lb为表B的头指针。单链表节点的类型定义如下。
typedef struct node{
int key;
struct node*next;
} *LinkedList;
[C程序]
int DelA_InsB (LinkedLiSt La, LinkedList Lb, int key1,int key2,int len
{ LinkedList p, q, S, prep, pres;
int k;
if (!La ->next || !Lb ->next || len<=0)
return-l;
p = La->next;
prep = La;
while (p && p->key != key1){ /* 查找表A中键值为key1的节点 */
prep = p;
p = p->next;
}
if (!p)
return -1; /* 表A中不存在键值为key1的节点 */
q = p;
k = 1;
while (q &&(1)){ /* 在表A中找出待删除的len个节点 */
(2);
k++;
}
if (!q)
return -1; /* 表A中不存在要被删除的len个节点 */
S = Lb ->next;
(3);
while (s && s->key != key2){ /* 查找表B中键值为key2的节点 */
pres = s;
s = e->next;
}
if (!s)
return -1; /* 表B中不存在键值为key2的节点 */
(4) q->next; /* 将表A中的len个节点删除 */
q->next=(5)
pres->next = p; /* 将len个节点移至表B */
return 0;
}
选项
答案
这是一道要求读者在单链表上实现元素的群插入、群删除操作的程序设计题。本题的解答思路如下。 本程序是在链表插入和删除单个节点的基础上进行扩展的,一次性插入多个节点和删除多个节点。元素的群插入或群删除操作是在只删除一个元素的基础上,通过增加一个寻找指定大小和指定数量节点的过程来实现的。其原理和插入、删除一个节点的运算是一致的。首先在链表A中查找键值为key1的节点。在程序中使用了如下的第1个while循环语句。 while (p && p->key !=key1){ /* 查找表A中键值为key1的节点 */ prep = p; p = p ->next; } 若找到键值为key1的节点(即查找成功),则用指针p指示(即p指向该节点),指针prep指向p的直接前驱。然后观察在p的后面是否有len个节点。在程序中使用了如下的第2个while循环。 q = p;k = 1; while (q && (1) ) { /* 在表A中找出待删除的len个节点 */ (2) ; k++;} 第2个while循环是为了找到以键值为key1的节点开始的len个节点。若查找成功,指针吁将指向len个节点中的最后一个节点。程序先将q指向p,变量k是用来计算节点个数的计数器。而该循环的结束条件有两个。第1个是p的后面没有len个节点。此时q为空,所以(2)空缺处所填写的语句是“q=q->next”或“q=(*q).next”,使q的指针往后移动。第2个是p的后面有len个节点。此时k=len,所以(1) 空缺处所填写的语句是“k<len”。如果p的后面有len个节点,则q指向第len个节点,如图3-22所示。图 3-22中的虚线表示省略了中间若干个节点。 [*] 图3-22 链表示意图1 同理,在链表B中查找键值为key2的节点,使用了如下的第3个while循环语句。 S = Lb->next; (3) ; while (s && s->key !=key2) { /* 查找表B中键值为key2的节点 */ pres.=s;s=s->next; } 以上的程序中,s指向第1个节点,然后进行循环。循环的结束条件有2个:第1个是s为空,即说明从头到尾都没有找到键值为key2的节点;第2个是指针s指向该节点,指针pres指向;的直接前驱,即表示查找成功。但是,当第1个节点的键值就是key2时,根据循环条件,循环中的语句不执行,则pres没有值。所以(3)空缺处所填写的内容是“pres=Lb”,使指针pres始终指向s的前驱,如图3-23所示 (图中的虚线表示省略了中间若干个节点)。 [*] 图3-23 链表示意图2 最后将指针p到q的连续len个节点从链表A中删除,在链表B中插入,如图3-24所示。 [*] 图3-24 链表示意图3 程序中使用的语句如下。 (4) q->next; /* 将表A中的len个节点删除 */ q->next= (5) pres->next=p; /* 将len个节点移至表B */ 如果要把指针p到q的连续len个节点从链表A中删除,就要把指针p的前驱(prep)的next指向指针q的next,因此(4)空缺处所填写的内容是“prep->next”或“(*prep).next”, 接下来将指针q的next指向线性表B中s,把指针s的前驱(pres)的next指向p,即(5)空缺处所填写的内容是“s”(或“pres->next”,或“(*pres).next”。
解析
转载请注明原文地址:https://jikaoti.com/ti/2vW7FFFM
本试题收录于:
程序员下午应用技术考试题库软考初级分类
0
程序员下午应用技术考试
软考初级
相关试题推荐
在Word2003的编辑状态中,不可以插入________。
在Excel中,若A1单元格中的函数为"=IF("教授">"助教",TRUE,FALSE)",按回车键后,A1单元格中的显示内容为______。
在PowerPoint中,使用快捷键(55)可以使选定的文本添加下划线。
结构化程序中的基本结构不包括(28)。
在调查某地区各类用户所喜欢的电视栏目时,信息处理技术员小王制作了用户类(U)与电视栏目(V)关系图。下面的示意图描述了五类用户(从上到下U1~U5)与四个电视栏目(从上到下V1~V4)之间的关系:如果某类用户大多喜欢某个电视栏目,则在它们之间画一条连线。从
信息处理技术员教程共有318页,甲在第一天看了全书的1/6,第二天看了剩下的1/5,第三天应从第(32)页开始看。
Word定时自动保存功能可以()。
为了查看幻灯片能否在20分钟内完成自动播放,需要为其设置(53)________________。
PowerPoint可以通过插入(55)来完成统计、计算等功能。
Windows XP的许多应用程序的“文件”菜单中,都有“保存”和“另存为”两个命令。以下对这两个命令的叙述,正确的是(36)。
随机试题
Thecoathasa______insidetoshowthesizeandwhereitwasmade.
妊娠禁用的中成药有
隧道监控量项目中的地表沉降测点横向间距宜为(),在隧道中线附近测点应适当加密。
固体废弃物处理的基本思想是()。
材料一:热带民族的怯懦常常使这些民族成为奴隶,而寒冷气候的民族的勇敢使他们能够维护自己的自由。这是自然的原因所产生的后果。居住在山地的人坚决主张要平民政治,平原的人则要求让一些上层人物领导的政体,近海的人则希望一种由二者混合的政体。
应对广大社会成员进行治安形势和违法犯罪发展趋势的教育,提高其( )。
全面深化改革是一项复杂的系统工程。经济体制改革是全面深化改革的重点,核心问题是处理好()
Thepricewepayforthissalutarychangeis,nodoubt,great.Weassemblethousandsofoperativeinthefactory,andinthemin
Kidnappingsaroundtheworldhavetypicallyhadoneoftwomajorgoals:publicityforalocalpoliticalcauseorasaformof"f
Theyoungwriterisnot______presently,buthewillbewellknowntotheworldsomeday.
最新回复
(
0
)