Java数据结构和算法笔记_第1页
Java数据结构和算法笔记_第2页
Java数据结构和算法笔记_第3页
Java数据结构和算法笔记_第4页
Java数据结构和算法笔记_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java数据结构和算法第o讲综述参考教材:Java数据结构和算法(第二版),美Robert lafore1. 数据结构的特性数据结构优点缺点数组插入快;如果知道下标,可以非常快地存取査找慢,删除慢,大小固宦有序数组比无序的数组査找快删除和插入慢,大小固定栈提供后进先出方式的存取存取英他项很慢队列)提供先进先岀方式的存取存取英他项很慢链表插入快,删除快査找慢二叉树查找、插入、删除都快(如果树保持平衡)删除算法复杂红-黑树查找、插入、删除都快;树总是平衡的算法复杂2-3-4 树查找、插入、删除都快;树总是平衡的:类 似的树对磁盘存储有用算法复杂哈希表如果关键字已知,则存储极快:插入快删除慢,如果不

2、知道关键字则存 储很慢,对存储空间使用不充分堆插入、删除快;对大数据项的存取很快对其他数据项存取慢图对现实世界建模有些算法慢且复杂2. 经典算法总结査找算法:线性查找和二分查找 排序算法:用表展示第一讲数组1. Java中数组的基础知识1)创建数组在Java中把数组当作对象来对待,因此在创建数组时必须使用new操作符:intj intArr = new intElO;一旦创建数组,数组大小便不可改变。2)访问数组数据项数组数据项通过方括号中的下标来访问,其中第一个数据项的下标是0:intArr0 = 123;3)数组的初始化当创建数组之后,除非将特左的值赋给数组的数据项,否则它们一直是特殊的n

3、ull对 象。int intArr = 1, 2, 3, 4, 5;等效于下而使用new来创建数组并初始化:int intArr = new int ;intArr0 = 1;intArrl = 2;intArr2 = 3;(intArr3 = 4;intArr4 = 5;2. 面向对象编程方式1)使用自定义的类封装数组MyArray 类:入栈出栈D,C,B,A队尾队头出队 do Q1 血 Q1 V入队isplayLinkO ; isplayLinkO ;b.不能无限制地调用本身,须有个出口,化简为非递归状况处理。1.三角数字该数列中的首项为1,第n项是由第n-l项加n后得到的。1)使用循环査

4、找第n项f3直接转换法直接转换法通常用来消除尾递归和单向递归,将递归结构用循环结构来替代。尾递归是 指在递归算法中,递归调用语句只有一个,而且是处在算法的最后。例如求阶乘的递归算法: public long fact(int n)if (n=0) return 1;else return n*fact(n-1);当递归调用返回时,是返回到上一层递归调用的下一条语句,而这个返回位麗正好是算 法的结朿处,所以,不必利用栈来保存返回信息。对于尾递归形式的递归算法,可以利用循环结构来替代。例 如求阶乘的递归算法可以写成如下循环结构的非递归算法:public long fact (int n)int s

5、=0;for (int i=l; is二s*i;间接转换法该方法使用栈保存中间结果,一般需根据递归函数在执行过程中栈的变化得到。其一般 过程如下:将初始状态sO进栈while (栈不为空)退栈,将栈顶元素赋给;if (s是要找的结果)返回;else 寻找到S的相关状态S1;将S1进栈间接转换法在数据结构中有较多实例,如二叉树遍历算法的非递归实现、图的深度优先 遍历算法的非递归实现等等,请读者参考主教材中相关内容第八讲希尔排序希尔排序是由Donald提出来的,希尔排序基于插入排序,并且添加了一些新的特性, 从而大大提髙了插入排序的执行效率。插入排序的缺陷:多次移动。假如一个很小的数据在靠右端位置

6、上,那么要将该数据排 序到正确的位程上,则所有的中间数据都要向右移动一位。希尔排序的优点:希尔排序通过加大插入排序中元素元素之间的间隔,并对这些间隔的 元素进行插入排序,从而使得数据可以大幅度的移动。当完成该间隔的排序后,希尔排序会 减少数据间的间隔再进行排序。依次进行下去。1.x基本思想希尔排序(最小增量排序):算法先将要排序的一组数按某个增量d (n/2, n为要排序 数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序, 然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。当增量减 到1时,进行直接插入排序后,排序完成。间隔的计算:间隔h的

7、初始值为1,通过h二3*h + l来循环计算,知道该间隔大于数 组的大小时停止。最大间隔为不大于数组大小的最大值。间隔的减少:通过公式h = (h - 1)/3来计算。2.算法实现希尔排序的Java代码:后序遍历后序遍历:先后序遍历左子树,再后序遍历右子树,最后访问根右点。后序遍历的Java代码实现:etName (); etName 0);etName 0); etName 0);ntValue0;3. 压缩后仍可能出现的问题冲突,不能保证每个单词都映射到数组的空白单元。 解决办法: 开放地址法 链地址法第十六讲开放地址法1.-“什么是开放地址法当冲突发生时,通过査找数组的一个空位,并将数据

8、填入,而不再用哈希函数得到的数 组下标,即开放地址法。3. 数据的插入数据插入的Java代码实现:etName0 != null) +code;if (arrcode getldO = key) etName (); etName ();1.数据的查找数据查找的Jas代码实现: ind(key) info;a) getName 0); etName 0);elete(key). info; getName (); etName ();图的基本概念1)什么是图图是一种和树相像的数据结构,通常有一个固泄的形状,这是由物理或抽象的问题来决立的。2)邻接如果两个顶点被同一条边连接,就称这两个顶点是邻接

9、的。3)路径路径是从一个顶点到另一个顶点经过的边的序列。4)连通图和非连通图至少有一条路径可以连接所有的顶点,那么这个图就是连通的,否则是菲连通的。5)有向图和无向图有向图的边是有方向的,如果只能从A到B,不能从B到A。无向图的边是没有方向的,可以从A到B.也可以从B到A。6)带权图有些图中,边被赋予了一个权值,权值是一个数字,可以代表如两个顶点的物理距离,或者 是一个顶点到另一个顶点的时间等等。这样的图叫做带权图。2.图的Java代码实现Vertex顶点类:public class Vertex char label;boolean wasVisited;public Vertex(char label) =label;wasVisited = false;Graph图类: public class Graph private int maxSize = 20; private Vertex 1 vertexList;asVisited = tr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论