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

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/2286879.html】到电脑端继续下载(重复下载【60天内】不扣币)。

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

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(《数据结构Java版》习题解答.doc)为本站上传会员【精***】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

《数据结构Java版》习题解答.doc

1、 第0章 Java程序设计基础 1 【习0.1】 实验0.1 哥德巴赫猜想。 1 【习0.2】 实验0.2 杨辉三角形。 1 【习0.3】 实验0.3 金额的中文大写形式。 1 【习0.4】 实验0.4 下标和相等的数字方阵。 1 【习0.5】 实验0.5 找出一个二维数组的鞍点 2 【习0.6】 实验0.6 复数类。 2 【习0.7】 实验0.8 图形接口与实现图形接口的类 2 第1章 绪论 3 【习1.1】 实验1.1 判断数组元素是否已按升序排序。 3 【习1.2】 实验1.3 用递归算法求两个整数的最大公因数。 3 第2章 线性表 5 【习2

2、1】 习2-5 图2.19的数据结构声明。 5 【习2.2】 习2-6 如果在遍历单链表时,将p=p.next语句写成p.next=p,结果会怎样? 5 【习2.3】 实验2.2 由指定数组中的多个对象构造单链表。 5 【习2.4】 实验2.2 单链表的查找、包含、删除操作详见8.2.1。 5 【习2.5】 实验2.2 单链表的替换操作。 6 【习2.6】 实验2.2 首尾相接地连接两条单链表。 6 【习2.7】 实验2.2 复制单链表。 6 【习2.8】 实验2.2 单链表构造、复制、比较等操作的递归方法。 7 【习2.9】 建立按升序排序的单链表(不带头结

3、点)。 8 【习2.10】 实验2.6 带头结点的循环双链表类,实现线性表接口。 10 【习2.11】 实验2.5 建立按升序排序的循环双链表。 14 第3章 栈和队列 17 【习3.1】 习3-5 栈和队列有何异同? 17 【习3.2】 能否将栈声明为继承线性表,入栈方法是add(0,e),出栈方法是remove(0)?为什么? 17 【习3.3】 能否用一个线性表作为栈的成员变量,入栈方法是add(0,e),出栈方法是remove(0)?为什么? 17 【习3.4】 能否将队列声明为继承线性表,入队方法是add(e),出队方法是remove(0)?为什么? 17 第4

4、章 串 18 【习4.1】 实验4.6 找出两个字符串中所有共同的字符。 18 【习4.2】 习4-9(1) 已知目标串为"abbaba"、模式串为"aba",画出其KMP算法的匹配过程,并给出比较次数。 18 【习4.3】 习4-9(2) 已知target="ababaab"、pattern="aab",求模式串的next数组,画出其KMP算法的匹配过程,并给出比较次数。 18 第5章 数组和广义表 20 【习5.1】 求一个矩阵的转置矩阵。 20 第6章 树和二叉树 21 【习6.1】 画出3个结点的各种形态的树和二叉树。 21 【习6.2】 找出分别满足下面条件的所

5、有二叉树。 21 【习6.3】 输出叶子结点。 21 【习6.4】 求一棵二叉树的叶子结点个数。 22 【习6.5】 判断两棵二叉树是否相等。 22 【习6.6】 复制一棵二叉树。 23 【习6.7】 二叉树的替换操作。 23 【习6.8】 后根次序遍历中序线索二叉树。 24 第7章 图 25 第8章 查找 26 【习8.1】 实验8.1 顺序表的查找、删除、替换、比较操作。 26 【习8.2】 实验8.2 单链表的全部替换操作。 28 【习8.3】 实验8.2 单链表的全部删除操作。 28 【习8.4】 折半查找的递归算法。 29 【习8.5】 二叉排序树查找

