文档介绍:Java 数据结构和算法 Java 数据结构和算法一、数组于简单排序.......................................................... .1 二、栈与队列......................................................... ....... 4 三、链表......................................................... ........... 7 四、递归......................................................... .......... 22 五、哈希表......................................................... ........ 25 六、高级排序......................................................... ...... 25 七、二叉树......................................................... ........ 25 八、红—黑树......................................................... ...... 26 九、堆......................................................... ............ 36 十、带权图......................................................... ........ 39 一一一一、、、、数组于简单排序数组于简单排序数组于简单排序数组于简单排序数组数组数组数组数组( array ) 是相同类型变量的集合, 可以使用共同的名字引用它。数组可被定义为任何类型, 可以是一维或多维。数组中的一个特别要素是通过下标来访问它。数组提供了一种将有联系的信息分组的便利方法。一维数组一维数组一维数组一维数组一维数组( one-dimensional array )实质上是相同类型变量列表。要创建一个数组, 你必须首先定义数组变量所需的类型。通用的一维数组的声明格式是: type var-name[ ]; 获得一个数组需要 2步。第一步, 你必须定义变量所需的类型。第二步,你必须使用运算符 new 来为数组所要存储的数据分配内存, 并把它们分配给数组变量。这样 Java 中的数组被动态地分配。如果动态分配的概念对你陌生,别担心,它将在本书的后面详细讨论。数组的初始化( array initializer ) 就是包括在花括号之内用逗号分开的表达式的列表。逗号分开了数组元素的值。 Java 会自动地分配一个足够大的空间来保存你指定的初始化元素的个数,而不必使用运算符 new 。 Java 严格地检查以保证你不会意外地去存储或引用在数组范围以外的值。 Java 的运行系统会检查以确保所有的数组下标都在正确的范围以内(在这方面, Java 与 C/C++ 从根本上不同, C/C++ 不提供运行边界检查)。多维数组多维数组多维数组多维数组在 Java 中,多维数组( multidimensional arrays )实际上是数组的数组。你可能期望,这些数组形式上和行动上和一般的多维数组一样。然而, 你将看到, 有一些微妙的差别。定义多维数组变量要将每个维数放在它们各自的方括号中。例如,下面语句定义了一个名为 twoD 的二维数组变量。 int twoD[][] = new int[4][5]; 简单排序简单排序简单排序简单排序简单排序中包括了:冒泡排序、选择排序、插入排序; 1. 冒泡排序的思想: 假设有 N 个数据需要排序, 则从第 0 个数开始, 依次比较第 0 和第 1 个数据, 如果第 0 个大于第 1 个则两者交换, 否则什么动作都不做, 继续比较第1 个第 2个…,这样依次类推,直至所有数据都“冒泡”到数据顶上。冒泡排序的的 java 代码: Public void bubbleSort() { int in,out; for(out=nElems-1;out>0;out--) for(in=0;in<out;in++) { If(a[in]>a[in+1]) Swap(in,in+1); }} 算法的不变性: 许多算法中, 有些条件在算法执行过程中始终是不变的。这些条件被称为算法的不变性,如果不变性不为真了,则标记出错了; 冒泡排序的效率 O( N*N ),比较 N*N/2 ,交换 N*N/4