首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下技术说明和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
30
问题
阅读以下技术说明和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
程序员下午应用技术考试
软考初级
相关试题推荐
某学生要进行数据结构、操作系统和计算机组成原理三门课的考试。已知数据结构成绩是85分、操作系统成绩是87分,希望总分达到240分,需要求出计算机组成原理成绩应考的分数。此类问题可以使用Excel中的(53)功能来解决。
在Excel的A1单元格中输入函数“=LEFT(“信息处理技术员”,2)”,按回车键后,A1单元格中的值为()。
新建一个Word文档,编辑结束后,执行“文件”菜单中的“保存”命令,则______。
字符串编辑有3种基本操作:在指定位置插入一个字符、在指定位置删除一个字符、在指定位置用另一个字符替换原来的字符。将字符串ABCDE,编辑成ECDFE,至少需要执行(6)次基本操作。
文件外壳型病毒(21)。
计算机处理的数字数据有数值数据和字符数据之分。对信息处理技术员来说,它们的主要区别是______。
计算机网络中,防火墙的功能不包括________________。
经过反复修改的文档已经定稿,需要送到其他电脑上打印。为防止不同电脑不同软件版本或他人误操作导致文档发生变化,最好将该文档以()格式保存并传送。
(1)是固化在主板ROM内的程序,为计算机提供最底层、最直接的硬件访问和控制。
计算机使用一段时间后发现,系统启动时间变长,系统响应迟钝,应用程序运行缓慢,为此,需要进行系统优化。系统优化工作不包括___________。
随机试题
根据合伙企业法律制度的规定,下列出资形式中,只能由全体合伙人协商确定其评估办法的是()。
外科疾病导致的腹痛一般先有
心脏最大径是指
A.止嗽散B.定喘汤C.麻杏不甘汤D.小青龙汤E.苏子降气汤
子宫切除术前留置导尿管的主要目的是
下列介质中,不属于毒性介质的是()。
下列行为中,符合理财产品政策监管要求的是()。
关于非马克思主义法学的法本质学说,下列说法正确的是
【B1】【B11】
关于疾病及其起因的说法有很多。有人认为疾病不仅反映出身体差,它还反映了精神和社会的整体状况。战争、不良居住环境、失业、不稳定的政治体制、不平等的权利及生存条件以及社会医疗服务的匮乏均可引发疾病。同时。我们也应当记住良好的精神状态对健康和长寿是非常重要的。
最新回复
(
0
)