6、的递归算法。 29 【习8.6】 二叉排序树插入结点的非递归算法。 30 【习8.7】 判断一棵二叉树是否为二叉排序树。 31 第9章 排序 32 【习9.1】 判断一个数据序列是否为最小堆序列。 32 【习9.2】 归并两条排序的单链表。 32 【习9.3】 说明二叉排序树与堆的差别。 34 图0.1 下标和相等的数字方阵算法描述 1 图2.1 p.next=p将改变结点间的链接关系 5 图4.1 目标串"abbaba"和模式串"aba"的KMP算法模式匹配过程 18 图4.2 目标串"ababaab"和模式串"aab"的KMP算法模式匹配过程 19 图6.1 3个

7、结点树和二叉树的形态 21 图6.2 单支二叉树 21 图9.2 归并两条排序的单链表 33 表4.1 模式串"aab"的next数组 19 - III - 第0章 Java程序设计基础 【习0.1】 实验0.1 哥德巴赫猜想。 【习0.2】 实验0.2 杨辉三角形。 【习0.3】 实验0.3 金额的中文大写形式。 【习0.4】 实验0.4 下标和相等的数字方阵。 输出下列方阵(当n=4时)。 1 2 6 7 或 1 3 4 10 3 5 8 13

8、 2 5 9 11 4 9 12 14 6 8 12 15 10 11 15 16 7 13 14 16 采用二维数组实现。二维数组中,每一条斜线上各元素下标和相等,如图0.1所示。 图0.1 下标和相等的数字方阵算法描述 程序如下。 public class Upmat { public static void main(String args[]) { int n=4;

9、 //阶数 int[][] mat = new int[n][n]; int k=1; //k是自然数,递增变化 boolean up = true; //方向向上 for (int sum=0; sum

10、t i=sum; i>=0; i--) mat[i][sum-i] = k++; //k先赋值后自加 else for (int i=0; i<=sum; i++) mat[i][sum-i] = k++; up=!up; //方向求反 } for (int sum=n; sum<2*n-1; sum++)

11、 //右下三角 { if (up) for (int j=sum-n+1; jsum-n; j--) mat[sum-j][j] = k++; up=!up; } for (int i=0; i

12、at.length; i++) //输出二维数组元素 { for (int j=0; j

13、口的类 第1章 绪论 【习1.1】 实验1.1 判断数组元素是否已按升序排序。 程序见例1.4的SortedArray.java。 public static boolean isSorted(int[] table) //判断整数数组是否已按升序排序 { //若已排序返回true,否则返回false if (table==null) return false; for (int i=0; i

14、th-1; i++) if (table[i]>table[i+1]) return false; return true; } public static boolean isSorted(Comparable[] table) //判断对象数组是否已按升序排序 { //若已排序返回true,否则返回false if (table==null) return false; for (int i=0; i

15、0) return false; return true; } 【习1.2】 实验1.3 用递归算法求两个整数的最大公因数。 public class Gcd { public static int gcd(int a, int b) //返回a,b的最大公因数,递归方法 { if(b==0) return a;

16、 if(a<0) return gcd(-a, b); if(b<0) return gcd(a, -b); return gcd(b, a%b); } public static void main(String args[]) { int a=12, b=18, c=24; System.out.println("gcd("+a+","+b+","+c+")="+gcd(gcd(a,b),c)); //获得3个整数最大公因数

17、 } } 第2章 线性表 【习2.1】 习2-5 图2.19的数据结构声明。 table数组元素为单链表,声明如下: SinglyLinkedList table[] 【习2.2】 习2-6 如果在遍历单链表时,将p=p.next语句写成p.next=p,结果会怎样? 使p.next指向p结点自己,改变了结点间的链接关系,丢失后继结点,如图2.1所示。 图2.1 p.next=p将改变结点间的链接关系 【习2.3】 实验2.2 由指定数组中的多个对象构造单链表。 在SinglyLinkedList单链表类中,增加构造方法如下。

