问答题

[说明]
函数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;

【参考答案】

这是一道要求读者在单链表上实现元素的群插入、群删除操作的程序设计题。本题的解答思路如下。
本程序是在链表插入和......

(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)
热门 试题

问答题
制订标准书号的目的是实现图书的国际统一编码,以便于实现计算机化的图书管理,使出版社内的医书管理、书库中的图书管理及书店的图书销售管理具有更高的工作效率和管理水平。标准书号由“ISBN”, 10个数字(0-9)组成,采用“ISBN 组号—出版者号—书名号—校验码”的格式。其中,出版者号规定为 2-7位数字。对较大的出版社分配比较短的码,留出较长的书名号为更多的书进行编码。 标准书号的最后一位是校验码。设置校验码可以大大减少录入错误造成的管理混乱。校验码一般由计算机程序产生。当操作人员录入前9个数字后,计算机就会自动启动计算校验码的过程,输出正确的校验码。在书店(或书库),不论是建库还是查询检索,在手工输入带校验码的标准书号后,计算机就会自动启动校验过程,判断是否输入错误。 在图3-17计算校验码的过程中,首先要计算部分S值,即S=10*a(1)十9*a(2)+8*a(3)+…+2*a (9)。此时需要使用循环处理。在循环开始之前,应设置初始值S=0。在循环体内,应执行语句“S+=(11-I) *a(I)”或“S+=(1+I)*a(10-I)”(注意,其中的乘号“*”不要丢失)。该循环应对循环变量I=1~9进行(步长默认为1)控制,因此,(2)空缺处应填入“9”,(3)空缺处所填写的内容是“S+(11-I)*a[I]->S”或“S+(1+I)*a(10-I)->S”。 接着再计算该S值除以11的余数R。显然0≤R≤10。 由于“校验码a(10)的设置应使 S=10*a(1)+9*a(2)+8*a(3)…+1*a(10)能被11整除”,即余数R与校验码之和应能被11整除,因此校验码应等于MOD(11-R,11),即(4)空缺处所填写的内容是“MOD(11-R,11)”。若读者在该空缺处填写“MOD(11-R)”,则是没有考虑R=0这一情况。当校验码等于10时,还应以符号×表示。 在对标准书号的校验过程(图3-16)中,首先要将校验码为×的情况转换成数据10,以便于后续计算。为了计算S=10*a(1)+9*a(2)+8*a(3)+…+1*a(10),需要使用循环处理。在循环开始之前,应设置初始值S=0,循环变量I从1到10(步长默认为1)。在循环体内,应执行语句“S+=(11-I)*a(1)”或“S+=I*a(11 -I)”。因此(1)空缺处所填写的内容是“(11-I)*a(I)”或“I*a(11-I)”。 在图3-16中,计算出S值之后,还应判断S除以11的余数是否为0。若余数为0,说明S能够被11整除,表示校验结果正确;若余数不为0,则说明输入的标准书号有错(可能是校验码输入有错,也可能是前面的数字输入有错)。。此时计算机应输出相应的错误提示信息,提醒信息录入人员仔细校对改正。