ImageVerifierCode 换一换
格式:DOC , 页数:17 ,大小:62KB ,
资源ID:1330122      下载积分:5000 积分
快捷下载
登录下载
邮箱/手机:
温馨提示:
如需开发票,请勿充值!快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝扫码支付 微信扫码支付   
注意:如需开发票,请勿充值!
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【http://www.mydoc123.com/d-1330122.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(【计算机类职业资格】初级程序员下午试题-62及答案解析.doc)为本站会员(dealItalian200)主动上传,麦多课文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知麦多课文库(发送邮件至master@mydoc123.com或直接QQ联系客服),我们立即给予删除!

【计算机类职业资格】初级程序员下午试题-62及答案解析.doc

1、初级程序员下午试题-62 及答案解析(总分:90.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)1.【说明】在一个矩阵中,如果其零元素的个数远远多于其非零元素的个数时,称这样的矩阵为稀疏矩阵。稀疏矩阵通常采用三元组数组表示。每个非零元素用一个三元组来表示,即非零元素的行号、列号和它的值。然后按某种顺序将全部非零元素的三元组存于一个数组中。例如,对于以下二维数组:int x34=1,0,0,0,0,5,0,0),0,0,7,2;可用以下数组 a来表示:int a3=3,4,4,0,0,1,1,1,5),2,2,7,2,3,2;其中三元数组 a的第 1行元素的值分别存储稀疏

2、矩阵的行数、列数和非零元素的个数。下面的流程图描述了稀疏矩阵转换的过程。【流程图】(分数:15.00)_二、试题二(总题数:1,分数:15.00)2.【函数 2.1说明】递归函数 sum(int a, int n)的返回值是数组 a的前 n个元素之和。【函数 2.1】int sum (int a,int n)if(n0) return (1) ;else (2) ;【函数 2.2说明】有 3个整数,设计函数 compare(int a,int b,int c)求其中最大的数。【函数 2.2】int compare (int a, int b, int c )int temp, max;(3)

3、a:b;(4) temp:c;【函数 2.3说明】递归函数 dec(int a,int n)判断数组 a的前 n个元素是否是不递增的。不递增返回 1,否则返回0。【函数 2.3】int dec( int a, int n )if(n=1) return 1;if(a0a1) return 0;return (5) ; (分数:15.00)_三、试题三(总题数:1,分数:15.00)3.【说明】以字符流形式读入一个文件,从文件中检索出 6种 C语言的关键字,并统计、输出每种关键字在文件中出现的次数。本程序中规定:单词是一个以空格或/t、/n结束的字符串。其中 6种关键字在程序中已经给出。【程序】

4、#include stdio.h#include stdlib.hFILE *cp;char fname20, buf100;int NUM;struct keychar word10;int count;keyword= “if“, 0, “char“, 0, “int“, 0,“else“, 0, “while“, 0, “return“, 0;char *getword (FILE *fp)int i=0;char c;while(c=getc(fp)!= EOF if(c=EOF)return (NULL);elsebufi+=c;while(c=fgetc(fp)!=EOF bufi