18、 public SinglyLinkedList(E[] element) //由指定数组中的多个对象构造单链表 { this.head = null; if (element!=null && element.length>0) { this.head = new Node(element[0]); Node rear=this.head; int i=1; while (i

19、 rear.next = new Node(element[i++]); rear = rear.next; } } } 【习2.4】 实验2.2 单链表的查找、包含、删除操作详见8.2.1。 单链表的以下查找、包含、删除等操作方法详见8.2.1顺序查找。 public Node search(E element, Node start) //从单链表结点start开始顺序查找指定对象 public Node search(E element) //若查找到指定对象,

20、则返回结点,否则返回null public boolean contain(E element) //以查找结果判断单链表是否包含指定对象 public boolean remove(E element) //移去首次出现的指定对象 【习2.5】 实验2.2 单链表的替换操作。 在SinglyLinkedList单链表类中,增加替换操作方法如下。 public boolean replace(Object obj, E element) //将元素值为obj的结点值替换为element {

21、 //若替换成功返回true,否则返回false,O(n) if (obj==null || element==null) return false; Node p=this.head; while (p!=null) { if (obj.equals(p.data)) { p.data = element; return true; } p = p.ne

22、xt; } return false; } 【习2.6】 实验2.2 首尾相接地连接两条单链表。 在SinglyLinkedList单链表类中,增加替换操作方法如下。 public void concat(SinglyLinkedList list) //将指定单链表list链接在当前单链表之后 { if (this.head==null) this.head = list.head; else { Node p=this.head; while (p.nex

23、t!=null) p = p.next; p.next = list.head; } } 【习2.7】 实验2.2 复制单链表。 在SinglyLinkedList单链表类中,增加构造方法如下。 public SinglyLinkedList(SinglyLinkedList list) //以单链表list构造新的单链表 { //复制单链表 this.head = null; if (list!=nu

24、ll && list.head!=null) { this.head = new Node(list.head.data); Node p = list.head.next; Node rear = this.head; while (p!=null) { rear.next = new Node(p.data); rear = rear.next; p = p.next; }

25、 } } 【习2.8】 实验2.2 单链表构造、复制、比较等操作的递归方法。 由指定数组中的多个对象构造单链表的操作也可设计为以下的递归方法: public SinglyLinkedList(E[] element) //由指定数组中的多个对象构造单链表 { this.head = null; if (element!=null) this.head = create(element,0); } private Node create(E[] element, int i)

26、 //由指定数组构造单链表,递归方法 { Node p=null; if (i list) //以单链表list构造新的单链表 { this.head = cop

27、y(list.head); } private Node copy(Node p) //复制单链表,递归方法 { Node q=null; if (p!=null) { q = new Node(p.data); q.next = copy(p.next); } return q; } 比较两条单链表是否相等的操作也可设计为以下的递归方法: public boolean equals(Object obj)

28、 //比较两条单链表是否相等 { if (obj == this) return true; if (obj instanceof SinglyLinkedList) { SinglyLinkedList list = (SinglyLinkedList)obj; return equals(this.head, list.head); } return false; } private boolean equals(Node p, Node q)

29、 //比较两条单链表是否相等,递归方法 { if (p==null && q==null) return true; if (p!=null && q!=null) return p.data.equals(q.data) && equals(p.next, q.next); return false; } 【习2.9】 建立按升序排序的单链表(不带头结点)。 采用直接插入排序算法将一个结点插入到已排序的单链表中。 import dataStructure.linearList.Node; imp

30、ort dataStructure.linearList.SinglyLinkedList; //不带头结点的单链表类 public class SortedSinglyLinkedList extends SinglyLinkedList { public SortedSinglyLinkedList() { super(); } public boolean add(E element) //根据指定对象的大小插入在合适位置 {

31、 if (element==null || !(element instanceof Comparable)) return false; //不能插入null或非Comparable对象 Comparable cmp = (Comparable)element; if (this.head==null || pareTo(this.head.data)<=0) this.head = new Node

