首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下技术说明和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
55
问题
阅读以下技术说明和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://kaotiyun.com/show/gEjZ777K
本试题收录于:
程序员下午应用技术考试题库软考初级分类
0
程序员下午应用技术考试
软考初级
相关试题推荐
若要查询成绩为70-80分之间(包括70分,不包括80分)的学生的信息,以下查询准则设置正确的是()。
某商场的部门和商品两个实体之间的关系如下图所示。假设每个部门负责销售若干种商品,每种商品只能由一个部门负责销售,那么部门和商品之间存在着(14)的联系。
PC各部件的工作电压大多在-12V~+12V,并且是直流电,而日常照明所用的却是220V交流电,为此,PC内需要有__________为电脑部件如主板、驱动器、显卡等供电。
以下关于windows7文件名的叙述中,(20)________________是正确的。
根据某机构的统计与推测,我国人口中男性和女性各个年龄段的百分比如下图。根据该图,以下叙述中正确的是________________。
在Excel2010的A1单元格中输入函数“=ABS(ROUND(-1.478,2))”,按回车键后,A1单元格中的值为________________。
以下关于Word2010图形和图片的叙述中,不正确的是()。
鼠标指针的形状取决于它所在的位置以及与其他屏幕元素的相互关系。在文字处理的文本区域,指针就像(),指向当前待插入字符的位置。
西部某省考试机构工作人员统计了去年下半年三个地区四种资格的报考人数,将统计表抄录如下(其中有一个数据抄错了): 信息处理技术员小王很快就找出了错误的数据,并进行了纠正。错误的数据是(32),该数据应纠正为(33)。32.
随机试题
提出“痨瘵主乎阴虚”的是
出血时间的正常值约为()
翟先生2014年10月份从单位获得工资类收入1500元,由于单位工资较低,同月在甲公司做了一份兼职工作,收入为每月2500元。根据案例,请回答以下问题。如果翟先生与甲公司建立固定的雇佣关系,则比没有建立固定的雇佣关系每月少缴纳税收()
按照我国企业会计准则的规定,下列关于合并资产负债表的抵销的表述中,正确的有()。
6,15,12,21,18,(),24
Doyouthinkthereistoomuchnoiseinourcity?Ifyoulivenearanairport,youwillbeunhappybecauseaplaneoftenmakesa
【2013年济宁市市属真题】《教师资格条例》规定,被撤销教师资格的,自撤销之日起()不得重新申请认定教师资格,其教师资格证由县级以上人民政府教育行政部门收缴。
下列选项中,关于我国宪法修改的表述不正确的是()。
Howardisprobably
Injuryproblemcould(short)______basketballplayer’scareer.
最新回复
(
0
)