5、=/0;return(buf);void lookup(char *p)int i;char *q, *s;for(i=0; iNUM; i+)q= (2) ;s=p;while(*s break;return;void main()int i;char *word;printf(“lnput file name:“);scanf(“%s“, fname);if(cp=fopen(fname, “r“)=NULL)printf(“File open error: %s/n“, fname);exit(0);NUM=sizeof(keyword)/sizeof(struct key);while

6、( (5) )lookup(word);fclose(cp);for(i=0;iNUM;i+)printf(“keyword:%-20s count=%d/n“,keywordi.word,keywordi.count);(分数:15.00)_四、试题四(总题数:1,分数:15.00)4.【说明】魔方阵,又叫幻方,在我国古代称为“纵横图”。由 1N2共 N2个自然数构成每行、每列及两对角线上各数之和都相等的 NN方阵,这样的方阵就叫做 N阶魔方阵。顾名思义,奇阶魔方阵就是 N为奇数的幻方。奇数阶魔方阵的生成方法如下:(1)第一个位置在第一行正中。(2)新位置应当处于最近一个插入位置右上方,但如

7、果右上方位置已超出方阵上边界,则新位置取应选列的最下一个位置;如果超出右边界,则新位置取应选行的最左一个位置。(3)若最近一个插入元素为 N的整数倍,则选下面一行同列上的位置为新位置。本题要求输入一个数据n,然后打印由自然数 1到 n2的自然数构成的魔方阵(n 为奇数)。例如,当 n=3时,魔方阵为:8 1 63 5 74 9 2了解其生成方法后,就可以根据此方法来写出程序了。首先设置 int变量 i,j,m, n。其中 i标记魔方阵的行;j 标记魔方阵的列;n 表示魔方阵的维数,通过输入得到;通过 m递加得到插入的数据。数组aMAXMAX用于存放魔方阵元素。这里预定义了 MAX 的大小,没有

8、采用动态分配,在此设置为 15,即最大求得 1515阶魔方阵。【程序】#include stdio.h#define MAX 15void main()int n;int m=1;int i,j;int aMAXMAX;printf(“Please input the rank of matrix:“);scanf(“%d“,i=0;(1) while( (2) )aij=m;m+;i-;j+;if(m-1)%n=0 if(j(n-1) /超出上界(4) if(j(n-1)(5) for(i=0;in;i+) /输出魔方阵for(j=0;jn;j+)if(aij/10=0)printf(“%d

9、 “,aij); /对程序无影响,只是使输出的数每一列对齐elseprintf(“%d “,aij);if(j=(n-1)printf(“/n“);(分数:15.00)_五、试题五(总题数:1,分数:15.00)5.【说明】设计希赛 IT教育研发中心的工资管理系统,该中心主要有 3类人员:经理、销售员和销售经理。要求存储这些人员的编号、姓名和月工资,计算月工资并显示全部信息。月工资计算办法是:经理拿固定月薪8000元;销售员拿固定工资 1000元,然后再按当月销售额的 4%提成;销售经理既拿固定月工资也领取销售提成,固定月工资为 5000元,销售提成为所管辖部门当月销售总额的 5。按要求设计一

10、个基类 employee,销售员类 salesman,经理类 manager,销售经理类 salesmanager。程序 5-1是类 employee的模块内容,程序 5-2是类 salesman的类模块内容,程序 5-3是类 manager的模块内容,程序 5-4是类 salesmanager的模块内容。在主测试程序中,输入张三所管部门月销售量 10000后的输出结果如下:张三所管部门月销售量:10000销售经理:张三编号:1001本月工资:5050#include iostream.h#include string.hclass employeeprotected:int no;char

11、*name;float salary;public:employee(int num,char *ch)no=num;name=ch;salary=0; virtual void pay()=0;virtual void display()cout“编号:“noendl;cout“本月工资:“salaryendl; ;【程序 5-2】class salesman: (1) protected:float commrate, sales;public:salesman(int num,char *ch):employee(num,ch)commrate=0.04; void pay()coutn

12、ame“本月销售额:“;cinsaies;salary=sales*commrate+1000; void display()cout“销售员:“nameendl;employee:display(); ;【程序 5-3】class manager: (1) protected:float monthpay;public:manager(int num,char *ch):employee(num,ch)monthpay=8000; void pay()salary=monthpay; void display()cout“经理:“nameendl;employee:display(); ;【

13、程序 5-4】class salesmanager: (2) public:salesmanager(int num,char *ch): (3) monthpay=5000;commrate=0.005;void pay()coutname“所管部门月销售量:“;cinsales;(4) void display()cout“销售经理:“nameendl;(5) ;void main() /主测试函数salesmanager p1 (1001,“张三“);p1.pay();p1.display();(分数:15.00)_六、试题六(总题数:1,分数:15.00)6.【说明】链表和栈对象的共同

14、特征是:在数据上执行的操作与在每个对象中实体存储的基本类型无关。例如,一个栈存储实体后,只要保证最后存储的项最先用,最先存储的项最后用,则栈的操作可以从链表的操作中派生得到。程序 6-1实现了链表的操作,程序 6-2实现了栈操作。import java.io.*;class Node /定义结点private String m_content;private Node m_next;Node(String str)m_content=str;m_next=null; Node(String str,Node next)m_content=str;m_next=next; String getD

15、ata() /获取结点数据域return m_content;void setNext(Node next /设置下一个结点值m_next=next; Node getNext() /返回下一个结点return m_next; )【程序 6-1】class ListNode Head;List()Head=null; void insert(String str) /将数据 str的结点插入在整个链表前面if(Head=null)Head=new Node(str);else(1) void append(String str) /将数据 str的结点插入在整个链表尾部Node tempnod

16、e=Head;it(tempnode=null)Heed=new Node(str);elsewhite(tempnode.getNext()!=null)(2) (3) String get() /移出链表第一个结点,并返回该结点的数据域Srting temp=new String();if(Head=null)System.out.println(“Errow! from empty list!“)System.exit(0); elsetemp=Head.getData();(4) return temp;【程序 6-2】class Stack extends Listvoid push

17、(String str) /进栈 (5) String pop() /出栈return get();(分数:15.00)_初级程序员下午试题-62 答案解析(总分:90.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)1.【说明】在一个矩阵中,如果其零元素的个数远远多于其非零元素的个数时,称这样的矩阵为稀疏矩阵。稀疏矩阵通常采用三元组数组表示。每个非零元素用一个三元组来表示,即非零元素的行号、列号和它的值。然后按某种顺序将全部非零元素的三元组存于一个数组中。例如,对于以下二维数组:int x34=1,0,0,0,0,5,0,0),0,0,7,2;可用以下数组 a来表示:i

