自引用的类
自引用类包含一个数据成员,其指向与自身类型相同的一个对象。
可以把自引用的对象连接在一起,从而构成有用的数据结构。
动态内存请求
用于创建和维护动态空间,具体的就是释放不再需要的空间以及获取内存空间来放置新节点。
对于动态内存空间的释放,在Java上不用显示说明。Java自动完成无用单元的收集工作。
动态内存请求的极限在机器上为系统能够提供的最大虚拟内存大小。
运算符new用来请求内存。new使用请求内存的对象类型作为参数,返回请求完成时这个类型对象的一个引用。
注意:在使用new运算符时,应测试OutOfMemoryException异常。
链表
链表是一些自引用对象的线性集合,这些对象称作节点。
可以通过链表的第一个节点的引用得到整个链表。但链表的节点通常并不连续存放在内存中。
通常链表的最后一个节点的引用设置为null。
动态的,可以根据需要来增加或减少大小,提供适当的存储空间。
链表中每个节点由两部分组成:当前节点数据+链表中下一个节点对象的引用
堆栈
本质就是一个压缩的链表,仅能从顶部添加或删除节点。后进先出
堆栈的最后一个成员设置为null,表示堆栈的底部。
主要操作:push(推入) 和 pop(弹出)
堆栈在编译器分析表达式和产生机器码时大量使用。
可以通过继承List类来创建一个堆栈类。
队列
队列中的节点只能从首部删除,从尾部添加。先进先出
队列的最后一个节点的指针为null
主要操作:enqueue(入队),dequeue(出队)
同样可以通过继承List类来创建一个队列。
树
树是一种非线性的,二维的,拥有特殊属性的数据结构。
树的节点包含两个或更多的节点。
二叉树——每个节点含有两个指针的树。
根节点是树中的第一个节点,其中的每个指针都指向一个子节点。
左子节点是左子树的第一个节点,同理,右子节点是右子树的第一个节点。同一个节点的子节点称为兄弟节点。没有子节点的节点称为叶节点。
二叉查找树
任何左子树的值都小于它的父节点的值,任何右子树的值都大于父节点的值。
树的遍历:中序遍历,前序遍历,后序遍历。
前序遍历:中左右
中序遍历:左中右
后序遍历:左右中
二叉查找树的创建过程:
1.将第一个数据(data )设置为父节点。
2. d <= data, 如果左节点为null,那么创建一个新的左节点;如果不为空,则在以左节点为父节点重复步骤2;
d >= data, 如果右节点为null,那么创建一个新的右节点;如果不为空,则在以右节点为父节点重复步骤2;
链表,堆栈,队列都是线性数据结构。树不是线性数据结构。