1 / 43
文档名称:

java数据结构和算法.doc

格式:doc   大小:612KB   页数:43
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

java数据结构和算法.doc

上传人:pppccc8 2019/1/29 文件大小:612 KB

下载得到文件列表

java数据结构和算法.doc

相关文档

文档介绍

文档介绍::..Java数据结构和算法一、 数飢于简单排序 1二、 栈与队列 4三、 链表 7迹归 22五、 哈希表 25六、 高级排序 25七'二叉树 25八、红一黑树 26九>堆 36十、带权图 39〔组于简单排序数组(array)是相同类型变量的集合,可以使用共同的名字引用它。数组可被定义为任何类型,可以是一维或多维。数组中的一个特别耍素是通过下标來访问它。数组提供了一种将冇联系的信息分组的便利方法。一维数组—维数组(one-dimensionalarray)实质上是和同类型变量列表。要创建一个数组,你必须首先定义数组变景所需的类型。通用的一维数组的声明格式是:typevar-name[];获得一个数组需要2步。第一步,你必须定义变量所需的类型。第二步,你必须使用运算符new来为数组所要存储的数据分配内存,并把它们分配给数组变量。这样java中的数组被动态地分配。如果动态分配的概念对你陌生,别担心,它将在本书的后而详细讨论。数组的初始化(arrayinitializer)就是包括在花括号之内用逗号分幵的表达式的列表。逗号分开了数组元索的值。java会自动地分配一个足够大的空间來保存你指定的初始化元素的个数,而不必使用运算符new。Java严格地检查以保证你不会意外地去存储或引用在数组范围以外的值。Java的运行系统会检查以确保所有的数组卜标都在正确的范围以PJ(在这方而,Java与C/C++从根本上不同,C/C++不提供运行边界检查)。多维数组在Java中,多维数组(multidimensionalarrays)实际上是数组的数组。你可能期望,这些数组形式上和行动上和一般的多维数组一样。然而,你将看到,有一些微妙的差别。定义多维数组变量要将每个维数放在它们各自的方拈号中。例如,下而语句定义了一个名为twoD的二维数组变量。inttwoD[][]=newint[4][5];简单排序简单排序中包括了:冒泡排序、选择排序、插入排序;:假设有N个数据需要排序,则从第0个数开始,依次比较第0和第1个数据,如果第0个大于第1个则两者交换,否则什么动作都不做,继续比较第1个第2个…,这样依次类推,直至所宥数据都“冒泡”到数据顶上。冒泡排序的的java代码:PublicvoidbubbleSort(){intin,out;for(out=nElems-l;out〉0;out--)for(in=0;in<out;in++){lf(a[in]>a[in+l])Swap(in,in+1);}}算法的不变性:许多算法屮,有些条件在算法执行过程屮始终是不变的。这些条件被称为算法的不变性,如果不变性不为真了,则标记岀错了;冒泡排序的效率0(N*N),比较N*N々,交换N*N/4;:假设有N条数据,则暂且标记第0个数据为MIN(最小),使用OUT标记最左边未排序的数据,然I?使用IN标记第1个数据,依次与MIN进行比较,如果比MIN小,则将该数据标记为MIN,当第一轮比较完后,最终的MIN与OUT标记数据交换,依次类推;选择排序的java代码:PublicvoidselectSort(){Intin,out,min;For(out=0;out<nElems-l;out++){Min=out;For(in=out+l;in<nElems;in++)lf(a[in]<a[min])Min=in;Swap(out,min);}}选择排序的效率:O(N*N),比较N*N々,交换<N;选择排序与冒泡排序比较,比较次数没冇明显改变,但交换次数明显减少了很多;:插入排序是在部分数据有序的情况下,使用OUT标记第•一个无序的数据,将其提取保存到一个屮间变量temp屮去,使用IN标记空位置,依次比较temp屮的值与IN-1的值,如果IN-值大于temp的值,则后移,直到遇到第一个比temp小的值,在其下一个位置插入:插入排序的java代码:PublicvoidlnsertionSort(){Intin,out;For(out=l;out<nElems;out++)Longtemp=a[out]ln=out;While(in>0&&a[in-l]>temp){A[in】=a[in-1];--in;}A[in]=temp;}}插入排序的效率.•O(N*N),比较N*N/4,复制N*N/4;插入排序在随机数的情况下,比0泡快一倍,比选择稍快;在基木有序的数组中,插入排序几乎只需要0(N);在逆序情况下,并不比冒泡快;二、栈与队列1、栈的定义栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表。(1)通常称插入、删除的这一端为栈顶(