18、nt a3=3,4,4,0,0,1,1,1,5),2,2,7,2,3,2;其中三元数组 a的第 1行元素的值分别存储稀疏矩阵的行数、列数和非零元素的个数。下面的流程图描述了稀疏矩阵转换的过程。【流程图】(分数:15.00)_正确答案:(a02=W; (2)xij0; (3)ak2=xij; (4)k+; (5)i+;)解析:分析本题考查程序流程图及数组的操作。根据题目的意思,本题的流程图是用来描述稀疏矩阵转换过程的。而三元数组 d的第 1行元素的值分别用来存储稀疏矩阵 x的行数、列数和非零元素个数,在第(1)空位置处,前面已经分别存储了稀疏矩阵 x的行数和列数,只差非零元素的个数没有存储进数组

19、 a。因此,此空应该填 a02=W。在第(2)空的前面有两条判断语句,我们可以看出它们是为了保证取到的元素是稀疏矩阵中的元素,再往下我们应该判断此元素是否是 0,因此,此空应该填 xij0。根据程序流程图,如果第(2)空中的条件为真,即取到的元素不为 0,那么我们应该将该元素存放到三元数组 a中,第(3)空的前面两条语句已经分别用于存储了稀疏矩阵非 0元素的行号和列号,那么接下来应该是保存其值。因此,此空的答案是 ak2=xij。由题目中对三元数组 a的描述可以知道,三元数组 a的每一行只存储 3个元素。再看流程图,第(4)空的前面三条语句都表示向三元数组 a中存储一个元素。因此,如果再要往数

20、组中添加元素,就需要存放到另外一行。因此,第(4)空应该是将数组的行号加 1,即 k+。结合流程图中三个判断语句的结构和作用来分析,第(5)空应该是 i+,它的作用是保证能取到稀疏矩阵中每一行的元素。二、试题二(总题数:1,分数:15.00)2.【函数 2.1说明】递归函数 sum(int a, int n)的返回值是数组 a的前 n个元素之和。【函数 2.1】int sum (int a,int n)if(n0) return (1) ;else (2) ;【函数 2.2说明】有 3个整数,设计函数 compare(int a,int b,int c)求其中最大的数。【函数 2.2】int

21、compare (int a, int b, int c )int temp, max;(3) a:b;(4) temp:c;【函数 2.3说明】递归函数 dec(int a,int n)判断数组 a的前 n个元素是否是不递增的。不递增返回 1,否则返回0。【函数 2.3】int dec( int a, int n )if(n=1) return 1;if(a0a1) return 0;return (5) ; (分数:15.00)_正确答案:(an-1+sum(a,n-1)或者 a0+sum(a+1,n-1); (2)return 0;(3)temp=(ab)? (4)max=(tempc)

22、? (5)dec(a+1,n-1);)解析:分析 本题考查 C语言函数和一些基本运算。下面我们分别来分析这几个函数。在函数 2.1中,题目要求用此递归函数求数组前 n 个元素之和。递归函数的特点是在函数体中不停地调用函数本身,只是将其函数的参数范围改变。题目中要求我们求数组前n个元素之和,我们可以这样理解,即前 n个元素之和等于第 n个元素加上前 n-1个元素之和,现在的问题转化成如何求前 n-1个元素之和。同样的道理,可以将求前 n-1个元素之和转化成求前 n-2个元素之和,直到这个数小于 0。从函数 2.1的代码中可以知道,在计算以前,首先判断 n与 0的关系,如果 n小于0,说明数组中无