32、>(element,this.head); //头插入 else { Node front=null, p=this.head; while (p!=null && pareTo(p.data)>0) { front = p; //front是p的前驱结点 p = p.next; } fr

33、ont.next = new Node(element, p); //中间/尾插入 } return true; } public static void main(String args[]) { SortedSinglyLinkedList list = new SortedSinglyLinkedList(); int n=10; System.out.print("insert: ");

34、 for (int i=0; i

35、 9 71 71 19 67 50 80 list: (9, 19, 22, 48, 50, 50, 67, 71, 71, 80) insert: 42 33 52 89 13 11 50 29 78 34 list: (11, 13, 29, 33, 34, 42, 50, 52, 78, 89) insert: 69 16 99 0 20 68 14 73 90 76 list1: (0, 14, 16, 20, 68, 69, 73, 76, 90, 99) 【习2.10】 实验2.6 带头结点的循

36、环双链表类,实现线性表接口。 package dataStructure.linearList; import dataStructure.linearList.DLinkNode; //导入双链表结点类 import dataStructure.linearList.LList; //导入线性表接口 public class CHDoublyLinkedList implements LList //带头结点的循环双链表类 { protected DLinkNode h

37、ead; //头指针 public CHDoublyLinkedList() //构造空链表 { this.head = new DLinkNode(); //创建头结点,值为null this.head.prev = head; this.head.next = head; } public boolean isEmpty()

38、 //判断双链表是否为空 { return head.next==head; } //以下算法同循环单链表,与单链表的差别在于,循环条件不同 public int length() //返回双链表长度 { int i=0; DLinkNode p=this.head.next; //此句与单链表不同 while (p!=head)

39、 //循环条件与单链表不同 { i++; p = p.next; } return i; } public E get(int index) //返回序号为index的对象 { if (index>=0) { int j=0; DLinkNode p=this.head.next;

40、 while (p!=head && j

41、 { if (index>=0 && element!=null) { int j=0; DLinkNode p=this.head.next; while (p!=head && j

42、 E old = (E)p.data; p.data = element; return old; } } return null; } public String toString() { String str="("; DLinkNode p = this.head.next; while (p!=head) { str +

43、 p.data.toString(); p = p.next; if (p!=head) str += ", "; } return str+")"; } //双链表的插入、删除算法与单链表不同 public boolean add(int index, E element) //插入element对象,插入后对象序号为index { //若操作成功

44、返回true,O(n) if (element==null) return false; //不能添加空对象(null) int j=0; DLinkNode front = this.head; while (front.next!=head && j

45、xt; } DLinkNode q = new DLinkNode(element, front, front.next); //插入在front结点之后 front.next.prev = q; front.next = q; return true; } public boolean add(E element) //在单链表最后添加对象,O(1) { if (element==null)

46、 return false; //不能添加空对象(null) DLinkNode q = new DLinkNode(element, head.prev, head); head.prev.next = q; //插入在头结点之前,相当于尾插入 head.prev = q; return true; } public E remove(int index)

47、 //移除指定位置的对象,O(n) { //返回被移除的原对象,指定位置序号错误时返回null E old = null; int j=0; DLinkNode p=this.head.next; while (p!=head && j

48、 if (p!=head) { old = (E)p.data; //操作成功,返回原对象 p.prev.next = p.next; //删除p结点自己 p.next.prev = p.prev; } return old; } public void clear() //清空线性表 {

49、 this.head.prev = head; this.head.next = head; } //以上实现LList接口 public static void main(String args[]) { int i=0; CHDoublyLinkedList list = new CHDoublyLinkedList(); System.out.println("删除第"+i+"个结点"+list.remove(0)); System.out.println(list.toString()); for (i=5; i>=0; i--) list.add(0, new String((char)('A'+i)+"")); for (i=0; i<6; i++) list.add(new String((char)('A'+i)+"")); // list.add(i, new String((char)('A'+i)+"")); System.ou

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服