首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读下列函数说明和C函数,将应填入______处的语句写在答题纸的对应栏内。 [函数6说明] 函数DelA_InsB(LinkedList La,LinkedList Lb,int key1,int key2,int len)的功能是:将线性表
阅读下列函数说明和C函数,将应填入______处的语句写在答题纸的对应栏内。 [函数6说明] 函数DelA_InsB(LinkedList La,LinkedList Lb,int key1,int key2,int len)的功能是:将线性表
admin
2007-03-10
95
问题
阅读下列函数说明和C函数,将应填入______处的语句写在答题纸的对应栏内。
[函数6说明]
函数DelA_InsB(LinkedList La,LinkedList Lb,int key1,int key2,int len)的功能是:将线性表A中关键码为key1的结点开始的len个结点,按原顺序移至线性表B中关键码为key2的结点之前,若移动成功,则返回0;否则返回-1。线性表的存储结构为带头结点的单链表,La为表A的头指针,Lb为表B的头指针。单链表结点的类型定义为:
typedef struct node {
int key;
struct node * next;
} * LinkedList;
[函数6]
int DelA InsB(LinkedList La,LinkedList Lb,int key1,int key2,int len)
{ LinkedListp,q,s,prep,pres;
int k;
if(! La->next‖! Lb->next‖->next‖len<=0)return-1;
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 && s->key!=key2){ / * 查找表B中键值为key2的结点 * /
pres=s;s=s->next;
}
if(! s)return-1; / * 表B中不存在键值为key2的结点 * /
(4)=q->next; / * 将表A中的len个结点删除 * /
q->next=(5);
pres->next=p; / * 将len个结点移至表B * /
return 0;
}
选项
答案
(1)k<len (2)q=q->next (3)pres=Lb (4)prep->next (5)s或pres->next
解析
本题是在链表插入和删除单个结点的基础上进行扩展,一次性插入多个结点和删除多个结点其原理和插入、删除一个结点的运算是一致的。首先在A链表中查找键值为key1的结点,使用了下列循环:
While(p&&p->key!=key1) { / * 查找表A中键值为key1的结点 * /
Prep=p;p=p->next;
}因此,当找到键值为key1的结点时,p指向该结点,prep指向p的前驱。然后看在p的后面是否有len个结点,使用了下列语句:
q=p;k=1;
while(q&&(1)) { / * 在表A中找出待删除的len个结点 * /
(2);k++;
}显然,首先把q指向p,k为计数器,所以该循环的结束条件有2个,一个是p的后面没有 len个结点,这时q为空,所以(2)空应填写q=q->next,使q的指针往后移动;另一个是 p的后面有len个结点,这时k=len。所以(1)空应填写k<len。
根据上面的语句,如果p的后面有len个结点,则q指向第len个结点。如图2-2所示(虚线表示省略了中间若干个结点)。
同样,在表B中查找键值为key2的结点,使用了下列循环:
s=Lb->next;(3);
while(s&&s->key!=key2){ / * 查找表B中键值为key2的结点 * /
pres=s;s=s->next;
}首先,s指向第一个结点,然后进行循环,循环的结束条件也是2个,要么s为空(这时说明从头到尾都没有找到键值为key2的结点),要么找到了,s指向该结点,pres指向s的前驱。但是,如果第一个结点的键值就是key2的话,根据循环条件,循环中的语句不执行,则pres没有值,所以(3)空应该填写pres=Lb,使pres始终指向s的前驱。如图2-3所示 (虚线表示省略了中间若干个结点)。
最后将p到q的连续len个结点从A表中删除,在B表中插入,如图2-4所示。
程序中使用的语句如下:
(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。然后把q的next指向B表中s,把s的前驱 (pres)的next指向p,所以,(5)空应填写s。
转载请注明原文地址:https://www.kaotiyun.com/show/MzjZ777K
本试题收录于:
程序员下午应用技术考试题库软考初级分类
0
程序员下午应用技术考试
软考初级
相关试题推荐
在Excel中,若A1、A2、A3、A4、A5、A6单元格的值分别为2、4、6、8、10、12,在B1单元格中输入函数“=ABS[MIN(A1:A6)-MAX(A1:A6)]”则B1单元格的值为______。
下列选项中,______不属于Access中窗体的数据来源。
在Excel中,函数average(a,b,c)表示求a,b,c的______。
下图是某工程A~E五个作业的进度计划。按照该计划,到5月31日检查时,已完成作业数、已经开始但尚未完成的作业数以及尚未开始的作业数应分别为()。
某单位需要使用浓度为15%的盐水750克,但只有浓度20%和5%的两种盐水。经过计算,将浓度20%和5%的盐水分别取()克混合后就能达到要求。
设有关系R、S、T如下所示,则________。
下面描述正确的是(20)。
在Excel工作表中,已输入的数据如下所示:按回车键后,B6单元格显示的值为()。
在Excel中,绝对地址在被复制或移动到其他单元格时,其单元格地址______。
随机试题
肾小球源性血尿的最主要特点是
匀质杆质量为m,长OA=l,在铅垂面内绕定轴O转动。杆质心C处连接刚度系数k较大的弹簧,弹簧另端固定。图示位置为弹簧原长,当杆由此位置逆时针方向转动时,杆上A点的速度为νA,若杆落至水平位置的角速度为零,则νA的大小应为:
完善对外开放区域布局,支持沿海地区全面参与全球经济合作和竞争,要发挥()地区的对外开放门户作用。
甲建筑公司收到了某水泥厂寄发的价目表但无其他内容。甲按标明价格提出订购1000吨某型号水泥,并附上主要合同条款,却被告知因原材料价格上涨,原来的价格不再适用,要采用提价后的新价格,则下列说法正确的有()。
企业进行市场调查可以采用的方法有()。
某企业“生产成本”科目的期初余额为10万元,本期为生产产品发生直接材料费用80万元,直接人工费用15万元,制造费用20万元,企业行政管理费用10万元,本期结转完工产品成本为100万元。假定该企业只生产一种产品,期末“生产成本”科目的余额为()万元。
甲公司为增值税一般的纳税人。2×17年1月1日,甲公司通过公开拍卖市场以5000万元购买一块可使用50年的土地使用权,用于建造商品房。为建造商品房,甲公司于2×17年3月1日向银行专门借款4000万元,年利率5%(等于实际利率),截至2×17年12月31日
()不能纠正绩效考评中的晕轮误差。
一家食品店从周一到周日,每天都有3种商品特价销售。可供特价销售的商品包括3种蔬菜:G、H和J;3种水果:K、L和O;3种饮料:X、Y和Z。必须根据以下条件安排特价商品:(1)每天至少有1种蔬菜特价销售,每天至少有1种水果特价销售。(2)
程序 #include"iostream.h" voidmain() { inti=10; jntj=5; cout<<j+i++<<end1; } 的结果为【】
最新回复
(
0
)