23、元素,因此,返回 0值;如果 n大于等于 0,说明数组中有元素,应该返回的结果是第n个元素加上前 n-1个元素之和,而前 n-1个元素之和是调用函数本身来计算的。因此,第(1)空和第(2)空的答案分别是 an-1)+sum(a,n-1),return()。在函数 2.2中,题目要求我们在三个数中取最大数,在数学中,我们从三个数中取最大数时,一般是首先拿其中两个数比较,取较大的数再与第三个数比较,再取其较大的数,这个数就是三个数中的最大数。从函数 2.2的代码中知道,三个数 a、b、c,两个整型变量 temp与 max。根据求三个数中最大数的数学过程和函数中已给出的代码可知,第(3)空处语句应该

24、为 temp=(ab)?a:b,求得 a、b 中较大数并存放在变量temp中。第(4)空处语句为 max=(tempc)?temp:c。在函数 2.3中,题目要求判断数组 a的前 n个元素是否是不递增的。不递增返回 1,否则返回 0。要判断前 n个元素是否是不递增的,需要判断前 n-1个元素是否是不递增的,以及第 n个元素与第 n-1个元素的关系。此处与函数 2.1一样,用的都是递归函数,只是出口不同,在函数 2.1中,只要数组中没有元素了,递归结束,这里只要第 n个元素大于第 n-1个元素,则返回 0,递归结束。又由 if(a0a1)语句可知,在每次调用函数时,都将其数组中的第一个元素与第二

25、个元素比较来作为递归的出口,如果结果为假,就说明数组的前面两项的关系是不递增的,在下次调用中不用再考虑第一项。因此第(5)空应该是dec(a+1,n-1)。三、试题三(总题数:1,分数:15.00)3.【说明】以字符流形式读入一个文件,从文件中检索出 6种 C语言的关键字,并统计、输出每种关键字在文件中出现的次数。本程序中规定:单词是一个以空格或/t、/n结束的字符串。其中 6种关键字在程序中已经给出。【程序】#include stdio.h#include stdlib.hFILE *cp;char fname20, buf100;int NUM;struct keychar word10;

