上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 15 下一页
摘要: 1,堆的特征1)堆是一颗完全二叉树,这跟前面的二叉树,二叉查找树均不同,这意味着,建堆的时候,堆的插入位置是按顺序固定的2)每个节点小于或等于其左右子节点(最小堆)3)堆中的任意一颗子树也是一个堆,注意概念都是递归定义的2,堆实现的接口为了便于来测试写的堆是否正确,除了实现接口中的操作外,还实现了前面二叉树里面的3种遍历迭代器(用来检测堆是否正确),实现方法完全一样,直接复制过来的,在堆的学习中,不再详述,只实现堆作为堆特有的操作。HeapADTpackage Heap;import Tree.BinaryTreeADT;public interface HeapADT{ public voi 阅读全文
posted @ 2011-05-17 00:35 jinmengzhe 阅读(1109) 评论(0) 推荐(2) 编辑
摘要: 1,实例变量,构造器,数组扩展private Object[] contents; private int count; public ArrayBinarySearchTree(Object root) { //Object[] contents = new Object[10]; 悲剧啊!!!!局部变量覆盖了类成员变量 contents = new Object[10]; contents[0] = root; count = 1; } public void expand() { //Object[] larger = new Object[size()*3]; Object[] lar 阅读全文
posted @ 2011-05-15 23:30 jinmengzhe 阅读(2644) 评论(0) 推荐(1) 编辑
摘要: 在二叉树里,提到过,并没有去实现插入(只有在指定位置插入),删除操作,因为对于树形结构,跟线性结构不一样,插入没有固定的位置,删除会导致树的形状发生改变。二叉排序树是在二叉树的基础上,对结点元素增添了有序(Comparable)特性。递归的有: 左子节点 < 根节点 < 右子节点,这样插入就有了唯一的位置,删除导致树形结构的破坏也有规则来重新调整树的结构。1,二叉查找树的接口ADT一般来说,二叉排序树要实现下列操作:BinarySearchTreeADTpackage Tree;public interface BinarySearchTreeADT extends BinaryT 阅读全文
posted @ 2011-05-14 01:10 jinmengzhe 阅读(952) 评论(0) 推荐(1) 编辑
摘要: 存储方案:用数组来实现二叉树,树上的元素存放位置在数组中是固定的---如果树的i位置(从0开始按层编号)有元素,就放在数组的i号位置,没有元素,数组对应的位置就空着。i的左右子树的编号为2i+1和2i+2。1,实例变量,容量动态扩展,以及构造方法: protected Object[] contents; protected int count;//count表示树中节点数,不是数组当前最后一个可用的下标 //一些构造函数和必备的支持方法 public ArrayBinaryTree(Object root) { //Object[] contents = new Object[10]; 悲剧 阅读全文
posted @ 2011-05-13 21:16 jinmengzhe 阅读(12167) 评论(0) 推荐(0) 编辑
摘要: 相关术语:平衡树,非平衡树,完全数,满树。实现策略:1)数组实现这个还是非常重要的,有时间写一下,先用链来写元素n的(从0开始按层编号)左子树编号为2n+1,右子树编号为2n+2,数学证明就略了,用这个来控制下标2)模拟链式实现3)链式实现树是一种非线性结构,那么跟前不一样,必须根据你的需求来构造新的节点才能满足树中的节点特征:package Tree;public class BinaryTreeNode { protected Object element; protected BinaryTreeNode left,right; public BinaryTreeNode(Object 阅读全文
posted @ 2011-05-08 22:53 jinmengzhe 阅读(1722) 评论(0) 推荐(1) 编辑
摘要: 用链式实现的线性表,公共接口ADT跟上一篇一样1,有序链表成员变量和构造函数:private LinearNode front;private int count; public LinkedOrderedList(){ front = null; count = 0;实现清单(将ADT和有序链表扩展的独有操作分别作了注释):LinkedOrderedListpackage List;import Bag.LinearNode;public class LinkedOrderedList implements ListADT { private LinearNode front; privat 阅读全文
posted @ 2011-05-08 21:40 jinmengzhe 阅读(549) 评论(0) 推荐(1) 编辑
摘要: 分别实现3种类型的链表,这一篇用数组来实现线性表---有序链表:链表元素或节点始终保持有序,链表元素为Comparable对象,主要体现在插入操作要插入在相应的序列位置无序链表:无序,每次指定插入在哪(表头,尾,or指定元素之后)索引链表:提供了许多与索引相关的操作将三种实现的都有的公共操作定义在一个接口ADT中,对应于各自特征所特有的操作扩展在自己的类中,可以看到,其实就是插入操作(add)不同而已。以上说明具体见下列ADT定义中的注释:链表ADT: ListADTpackage List;/*1,我们将实现3中类型的链表:有序链表的元素是可比较对象,在插入删除时始终维持链表有序;无序链表是 阅读全文
posted @ 2011-05-04 12:29 jinmengzhe 阅读(2018) 评论(1) 推荐(1) 编辑
摘要: 1,队列ADTQueueADTpackage Queue;public interface QueueADT { public void enqueue(Object element);//入队 public Object dequeue();//出队 public Object first();//返回队首元素 public boolean isEmpty(); public int size(); public String toString(); }2,队列的链式实现维护一个指向队首的front结点,一个指向队尾的rear结点,和一个标识队列大小的count变量:private Line 阅读全文
posted @ 2011-04-30 15:34 jinmengzhe 阅读(6060) 评论(0) 推荐(1) 编辑
摘要: 1,堆栈ADTStackADT package Stack;public interface StackADT { public void push(Object element);//压栈 public Object pop();//出栈 public boolean isEmpty(); public int size(); public Object peek();//返回栈顶对象的一个引用 public String toString();}2,链式实现在栈的一段添加和删除元素,在栈中维护一个指向栈顶的结点和一个count变量指示栈的大小:private LinearNode top; 阅读全文
posted @ 2011-04-30 00:59 jinmengzhe 阅读(962) 评论(0) 推荐(1) 编辑
摘要: 1,怎样来定义一个数据结构?一般来说,你要1)先定义这个数据结构的抽象机制(即ADT),用一个接口来表示,2)用一个类(即表示数据结构)来实现这个接口(即实现这个数据结构)3)考虑怎样来实现这个数据结构(例如存储形式,维护那些变量等)例如,要写一个集合的数据结构,1)先要根据你需要的功能设计好集合里面需要定义哪些操作(方法),可以把它写成一个接口ADT,2)然后写一个集合的类来实现上述接口,这样你就实现了集合这个数据结构3)当然,你要考虑第三个问题,怎么来实现,即集合以一种什么形式组织在一起当然,也可以不写接口,你要定义这个数据结构拥有哪些操作直接写一个这样的类也行,先写一个接口是为了抽象机制 阅读全文
posted @ 2011-04-29 23:17 jinmengzhe 阅读(1525) 评论(0) 推荐(1) 编辑
上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 15 下一页