- 浏览: 600209 次
- 来自: ...
最新评论
-
lgh1992314:
相同的元素呢
一种离散化方法 -
HelloSummerR:
圆心的位置是随机的,于是圆的部分会落到canvas外,那样就显 ...
HTML5 Canvas学习笔记(1)处理鼠标事件 -
hlstudio:
好久没见到sokuban了,这有个java版的,带源码,可以参 ...
求推箱子的最小步数(java) -
肖泽文:
太好了,谢谢你。。有中文注释!
HTML5 推箱子游戏过关演示动画 -
swm8023:
删除操作,将最后一个叶子节点插入后也有可能上浮吧
彻底弄懂最大堆的四种操作(图解+程序)(JAVA)
文章列表
对于一个n个节点的链式二叉树,有n+1个空指针域,如果把这些空指针域用来指向当前节点的前驱或者后继,叫做把二叉树线索化。线索化后的二叉树遍历比较方便,不需要递归,效率快。以下使用java实现二叉树的线索化(中序线索二叉树)
一、节点类
public class Node {
private int data;
private Node left;
private boolean leftIsThread;//左孩子是否为线索
private Node right;
private boolean rightIsThread;//右孩子是否为线索
publi ...
顺序存储对完全二叉树而,简单又节省空间。对于一般二叉树,为了能用结点在数组中的相对位置表示结点之间的逻辑关系,也必须按完全二叉树的形式来存储树中的结点,这必然造成空间的浪费,随着二叉树高度的增大,空结点的数量也会急速增多。
/**
* 顺序二叉树
*
* @author liuyan
*/
public class ArrayBinaryTree<T> {
// 节点数组
private Object[] datas;
// 指定的树的深度
private int treeDeep;
// datas数组的实际大小
...
import java.util.*;
public class BinaryTree {
protected Node root;
public BinaryTree(Node root) {
this.root = root;
}
public Node getRoot() {
return root;
}
/** 构造树 */
public static Node init() {
...
建立如图的二叉树并遍历:
import java.util.*;
public class BinaryTree {
protected Node root;
public BinaryTree(Node root) {
this.root = root;
}
public Node getRoot() {
return root;
}
/** 构造树 */
public static Node ...
有两种常用的方法可用来搜索图:即深度优先搜索和广度优先搜索。它们最终都会到达所有连通的顶点。深度优先搜索通过栈来实现,而广度优先搜索通过队列来实现。
深度优先搜索:
下面图中的数字显示了深度优先搜索顶点被访问的顺序。
为了实现深度优先搜索,首先选择一个起始顶点并需要遵守三个规则:
(1) 如果可能,访问一个邻接的未访问顶点,标记它,并把它放入栈中。
(2) 当不能执行规则1时,如果栈不空,就从栈中弹出一个顶点。
(3) 如果不能执行规则1和规则2,就完成了整个搜索过程。
广度优先搜索:
在深度优先搜索中,算法表现得好像要尽快地远离起始点似的。相反,在广度优先搜索中,算法好像 ...
自测卷
一、填空
1. 在顺序表中插入或删除一个元素,需要平均移动 (表中一半元素),具体移动的元素个数与( 表长和该元素在表中的位置) 有关。
2. 线性表中结点的集合是( 有限) 的,结点间的关系是 ( 一对一 ...
一、分治法的基本思想
任何一个可以用计算机求解的问题所需的计算时间都与其规模N有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。
例如,对于n个元素的排序问题,当n=1时,不需任何计算;n=2 ...
一、填空题
...................................
二、单项选择题
(B)1. 非线性结构是数据元素之间存在一种:
A)一对多关系 B)多对多关系 C)多对一关系 D)一对一关系
(C)2. 数据结构中,与所使用的计算机无关的是数据的( ) 结构;
A) 存储 B) 物理 C) 逻辑 D) 物理和存储
(C)3. 算法分析的目的是:
A) 找出数据结构的合理性 B) 研究算法中的输入和输出的关系
C ...
二 判断题
1. 消除递归不一定需要使用栈,此说法( √ )
2. 栈是实现过程和函数等子程序所必需的结构。( √ )
3. 两个栈共用静态存储空间,对头使用也存在空间溢出问题。( √ )
4.两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。( √ )
5. 即使对不含相同元素的同一输入序列进行两组不同的合法的入栈和出栈组合操作,所得的输出序列也一定相同。( × )
6. 栈与队列是一种特殊操作的线性表。( √ )
7. 若输入序列为1,2,3,4,5,6,则通过一个栈可以输出序列3,2,5,6,4,1. ( ...
利用迭代算法解决问题,需要做好以下三个方面的工作:
一、确定迭代变量。在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
二、建立迭代关系式。所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方
法来完成。
三、对迭代过程进行控制。在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地重复执行下去。迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。对于前一种情况 ...
1.判断闰年与日、月、年是否有效的函数
四年一闰;百年不闰;四百年再闰。
static boolean isValidDate(int d, int m, int y) {
if (d < 1 || m < 1 || m > 12) return false;
if (m == 2) {
if (isLeapYear(y)) return d <= 29;
else return d <= 28;
}
else if (m == 4 || m == 6 || m ...
循环队列能充分利用空间,解决队列假上溢现象。
import java.io.*;
public class QueueArray {
Object[] a;
/*对象数组,队列最多存储a.length-1个对象,浪费一个存储单元。这是因为如果将数组装满,则队列满和队列空的条件都是: rear=front
*为了便于判断,将队列满的条件改为:(rear+1)%a.length=front,这样便要浪费一个存储单元。
*队列空的条件仍是: rear=front
*/
int front; //队首下标
...
1. 对于栈操作数据的原则是( )。
A. 先进先出 B. 后进先出 C. 后进后出 D. 不分顺序
2. 在作进栈运算时,应先判别栈是否( ① ),在作退栈运算时应先判别栈是否( ② )。当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为( ③ )。
为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的内存空间时,应将两栈的 ( ④ )分别设在这片内存空间的两端,这样,当( ⑤ )时,才产生上溢。
①, ②: A. 空 B. 满 C. 上溢 D. 下溢 ...
前缀表达式、中缀表达式和后缀表达式都是对表达式的记法,因此也被称为前缀记法、中缀记法和后缀记法。它们之间的区别在于运算符相对与操作数的位置不同:前缀表达式的运算符位于与其相关的操作数之前;中缀和后 ...
前缀表达式就是不含括号的算术表达式,而且它是将运算符写在前面,操作数写在后面的表达式,也称为“波兰式”。
例如,- 1 + 2 3,它等价于1-(2+3)。
后缀表达式:
不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则)
如:2 1 + 3 *,即(2 + 1) * 3
中缀表达式(或中缀记法)是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间(例:3 + 4)。
中缀表达式是人们常用的算术表示方法。
下载文档: