数据结构Java版习题解答与实验指导.docx
- 文档编号:1185643
- 上传时间:2022-10-18
- 格式:DOCX
- 页数:73
- 大小:1.07MB
数据结构Java版习题解答与实验指导.docx
《数据结构Java版习题解答与实验指导.docx》由会员分享,可在线阅读,更多相关《数据结构Java版习题解答与实验指导.docx(73页珍藏版)》请在冰豆网上搜索。
数据结构Java版习题解答与实验指导
数据结构(Java版)
习题解答与实验指导
第1章绪论
目的:
勾勒数据结构课程的轮廓,了解本课程的目的、性质和主要内容。
内容:
数据结构和算法概念,算法设计与分析。
要求:
理解数据结构基本概念,理解抽象数据类型概念;熟悉算法设计和分析方法。
重点:
数据的逻辑结构和存储结构概念。
难点:
抽象数据类型,链式存储结构,算法分析方法。
实验:
简单算法设计,回顾Java语言的基本语法和面向对象基本概念。
1.1数据结构的基本概念
习1-2什么是数据结构?
数据结构概念包括哪些部分?
习1-3数据的逻辑结构主要有哪三种?
三者之间存在怎样的联系?
习1-4数据的存储结构主要有哪些?
各有何特点?
习1-5不同数据结构之间共同的操作有哪些?
【答】上述1-1~1-4问题说明如下。
①数据结构,指数据元素之间存在关系的数据元素集合。
②数据结构包含数据的逻辑结构、存储结构和数据操作三方面概念。
③数据的逻辑结构主要有三种:
线性结构、树结构和图结构,线性结构是树的特例,树结构是图的特例。
④数据的存储结构有两种:
顺序存储结构和链式存储结构,两者特点分别是数据元素数据连续存储、分散存储。
⑤数据操作主要有:
求数据元素个数,访问、查找、插入、删除数据元素等。
数据结构概念描述如图1.1所示。
图1.1数据结构概念习1-6数据结构与数据类型有什么区别?
为什么要将数据结构设计成抽象数据类型?
【答】数据结构与数据类型概念本质相同,使用数据类型描述数据特性,使用数据结构描述数据之间关系。
将数据结构设计成抽象数据类型,是为了“定义和实现相分离”,这也是数据类型的特点。
1.2算法
习1-8什么是算法?
怎样描述算法?
怎样衡量算法的性能?
【答】算法是对问题求解过程的一种描述,是为解决一类问题给出的一个确定的、有限长的操作序列。
算法特征包括:
有穷性、确定性、输入、输出和可行性。
可以采用自然语言或伪码描述算法的设计思想,采用程序设计语言实现算法。
采用渐进分析法衡量算法性能,用时间复杂度O(f(n))表示所花费时间的量级,即时间效率;用空间复杂度O(S(n))表示算法执行过程中所需要的额外空间。
第2章线性表
目的:
实现线性表抽象数据类型。
内容:
将线性表的顺序存储结构和链式存储结构实现分别封装成顺序表类、单链表类、循环双链表类等,比较这两种实现的特点以及各种基本操作算法的效率。
要求:
理解线性表抽象数据类型,掌握顺序和链式存储结构实现线性表的方法。
重点:
顺序表、单链表、循环双链表等线性表设计训练。
难点:
使用对象引用方式实现链式存储结构,改变结点间的链接关系。
实验:
掌握单链表的遍历、插入、删除、复制等操作算法,熟悉循环单链表、双链表和循环双链表的结构和基本操作。
掌握MyEclipse集成开发环境的程序调试技术。
2.1线性表抽象数据类型
2-1什么是线性表?
线性表主要采用哪两种存储结构?
它们是如何存储数据元素的?
各有什么优缺点?
画出线性表的各种存储结构示意图。
它们是否是随机存取结构?
为什么?
【答】①线性表是数据元素之间具有线性关系的一种线性结构,对线性表的基本操作主要有获得元素值、设置元素值、插入、删除、查找、替换和排序等,插入和删除操作可以在线性表的任意位置进行。
②线性表可以采用顺序存储结构和链式存储结构表示。
线性表()的两种存储结构见教材图1.4所示。
线性表的顺序存储结构(顺序表)用一组连续的存储单元顺序存放线性表的数据元素,元素在内存的物理存储次序与它们在线性表中的逻辑次序相同。
顺序表的特点是数据元素连续存储,元素的存储地址是它在线性表中位置i的线性函数,计算一个元素地址花费常量时间,即存取任何一个元素的时间复杂度是O
(1)。
因此,顺序表是随机存取结构,这是顺序表最大的优点。
顺序表缺点是插入或删除操作效率低,每插入或删除一个元素平均需要移动线性表一半元素。
线性表的链式存储用若干地址分散的存储单元存储数据元素,逻辑上相邻的数据元素在物理位置上不一定相邻,必须采用附加信息表示数据元素之间的顺序关系。
特点是数据元素分散存储,优点是插入或删除操作不需要移动其他元素;缺点是,线性表的链式存储结构不是随机存取结构,获得第i个元素地址的时间复杂度是O(n),因为线性表的链式存储结构(单链表)由若干结点组成,每个结点采用指针域保存其后继结点的地址,获得第i个元素地址平均需要遍历单链表一半结点。
③第2章线性表存储结构及实现的各种类描述如图2.1所示。
图2.1线性表的存储结构
2.2线性表的顺序存储和实现
2.2.1线性表的顺序存储结构
2-1解释顺序存储结构的线性表(顺序表)与数组在概念上的差别。
【答】数组是高级程序设计语言中的一种构造数据类型,具有存储单元连续的特点。
顺序表利用数组的这个特点,将顺序表中的数据元素在数组中连续存放,以数据元素的存储位置体现线性表数据元素之间的逻辑关系,所以数组是实现顺序表的基础。
虽然数组的存储单元是连续的,但数组元素不一定连续。
而用数组实现顺序表时,数据元素必须连续存放,否则无法体现出线性表中数据元素之间的前驱和后继关系。
习2-4为什么顺序表的插入和删除操作必须移动元素?
平均需要移动多少元素?
【答】顺序表中数据元素连续存储,元素之间没有空位置,逻辑上相邻的数据元素在存储位置上也相邻。
因此,插入数据元素时,必须将指定位置之后的数据元素向后移动,以留出空位置;删除数据元素时,必须将删除位置之后的数据元素向前移动,以填补空位置。
2.2.2顺序表
【思考题2-1】SeqList
publicObjectget(inti)//返回第i个元素,0≤i 若i越界,返回null 【答】①SeqList publicObjectget(inti)//返回第i个元素,0≤i 若i越界,返回null { if(i>=0&&i returnthis.element[i];//返回数组元素element[i]引用的对象 returnnull; } 上述声明的调用语句如下: SeqList Objectobj=list.get(0);//父类Object对象obj引用子类Integer的实例,类型多态 obj.toString()//obj调用Object类声明且被子类覆盖的方法,运行时多态 obj.intValue()//编译错,obj不能调用Integer类的成员方法 ((T)obj).intValue()//(T)obj是Integer类的对象 此时,obj对象只能调用Object类声明且被子类覆盖的方法,只有toString()和equals()方法,表现出运行时多态,实际执行obj引用实例所属Integer类提供的方法实现;而不能调用Integer类声明的成员方法。 ②SeqList publicTget(inti)//返回第i个元素,0≤i 若i越界,返回null { if(i>=0&&i return(T)this.element[i];//返回数组元素引用的对象,必须进行强制类型转换 returnnull; } 其中,数组元素element[i]的类型是Object,实际引用实例的类型是T。 上述声明的调用语句如下: SeqList Integeriobj=list.get(0);//Integer类对象iobj引用本类的实例 iobj.intValue()//iobj能够调用Integer类的成员方法 此时,iobj对象不仅能够调用Object类声明的toString()等方法,表现出运行时多态;还能够调用Integer类声明的成员方法。 也可调用语句如下: SeqList Stringstr=list.get(0); str.length()//str能够调用String类的成员方法 习2-5顺序表类以下声明有什么错误? 为什么? publicbooleanequals(Objectobj)//比较两个顺序表是否相等 { returnthis.n==list.n&&this.element==obj.element; } 【答】在深拷贝的含义下,两个顺序表相等意味着: 两个顺序表长度相同且所有元素值相等。 而不是两个顺序表对象的所有成员变量值对应相等。 比较两个顺序表对象是否相等的多种情况如图2.2所示,方法实现见教材第30页。 图2.1比较两个顺序表对象是否相等 2.2.3排序顺序表 【思考题2-1】SeqList 为什么? //返回将this与list所有元素合并连接的顺序表,不改变this和list SeqList extendsT>list) 【答】①SeqList publicvoidaddAll(SeqList extendsT>list)//在this之后添加list所有元素,集合并。 见例2.5 publicSeqList extendsT>list) { SeqList result.addAll(list);//顺序表合并连接,尾插入 returnresult;//只能返回SeqList } 注意: 虽然union(list)方法与addAll(list)方法功能相同,但不能将它们重载如下,因为,参数列表相同而返回值不同,产生二义性,编译器不能根据方法的参数列表确定执行重载方法中的哪一个。 publicvoidaddAll(SeqList extendsT>list) publicSeqList extendsT>list)//语法错,参数列表相同时不能重载 ②排序顺序表表示可重复的排序集合,元素按关键字大小排序。 SortedSeqList publicvoidaddAll(SeqList extendsT>list)//可用,参数list可引用SortedSeqList //其中,执行insert(x)方法运行时多态,当this引用子类实例时,执行排序顺序表按值插入 //合并结果this仍然是排序顺序表 publicSeqList extendsT>list)//算法正确,不可用。 希望返回排序顺序表 //因为,当this引用子类实例时,声明result和创建的仍然是Seq
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 Java 习题 解答 实验 指导