26、int count;keyword= “if“, 0, “char“, 0, “int“, 0,“else“, 0, “while“, 0, “return“, 0;char *getword (FILE *fp)int i=0;char c;while(c=getc(fp)!= EOF if(c=EOF)return (NULL);elsebufi+=c;while(c=fgetc(fp)!=EOF bufi=/0;return(buf);void lookup(char *p)int i;char *q, *s;for(i=0; iNUM; i+)q= (2) ;s=p;while(*s

27、break;return;void main()int i;char *word;printf(“lnput file name:“);scanf(“%s“, fname);if(cp=fopen(fname, “r“)=NULL)printf(“File open error: %s/n“, fname);exit(0);NUM=sizeof(keyword)/sizeof(struct key);while( (5) )lookup(word);fclose(cp);for(i=0;iNUM;i+)printf(“keyword:%-20s count=%d/n“,keywordi.wor

28、d,keywordi.count);(分数:15.00)_正确答案:(1)(c= |c=/t|c=/n)(2) q+;(4) *s=*q(5)(word=getword(cp)!=NULL)解析:分析 本题考查 C语言对文件中字符串处理的相关知识。题目要求从文件中检索已经给出的 6种 C语言的关键字,并统计、输出每种关键字在文件中出现的次数。这需要我们将文件中的字符串与 6种 C语言的关键字匹配,如果匹配成功一次,则记录下相关的内容。从代码中我们可以分析出,函数 getword()的主要功能是从文件中取出单个单词,并保存在数组 buf中,第(1)空就在这个函数中,在文件中取单词时,首先要能区别

29、单词的开始和结束标志。题目中规定单词是一个以空格或/t、/n,结束的字符串,再结合函数 getword()的代码我们可以知道,此空应该填(c= |c=/t|c=/n)。函数 lookup()是关键函数,其功能是匹配文件的字符串与 C语言的关键字,并记录匹配结果。函数lookup()中的参数指针变量 p是指向 getword()的返回结果的。函数体中 for 循环语句下面是分别用其不同的关键字做匹配,在匹配过程中,用指针变量 q和 s分别指向关键字字符串和文件字符串。因此,第(2)空处的作用是让指针变量 q指向关键字字符串,因此,答案为int m=1;int i,j;int aMAXMAX;pr

30、intf(“Please input the rank of matrix:“);scanf(“%d“,i=0;(1) while( (2) )aij=m;m+;i-;j+;if(m-1)%n=0 if(j(n-1) /超出上界(4) if(j(n-1)(5) for(i=0;in;i+) /输出魔方阵for(j=0;jn;j+)if(aij/10=0)printf(“%d “,aij); /对程序无影响,只是使输出的数每一列对齐elseprintf(“%d “,aij);if(j=(n-1)printf(“/n“);(分数:15.00)_正确答案:(1)j=(n+1)/2-1; (2)m=n

31、*n (3)i=i+2;(4)i=i+n; (5)j=j-n;)解析:分析 本题考查我们对魔方阵的理解及用 C语言的实现。题目给出了魔方阵的原理和生成过程,现在要我们往 1515的二维数组中添加元素,使其呈现魔方阵的结构。程序中的变量 i和,i 确定增加的元素在数组中的位置,每次增加的元素在原来的基础上加 1,只是位置按魔方阵的原理存放。下面来看代码,在第(1)空处,还没有进入增加元素的循环中,应该是赋初值阶段,而用来确定元素在数组中位置的变量 i已有值,i 没有,再根据魔方阵的生成过程的第一条(第一个位置在第一行正中)可知,此空的答案应该是 i=(n+1)/2-1。第(2)空处是一个循环条件

32、,结合全过程来看,我们知道这个循环是不停往数组中增加元素,直到添加完nn个元素。因此,此处是判断要添加的元素应该小于 nn。答案为 m=n*n。第(3)空前面是个条件选择语句,其条件是判断最近一个插入元素 m是否可以被 n整除。根据魔方阵的生成过程的第三条(若最近一个插入元素为 N的整倍数,则选下面一行同列上的位置为新位置),即i=i+1,i 不变。但由于在插入一个元素后,变量 i和 j会分别自动减 1和加 1。因此,答案为 i=i+2。第(4)空前面也是个条件选择语句,其条件是判断是否超出上界,根据魔方阵的生成过程的第二条可以知道,如右上方位置已超出方阵上边界,则新位置取应选列的最下一个位置

33、,因此,此空应该填 i=i+n。第(5)空前面是个条件选择语句,其条件是判断是否超出右边界,根据魔方阵的生成过程的第二条可以知道,如超出右边界则新位置取应选行的最左一个位置。因此,此空应该填 j=j-n。五、试题五(总题数:1,分数:15.00)5.【说明】设计希赛 IT教育研发中心的工资管理系统,该中心主要有 3类人员:经理、销售员和销售经理。要求存储这些人员的编号、姓名和月工资,计算月工资并显示全部信息。月工资计算办法是:经理拿固定月薪8000元;销售员拿固定工资 1000元,然后再按当月销售额的 4%提成;销售经理既拿固定月工资也领取销售提成,固定月工资为 5000元,销售提成为所管辖部

34、门当月销售总额的 5。按要求设计一个基类 employee,销售员类 salesman,经理类 manager,销售经理类 salesmanager。程序 5-1是类 employee的模块内容,程序 5-2是类 salesman的类模块内容,程序 5-3是类 manager的模块内容,程序 5-4是类 salesmanager的模块内容。在主测试程序中,输入张三所管部门月销售量 10000后的输出结果如下:张三所管部门月销售量:10000销售经理:张三编号:1001本月工资:5050#include iostream.h#include string.hclass employeeprote

35、cted:int no;char *name;float salary;public:employee(int num,char *ch)no=num;name=ch;salary=0; virtual void pay()=0;virtual void display()cout“编号:“noendl;cout“本月工资:“salaryendl; ;【程序 5-2】class salesman: (1) protected:float commrate, sales;public:salesman(int num,char *ch):employee(num,ch)commrate=0.04

36、; void pay()coutname“本月销售额:“;cinsaies;salary=sales*commrate+1000; void display()cout“销售员:“nameendl;employee:display(); ;【程序 5-3】class manager: (1) protected:float monthpay;public:manager(int num,char *ch):employee(num,ch)monthpay=8000; void pay()salary=monthpay; void display()cout“经理:“nameendl;emplo

37、yee:display(); ;【程序 5-4】class salesmanager: (2) public:salesmanager(int num,char *ch): (3) monthpay=5000;commrate=0.005;void pay()coutname“所管部门月销售量:“;cinsales;(4) void display()cout“销售经理:“nameendl;(5) ;void main() /主测试函数salesmanager p1 (1001,“张三“);p1.pay();p1.display();(分数:15.00)_正确答案:(1)virtual pub

38、lic employee(2)public manager,public salesman(3)employee(num,ch),manager(num,ch),salesman(num,ch)(4)salary=monthpay+commrate*sales;(5)employee:display();)解析:分析 本题考查类的定义、继承及虚基类与虚函数的应用。首先我们来看一下基类 employee的程序代码,在基类中构造了一个构造函数和两个虚函数,其中虚函数display()可以输出编号和工资。由整个程序的作用可以看出,类 salesman与类 manager应继承类 employee,而

39、类 salesmanager 则应该继承类 salesman与类 manager。在每个类中都有函数 pay()和 display(),且在每个类中都对这两个函数进行了重新定义。这样这两个同名函数出现多个地址映射。要解决这个问题,在 C+语言中,采用虚基类。因此,第(1)空的答案是 virtual pubic employee。第(2)空也是表示类的继承,类 salesmanager继承类 salesman与类 manager,因此,此空答案为 public manager, public salesman。结合整个程序来看,其他三个类都是类 salesmanager的父类,因此,第(3)空处

40、应该填 employee(num,ch),manager(num,ch),salesman(num,ch)。根据题目的要求,再结合主函数与类 salesmanager的模块可以推出第(4)空处的功能是计算销售经理的月总工资,而计算方法是固定工资加提成。因此,答案为 salary=monthpay+commrate*sales。对比三个子类的 display()函数,不难发现第(5)空应为 employee:display()。六、试题六(总题数:1,分数:15.00)6.【说明】链表和栈对象的共同特征是:在数据上执行的操作与在每个对象中实体存储的基本类型无关。例如,一个栈存储实体后,只要保证最

41、后存储的项最先用,最先存储的项最后用,则栈的操作可以从链表的操作中派生得到。程序 6-1实现了链表的操作,程序 6-2实现了栈操作。import java.io.*;class Node /定义结点private String m_content;private Node m_next;Node(String str)m_content=str;m_next=null; Node(String str,Node next)m_content=str;m_next=next; String getData() /获取结点数据域return m_content;void setNext(Node

42、next /设置下一个结点值m_next=next; Node getNext() /返回下一个结点return m_next; )【程序 6-1】class ListNode Head;List()Head=null; void insert(String str) /将数据 str的结点插入在整个链表前面if(Head=null)Head=new Node(str);else(1) void append(String str) /将数据 str的结点插入在整个链表尾部Node tempnode=Head;it(tempnode=null)Heed=new Node(str);elsewh

43、ite(tempnode.getNext()!=null)(2) (3) String get() /移出链表第一个结点,并返回该结点的数据域Srting temp=new String();if(Head=null)System.out.println(“Errow! from empty list!“)System.exit(0); elsetemp=Head.getData();(4) return temp;【程序 6-2】class Stack extends Listvoid push(String str) /进栈 (5) String pop() /出栈return get()

44、;(分数:15.00)_正确答案:(Head=new Node(str,Head);(2)tempnode=tempnode.getNext();(3)tempnode.setNext(new Node(str,tempnode.getNext();(4)Head=Head.getNext();(5)insert(str);)解析:分析本题考查链表和栈的基本特征在 Java中的实现。在对链表进行表头插入时,首先要判断该链表是否为空,如果为空,直接插入结点;如果非空,在插入结点时把该结点的指针域改成能指向下一个结点的地址。在队尾插入时,同样要判断该链表是否为空,如果为空,直接插入结点;如果非空,在插入结点时把上一个结点的指针域改成能指向该结点的地址。下面来具体分析代码,首先定义了一个结点类,类中有两个不同的构造函数和三个函数,分别用于获取结点数据域,设置下一个结点值和返回下一个结点值。第(1)空是函数 insert()里面的代码,函数要实现的功能是将数据 str的结点插入在整个链表前面。结合整个函数看,此空处要实现的功能是在非空链表的前面插入结点,需要指针域来存放下一个结点的地址,而下一个结点的地址就是 Head,因此,此处应该填Head=new Node(str,Head)。第(2)空和第(3)空一起考虑,它们都是函数 append(

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1