《数据结构Java版》习题解答.docx
- 文档编号:1282007
- 上传时间:2022-10-20
- 格式:DOCX
- 页数:35
- 大小:62.81KB
《数据结构Java版》习题解答.docx
《《数据结构Java版》习题解答.docx》由会员分享,可在线阅读,更多相关《《数据结构Java版》习题解答.docx(35页珍藏版)》请在冰豆网上搜索。
《数据结构Java版》习题解答
第1章Java程序设计基础
【习1.1】实验0.1哥德巴赫猜想。
【习1.2】实验0.2杨辉三角形。
【习1.3】实验0.3金额的中文大写形式。
【习1.4】实验0.4下标和相等的数字方阵。
输出下列方阵(当n=4时)。
1267或13410
3581325911
491214681215
101115167131416
采用二维数组实现。
二维数组中,每一条斜线上各元素下标和相等,如图0.1所示。
图1.2下标和相等的数字方阵算法描述
程序如下。
publicclassUpmat
{
publicstaticvoidmain(Stringargs[])
{
intn=4;//阶数
int[][]mat=newint[n][n];
intk=1;//k是自然数,递增变化
booleanup=true;//方向向上
for(intsum=0;sum { if(up) for(inti=sum;i>=0;i--) mat[i][sum-i]=k++;//k先赋值后自加 else for(inti=0;i<=sum;i++) mat[i][sum-i]=k++; up=! up;//方向求反 } for(intsum=n;sum<2*n-1;sum++)//右下三角 { if(up) for(intj=sum-n+1;j mat[sum-j][j]=k++; else for(intj=n-1;j>sum-n;j--) mat[sum-j][j]=k++; up=! up; } for(inti=0;i { for(intj=0;j System.out.print(""+mat[i][j]); System.out.println(); } } } 【习1.1】实验0.5找出一个二维数组的鞍点 【习1.2】实验0.6复数类。 【习1.3】实验0.8图形接口与实现图形接口的类 第2章绪论 【习2.1】实验1.1判断数组元素是否已按升序排序。 程序见例1.4的SortedArray.java。 publicstaticbooleanisSorted(int[]table)//判断整数数组是否已按升序排序 {//若已排序返回true,否则返回false if(table==null) returnfalse; for(inti=0;i if(table[i]>table[i+1]) returnfalse; returntrue; } publicstaticbooleanisSorted(Comparable[]table)//判断对象数组是否已按升序排序 {//若已排序返回true,否则返回false if(table==null) returnfalse; for(inti=0;i if(table[i].compareTo(table[i+1])>0) returnfalse; returntrue; } 【习2.2】实验1.3用递归算法求两个整数的最大公因数。 publicclassGcd { publicstaticintgcd(inta,intb)//返回a,b的最大公因数,递归方法 { if(b==0) returna; if(a<0) returngcd(-a,b); if(b<0) returngcd(a,-b); returngcd(b,a%b); } publicstaticvoidmain(Stringargs[]) { inta=12,b=18,c=24; System.out.println("gcd("+a+","+b+","+c+")="+gcd(gcd(a,b),c));//获得3个整数最大公因数 } } 第3章线性表 【习3.1】习2-5图2.19的数据结构声明。 table数组元素为单链表,声明如下: SinglyLinkedList 【习3.2】习2-6如果在遍历单链表时,将p=p.next语句写成p.next=p,结果会怎样? 使p.next指向p结点自己,改变了结点间的链接关系,丢失后继结点,如图2.1所示。 图3.2p.next=p将改变结点间的链接关系 【习3.1】实验2.2由指定数组中的多个对象构造单链表。 在SinglyLinkedList单链表类中,增加构造方法如下。 publicSinglyLinkedList(E[]element)//由指定数组中的多个对象构造单链表 { this.head=null; if(element! =null&&element.length>0) { this.head=newNode(element[0]); Node inti=1; while(i { rear.next=newNode(element[i++]); rear=rear.next; } } } 【习3.2】实验2.2单链表的查找、包含、删除操作详见8.2.1。 单链表的以下查找、包含、删除等操作方法详见8.2.1顺序查找。 publicNode publicNode publicbooleancontain(Eelement)//以查找结果判断单链表是否包含指定对象 publicbooleanremove(Eelement)//移去首次出现的指定对象 【习3.3】实验2.2单链表的替换操作。 在SinglyLinkedList单链表类中,增加替换操作方法如下。 publicbooleanreplace(Objectobj,Eelement)//将元素值为obj的结点值替换为element {//若替换成功返回true,否则返回false,O(n) if(obj==null||element==null) returnfalse; Node while(p! =null) { if(obj.equals(p.data)) { p.data=element; returntrue; } p=p.next; } returnfalse; } 【习3.4】实验2.2首尾相接地连接两条单链表。 在SinglyLinkedList单链表类中,增加替换操作方法如下。 publicvoidconcat(SinglyLinkedListlist)//将指定单链表list链接在当前单链表之后 { if(this.head==null) this.head=list.head; else { Node while(p.next! =null) p=p.next; p.next=list.head; } } 【习3.5】实验2.2复制单链表。 在SinglyLinkedList单链表类中,增加构造方法如下。 publicSinglyLinkedList(SinglyLinkedList {//复制单链表 this.head=null; if(list! =null&&list.head! =null) { this.head=newNode(list.head.data); Node Node while(p! =null) { rear.next=newNode rear=rear.next; p=p.next; } } } 【习3.6】实验2.2单链表构造、复制、比较等操作的递归方法。 由指定数组中的多个对象构造单链表的操作也可设计为以下的递归方法: publicSinglyLinkedList(E[]element)//由指定数组中的多个对象构造单链表 { this.head=null; if(element! =null) this.head=create(element,0); } privateNode { Node if(i { p=newNode(element[i]); p.next=create(element,i+1); } returnp; } 单链表的复制操作也可设计为以下的递归方法: publicSinglyLinkedList(SinglyLinkedList { this.head=copy(list.head); } privateNode { Node if(p! =null) { q=newNode(p.data); q.next=copy(p.next); } returnq; } 比较两条单链表是否相等的操作也可设计为以下的递归方法: publicbooleanequals(Objectobj)//比较两条单链表是否相等 { if(obj==this) returntrue; if(objinstanceofSinglyLinkedList) { SinglyLinkedListlist=(SinglyLinkedList)obj; returnequals(this.head,list.head); } returnfalse; } privatebooleanequals(Node { if
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构Java版 数据结构 Java 习题 解答