1、中级软件设计师下午试题-26 及答案解析(总分:90.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)【说明】某汽车数字仪表板将完成下述功能:(1)通过模/数转换,实现传感器和微处理器的接口。(2)在发光二极管面板上显示数据。(3)指示速度(mph)、行驶里程、油耗(mpg)等。(4)指示加速或减速。以下是经分析得到的数据流图,有些地方有待填充,假定顶层数据流图是正确的。图 9-14 是顶层数据流图,图 9-15 是第 0 层数据流图,图 9-16 是第 1 层数据流图,其中 A 是加工 1 的细化图,B 是加工 2 的细化图。图中,sps 表示转速 sps 的瞬时变化值
2、,若sps0 则汽车加速,sps0 则减速,sps=0 则匀速。假定题中提供的顶层图是正确的,请回答下列问题。(分数:15.00)_二、试题二(总题数:1,分数:15.00)【说明】图书管理系统详细记录图书库存情况、读者信息及读者借阅记录(包括借书日期和还书日期)。新书入库时要为该书编制图书卡片,包括分类目录号、图书流水号(要保证每本书都有唯一的流水号,即使同类图书也是如此)、书名、作者、内容摘要、价格和购书日期。同一个书名由于版次、作者等不同有可能存在多“种”图书,其间用“分类目录号”区分。系统为每一位合法读者编制一个唯一的借书证号,读者需要提供姓名、单位。一个读者最多可以同时借阅 5 本图
3、书。借阅图书时,新添借阅记录,并将对应的“归还标记”字段置为“false”,表示“尚未归还”;归还图书时,将相应的“归还标记”字段置为“true”,表示“已经归还”。一本书可能供多位读者借阅,同一本书读者可以重复借阅。如图 9-17 所示为该系统的 E-R 图。(分数:15.00)_三、试题三(总题数:1,分数:15.00)【说明】C 市刚开通了地铁线,为方便乘客,计划开发自动售票系统。该公司在每一个地铁站放置了多台自动售票机,每一台售票机有一唯一编号,售票记录统一汇总主机。自动售票机只发售从该站起始的各种地铁票,因此乘客只需输入目的站,起始站默认为该站,售票机给出从该站到达目的站的单程票。打
4、印地铁票时为其编一个唯一的流水号,并同时打印自动售票机的编号及票价。售票机的状态变化如下:“空闲”时,显示地铁线路图,等待乘客输入目的站;当乘客输入目的站后,转入“目的站确认/票数输入”状态,同时给出票价,此时若目的站有误,可返回到空闲状态重新输入,否则,输入票数;乘客输入票数后,转入“票数确认/付款”状态,同样此时若票数有误,可返回到上一状态重新输入,否则,投入钱币付款;当付款金额足够时,“出票/找零”(有必要时进行找零);然后转入“空闲”等待输入目的站状态。该系统采用面向对象方法开发,系统中的类及类之间的关系用 UML 类图表示,如图 9-18 所示是该系统类图的一部分,图 9-19 描述
5、了自动售票机的状态转换图。(分数:15.00)_四、试题四(总题数:1,分数:15.00)1.【说明】所谓货郎担问题,是指给定一个无向图,并已知各边的权,在这样的图中,要找一个闭合回路,使回路经过图中的每一个点,而且回路各边的权之和最小。应用贪婪法求解该问题。程序先计算由各点构成的所有边的长度(作为边的权值),按长度大小对各边进行排序后,按贪婪准则从排序后的各边中选择边组成回路的边,贪婪准则使得边的选择按各边长度从小到大选择。函数中使用的预定义符号如下:#define M 100typedef struct/*x 为两端点 p1、p2 之间的距离,p1、p2 所组成边的长度*/float x;
6、int p1, p2;tdr;typedef struct/*p1、p2 为和端点相联系的两个端点,n 为端点的度*/int n, P1, p2;tr;typedef struct/*给出两点坐标*/float x,y;tpd;typedef int tlM;int n=10;【函数】float distance(tpd a,tpd b);/*计算端点 a、b 之间的距离*/void sortArr(tdr aM, int m);/*将已经计算好的距离关系表按距离大小从小到大排序形成排序表,m 为边的条数*/int isCircuit(trM, int i, int j);/*判断边(i, j
7、)选入端点关系表 rM后,是否形成回路,若形成回路返回 0*/void selected(tr rM, int i, int j);/*边(i,j)选入端点关系表 r*/void course(tr rM, tl 1M);/*从端点关系表 r 中得出回路轨迹表*/void exchange(tdr aM, int m, int b);/*调整表排序表,b 表示是否可调,即是否有边长度相同的边存在*/void travling(tpd pdM, int n, float dist, t1 locusM)/*dist 记录总路程*/tdr drM;/*距离关系表*/tr rM;/*端点关系表*/i
8、nt i, j, k, h, m;/*h 表示选入端点关系表中的边数*/int b;/*标识是否有长度相等的边*/k=0;/*计算距离关系表中各边的长度*/for(i=1;in;i+)for(j=i+1;j=n;j+)k+;drk.x= (1) ;drk.p1=i;drk.p2=j;m=k;sortArr(dr,m);/*按距离大小从小到大排序形成排序表*/dob=1;dist=0;k=h=0;dok+;i=drk.p1;j=drk.p2;if(ri.n=1)h+;dist+=drk.x;else if( (4) )/*最后一边选入 r 成回路,则该边必须加入且得到解*/selected(r,
9、i,j);h+;dist+=drk.x;while(k!=n)if(h=n)/*最后一边选入构成回路,完成输出结果*/course(r,locus);else/*找不到解,调整 dr,交换表中边长相同的边在表中的顺序,并将 b 置 0*/(5) ;while(!b);(分数:15.00)_五、试题五(总题数:1,分数:15.00)2.【说明】以下程序实现数据的排序,将 n 个整数分别按照升序和降序进行排序,类 SortInt_1 实现升序排序,类SortInt_2 实现降序排序。【Java 代码】class SortInt_1int i,i,k,temp;void SortInt(int a1
10、,int a2)/升序排序for(i=0;ia1-1;i+)k=i;for(j=i+1;ja1;j+)if( (1) ) k=j;if(k !=i)temp=a2i;a2i=a2k;a2k=temp;class SortInt_2 (2) int i,j,k,temp;void SortInt(int a1, int a2)/降序排序for(i=0; ia1-1;i+)k=i;for(j=i+1;ja1;j+)if( (3) )k=j;if(k !=i)temp=a2i;a2i=a2k;a2k=temp;public class testpublic static void main(Stri
11、ng args)int a=10,55,100,35,87,90,100,16;SortInt_1 NewInt= (4) ;NewInt.SortInt(a.lenvh,a);/调用 SortInt_1 类的方法System.out.println(“升序排列的数据: “);for(int i=0;ia.length;i+)System.out.print(ai+“ “);System.out.println();NewInt=new SortInt_2();/创建类 SortInt_2 的对象(5) ;/调用相应方法进行降序排序System.out.println(“降序排列的数据: “)
12、;for(int i=0;ia.length;i+)System.out.print(ai+“ “);(分数:15.00)_六、试题六(总题数:1,分数:15.00)3.【说明】本程序将两个从小到大的有序链表合成一个新的从小到大的有序链表。链表的每一项由类 Node 描述,而链表由 List 描述,类 List 的成员函数有以下几个:creatList(): 创建从小到大的有序链表。multiplyList(List L1, Llst L2): 将链表 L1 和链表 L2 合并。print(): 打印链表。【C+代码】#include iostreamusing namespace std;c
13、lass List;class Nodefriend class List;public:Node(int data)(1) ;private:int data;Node *next;class Listpublic:List()list=NULL;void multiplyList(List L1, List L2);void creatList();void print();private:Node *list;void List:creatList()Node *p, *u, *pre;int dara;list=NULL;wbile(1)cout“输入链表的一项: (小于零,结束链表)
14、 “endl;cindata;if(dara0)break;/小于零,结束输入p=list;while(p !=NULL p=p-next;u= (2) ;if(p=list)list=u;else pre-next=u;(3) ;void List:multiplyList(List L1, List L2)Node *pL1, *pL2, *pL, *u;list = NULL;pL1 = L1.list;pL2 = L2.11st;while(pL1 != NULL pL1 = pL1-next;elseu = new Node(pL2-data);pL2 = pL2-next;if(l
15、ist = NULL)list = (4) ;elsepL-next=u;pL=u;pL1 = (pL1 != NULL)? pL1:pL2;while(pL1 != NULL)u= (5) ;pL1 = pL1-next;if(list = NULL)list=pL=u;elsepL-next=u;pL=u;void List:print()Node *p;p = list;while(p !=NULL)coutp-data“/t“;p=p-next;coutend1;void main()List L1, L2, L;cout“创建第一个链表/n“;L1.creatList();cout“
16、创建第二个链表/n“;L2.creatList();L1.print();L2.print();L.multiplyList(L1,L2);L.print();(分数:15.00)_中级软件设计师下午试题-26 答案解析(总分:90.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)【说明】某汽车数字仪表板将完成下述功能:(1)通过模/数转换,实现传感器和微处理器的接口。(2)在发光二极管面板上显示数据。(3)指示速度(mph)、行驶里程、油耗(mpg)等。(4)指示加速或减速。以下是经分析得到的数据流图,有些地方有待填充,假定顶层数据流图是正确的。图 9-14 是顶层数据
17、流图,图 9-15 是第 0 层数据流图,图 9-16 是第 1 层数据流图,其中 A 是加工 1 的细化图,B 是加工 2 的细化图。图中,sps 表示转速 sps 的瞬时变化值,若sps0 则汽车加速,sps0 则减速,sps=0 则匀速。假定题中提供的顶层图是正确的,请回答下列问题。(分数:15.00)_正确答案:(图 9-15 中,缺失的数据流:速度 mph,起点:加工 1 速度处理,终点:仪表板。图 9-16(A)中,缺失的数据流:加速/减速,起点:加工 1.2 确定加速/减速,终点:仪表板。)解析:分析 分层数据流图时刻牢记父图与子图平衡原则。对这种数据流缺失题目,认真对照父图与子
18、图就可得出答案。另外,还要注意与文件的交互,包括错误数据流大多也是出在此。将第 0 层数据流图(见图 9-15)与顶层数据流图(见图 9-14)仔细对照,可以发现缺失了输出数据流“速度mph”,其起点为加工 1 速度处理,终点为仪表板。数据流“速度 mph”虽然从加工 1 输出到了加工 2,但这只是内部数据流。同理,加工 1 的细化图(见图 9-16(A)缺失了数据流“加速碱速”,其起点是加工 1.2 确定加速/减速,终点是仪表板。_正确答案:(图 9-16(B)中,错误的数据流:速度 mph,起点:加工 2.2 计算油耗。)解析:分析 仔细对照加工 2(见图 9-15)和加工 2 的细化图(
19、见图 9-16(B),可以发现对于加工 2.2 数据流“速度 mph”作为输出数据,而该数据流应该是输入数据。_正确答案:(小说明并不描述具体的加工过程,常用的有自然语言、结构化自然语言、判定表和判定树。自然语言描述:若sps0 则汽车加速,sps0 则减速,sps=0 则匀速。结构化自然语言描述:IF sps0 THEN 加速ELSE IF sps0 THEN 减速ELSE 匀速判定表描述:判定树描述:确定加速/减速 )解析:分析 略。二、试题二(总题数:1,分数:15.00)【说明】图书管理系统详细记录图书库存情况、读者信息及读者借阅记录(包括借书日期和还书日期)。新书入库时要为该书编制图
20、书卡片,包括分类目录号、图书流水号(要保证每本书都有唯一的流水号,即使同类图书也是如此)、书名、作者、内容摘要、价格和购书日期。同一个书名由于版次、作者等不同有可能存在多“种”图书,其间用“分类目录号”区分。系统为每一位合法读者编制一个唯一的借书证号,读者需要提供姓名、单位。一个读者最多可以同时借阅 5 本图书。借阅图书时,新添借阅记录,并将对应的“归还标记”字段置为“false”,表示“尚未归还”;归还图书时,将相应的“归还标记”字段置为“true”,表示“已经归还”。一本书可能供多位读者借阅,同一本书读者可以重复借阅。如图 9-17 所示为该系统的 E-R 图。(分数:15.00)_正确答
21、案:(“借阅”联系是“多对多”联系,外键有:借书证号、图书流水号。“借阅”关系模式不存在主键,因为同一本书读者可以重复借阅,即使加上“借书日期”亦不能唯一标识,读者可以在同一天借阅并归还再借阅,应增加一个属性(如借阅流水号)来标识。)解析:分析 “一个读者最多可以同时借阅 5 本图书一本书可能供多位读者借阅,同一本书读者可以重复借阅”,因此联系“借阅”是多对多联系。要特别分清“一本图书”与“一种图书”,一本图书是有流水号标识的,一种图书是由分类目录号标识的。对借阅联系,借阅的是具体的某本书,因此外键有:借书证号、图书流水号。“借阅”关系模式不存在主键,因为同一本书读者可以重复借阅,即使加上“借
22、书日期”亦不能唯一标识,读者可以在同一天借阅并归还再借阅,应增加一个属性(如借阅流水号)来标识。_正确答案:(图书(分类目录号,书名,作者,内容摘要,价格,购书日期),主键:分类目录号副本(图书流水号,分类目录号),主键:图书流水号)解析:分析 由于同一个分类目录号(同一种图书)有多个副本,同一个分类目录号具有相同的很多信息:书名、作者、内容摘要、价格等,同种书中的不同副本由图书流水号区分。故可分解如下:图书(分类目录号,书名,作者,内容摘要,价格,购书日期),主键:分类目录号副本(图书流水号,分类目录号),主键:图书流水号_正确答案:(1)IN (2) Borrow (3) 归还标记=“fa
23、lse“ (4) LIKE)解析:分析 空(1)是引出于查询的,该类连接词有:IN、NOT IN、EXISTS、NOT EXISTS,EXISTS 引出的子查询一般是 SELECT *型,故排除;再据语意分析应填 IN。子查询的语意是“查询当前所借阅的图书流水号(即尚未归还的图书)”,因此应从 Borrow 表中查询,而且归还标记应为 false,故空(2)应填 Borrow,空(3)应填:归还标记=“false“。对字符串进行的操作通常是使用操作符 LIKE 的模式匹配,正符合题意,故空(4)应填“LIKE”。三、试题三(总题数:1,分数:15.00)【说明】C 市刚开通了地铁线,为方便乘客
24、,计划开发自动售票系统。该公司在每一个地铁站放置了多台自动售票机,每一台售票机有一唯一编号,售票记录统一汇总主机。自动售票机只发售从该站起始的各种地铁票,因此乘客只需输入目的站,起始站默认为该站,售票机给出从该站到达目的站的单程票。打印地铁票时为其编一个唯一的流水号,并同时打印自动售票机的编号及票价。售票机的状态变化如下:“空闲”时,显示地铁线路图,等待乘客输入目的站;当乘客输入目的站后,转入“目的站确认/票数输入”状态,同时给出票价,此时若目的站有误,可返回到空闲状态重新输入,否则,输入票数;乘客输入票数后,转入“票数确认/付款”状态,同样此时若票数有误,可返回到上一状态重新输入,否则,投入
25、钱币付款;当付款金额足够时,“出票/找零”(有必要时进行找零);然后转入“空闲”等待输入目的站状态。该系统采用面向对象方法开发,系统中的类及类之间的关系用 UML 类图表示,如图 9-18 所示是该系统类图的一部分,图 9-19 描述了自动售票机的状态转换图。(分数:15.00)_正确答案:(“自动售票机”类的主要属性有;编号、所在地铁站名。)解析:分析 “每一台售票机有一唯一编号”,因此自动售票机应有属性“编号”。“自动售票机只发售从该站起始的各种地铁票”,亦即自动售票机只发售其所在站为起始站的地铁票,故应有属性“地铁站名”。_正确答案:(“地铁票”类的主要属性有:流水号、起始站、目的站、票
26、价。)解析:分析 地铁票应有属性:起始站、目的站、票价、流水号、自动售票机编号。_正确答案:(状态 1:“目的站确认/票数输入”状态 2:“票数确认/付款”状态 3:“出票/找零”状态 4:“空闲”)解析:分析 根据售票机状态变化的描述,易于得出答案。状态 1 应为“目的站确认/票数输入”,状态 2 应为“票数确认/付款”,状态 3 应为“出票/找零”,状态 4 应为“空闲”。四、试题四(总题数:1,分数:15.00)1.【说明】所谓货郎担问题,是指给定一个无向图,并已知各边的权,在这样的图中,要找一个闭合回路,使回路经过图中的每一个点,而且回路各边的权之和最小。应用贪婪法求解该问题。程序先计
27、算由各点构成的所有边的长度(作为边的权值),按长度大小对各边进行排序后,按贪婪准则从排序后的各边中选择边组成回路的边,贪婪准则使得边的选择按各边长度从小到大选择。函数中使用的预定义符号如下:#define M 100typedef struct/*x 为两端点 p1、p2 之间的距离,p1、p2 所组成边的长度*/float x;int p1, p2;tdr;typedef struct/*p1、p2 为和端点相联系的两个端点,n 为端点的度*/int n, P1, p2;tr;typedef struct/*给出两点坐标*/float x,y;tpd;typedef int tlM;int
28、n=10;【函数】float distance(tpd a,tpd b);/*计算端点 a、b 之间的距离*/void sortArr(tdr aM, int m);/*将已经计算好的距离关系表按距离大小从小到大排序形成排序表,m 为边的条数*/int isCircuit(trM, int i, int j);/*判断边(i, j)选入端点关系表 rM后,是否形成回路,若形成回路返回 0*/void selected(tr rM, int i, int j);/*边(i,j)选入端点关系表 r*/void course(tr rM, tl 1M);/*从端点关系表 r 中得出回路轨迹表*/vo
29、id exchange(tdr aM, int m, int b);/*调整表排序表,b 表示是否可调,即是否有边长度相同的边存在*/void travling(tpd pdM, int n, float dist, t1 locusM)/*dist 记录总路程*/tdr drM;/*距离关系表*/tr rM;/*端点关系表*/int i, j, k, h, m;/*h 表示选入端点关系表中的边数*/int b;/*标识是否有长度相等的边*/k=0;/*计算距离关系表中各边的长度*/for(i=1;in;i+)for(j=i+1;j=n;j+)k+;drk.x= (1) ;drk.p1=i;d
30、rk.p2=j;m=k;sortArr(dr,m);/*按距离大小从小到大排序形成排序表*/dob=1;dist=0;k=h=0;dok+;i=drk.p1;j=drk.p2;if(ri.n=1)h+;dist+=drk.x;else if( (4) )/*最后一边选入 r 成回路,则该边必须加入且得到解*/selected(r,i,j);h+;dist+=drk.x;while(k!=n)if(h=n)/*最后一边选入构成回路,完成输出结果*/course(r,locus);else/*找不到解,调整 dr,交换表中边长相同的边在表中的顺序,并将 b 置 0*/(5) ;while(!b);
31、(分数:15.00)_正确答案:(1) distance(pdi,pdj)(2) !isCircuit(r,i,j)(3) selected(r,i,j)(4) h=n-1(5) exchange(dr,m,b)解析:分析 本题主要是函数调用的问题。空(1)是计算各边的长度,根据函数的声明及说明,应填 distance(pdi,pdj)。由注释可见空(2)是判断边(i,j)加入 r 后是否形成回路,若形成了回路,不加入。由语句“dist+=drk.x;”可知此处是将边加入,故此处应该是不形成回路条件。参照 isCircuit 函数声明及说明可知,若形成回路返回 0,故空(2)填“!isCirc
32、uit(r,i,j)”。空(3)是将边(i,j)加入到 r 中,参照 selected 函数声明及说明,可得空(3)填 selected(r, i,j)。由注释可见空(4)是最后一条边条件,变量 h 表示的是“选入端点关系表中的边数”,而 n 各节点回路应该包含 n 条边,这点也可从后面 h=n 输出解看出,故空(4)填 h=n-1。空(5)是进行调整,调用 exchange 函数,正确调用形式为 exchange(dr,m,b)。五、试题五(总题数:1,分数:15.00)2.【说明】以下程序实现数据的排序,将 n 个整数分别按照升序和降序进行排序,类 SortInt_1 实现升序排序,类So
33、rtInt_2 实现降序排序。【Java 代码】class SortInt_1int i,i,k,temp;void SortInt(int a1,int a2)/升序排序for(i=0;ia1-1;i+)k=i;for(j=i+1;ja1;j+)if( (1) ) k=j;if(k !=i)temp=a2i;a2i=a2k;a2k=temp;class SortInt_2 (2) int i,j,k,temp;void SortInt(int a1, int a2)/降序排序for(i=0; ia1-1;i+)k=i;for(j=i+1;ja1;j+)if( (3) )k=j;if(k !=
34、i)temp=a2i;a2i=a2k;a2k=temp;public class testpublic static void main(String args)int a=10,55,100,35,87,90,100,16;SortInt_1 NewInt= (4) ;NewInt.SortInt(a.lenvh,a);/调用 SortInt_1 类的方法System.out.println(“升序排列的数据: “);for(int i=0;ia.length;i+)System.out.print(ai+“ “);System.out.println();NewInt=new SortIn
35、t_2();/创建类 SortInt_2 的对象(5) ;/调用相应方法进行降序排序System.out.println(“降序排列的数据: “);for(int i=0;ia.length;i+)System.out.print(ai+“ “);(分数:15.00)_正确答案:(1) a2ka2j(2) extends SortInt_1(3) a2ka2j(4) new SortInt_1()(5) NewInt.SortInt(a.length,a)解析:分析 本题所采用的排序方法是简单选择排序,即:对 n 个记录进行选择排序。基本思想如下,通过 n-i 次关键字的比较,从 n-i+1
36、个记录中选出关键字最小的记录,并和第 i 个记录进行交换,当 i 等于 n 时所有记录有序排列。据此,类 SortInt_1 中的 SortInt 方法实现升序排序,则每次应该选择尚未排序记录中关键字最小的记录,因此空(1)应填 a2ja2k。同理,类 SortInt_2 中的 SortInt 方法实现降序排序,则每次应该选择尚未排序记录中关键字最大的记录,故空(3)应填 a2ja2k。根据说明,紧跟空(4)的语句 NewInt.SortInt(a.length,a)是调用 SortInt_1 类的方法,意味着此时NewInt 是一个 SortInt_1 类实例,故空(4)应填 new Sor
37、tInt_1()。接着,有语句“NewInt=new SortInt_2()” 创建类 SortInt_2 的对象并将其赋值给 NewInt 变量,根据赋值兼容规则,这意味着 SortInt_2 对象是一个 Sortlnt_1 对象,亦即 SortInt_2 是 SortInt_1 的子类,故空(2)应填 extends SortInt_1。空(5)比较简单,对照上述的调用,可得空(5)应填 NewInt.SortInt(a.length,a)。六、试题六(总题数:1,分数:15.00)3.【说明】本程序将两个从小到大的有序链表合成一个新的从小到大的有序链表。链表的每一项由类 Node 描述,
38、而链表由 List 描述,类 List 的成员函数有以下几个:creatList(): 创建从小到大的有序链表。multiplyList(List L1, Llst L2): 将链表 L1 和链表 L2 合并。print(): 打印链表。【C+代码】#include iostreamusing namespace std;class List;class Nodefriend class List;public:Node(int data)(1) ;private:int data;Node *next;class Listpublic:List()list=NULL;void multipl
39、yList(List L1, List L2);void creatList();void print();private:Node *list;void List:creatList()Node *p, *u, *pre;int dara;list=NULL;wbile(1)cout“输入链表的一项: (小于零,结束链表) “endl;cindata;if(dara0)break;/小于零,结束输入p=list;while(p !=NULL p=p-next;u= (2) ;if(p=list)list=u;else pre-next=u;(3) ;void List:multiplyLis
40、t(List L1, List L2)Node *pL1, *pL2, *pL, *u;list = NULL;pL1 = L1.list;pL2 = L2.11st;while(pL1 != NULL pL1 = pL1-next;elseu = new Node(pL2-data);pL2 = pL2-next;if(list = NULL)list = (4) ;elsepL-next=u;pL=u;pL1 = (pL1 != NULL)? pL1:pL2;while(pL1 != NULL)u= (5) ;pL1 = pL1-next;if(list = NULL)list=pL=u;
41、elsepL-next=u;pL=u;void List:print()Node *p;p = list;while(p !=NULL)coutp-data“/t“;p=p-next;coutend1;void main()List L1, L2, L;cout“创建第一个链表/n“;L1.creatList();cout“创建第二个链表/n“;L2.creatList();L1.print();L2.print();L.multiplyList(L1,L2);L.print();(分数:15.00)_正确答案:(1) this-data=data,next=NULL(2) new Node(data)(3) u-next=p(4) pL=u(5) new Node(pL1-data)解析:分析 空(1)是进行一些初始化工作,类 Node 有两个成员变量 data 和 next,故空(1)应填“this-data =data,next=NULL;”。类 List 的 createList 方法中,通过 while 循环实现数据输入,为了升序存储链表,每读入一个数据,