Java基于列表实现的元素迭代器、位置迭代器、树迭代器(算法源码)
来源:互联网 发布:centos 用户密码忘记 编辑:程序博客网 时间:2024/06/05 02:27
/* 高手之作,本人谨以收藏者身份共享源码,供大家参考之! */
/*
* 迭代器ADT接口
*/
package dsa;
public interface Iterator {
boolean hasNext();//检查迭代器中是否还有剩余的元素
Object getNext();//返回迭代器中的下一元素
}
/*
* 基于列表实现的元素迭代器
*/
package dsa;
public class IteratorElement implements Iterator {
private List list;//列表
private Position nextPosition;//当前(下一个)元素的位置
//默认构造方法
public IteratorElement() { list = null; }
//构造方法
public IteratorElement(List L) {
list = L;
if (list.isEmpty())//若列表为空,则
nextPosition = null;//当前元素置空
else//否则
nextPosition = list.first();//从第一个元素开始
}
//检查迭代器中是否还有剩余的元素
public boolean hasNext() { return (null != nextPosition); }
//返回迭代器中的下一元素
public Object getNext() throws ExceptionNoSuchElement {
if (!hasNext()) throw new ExceptionNoSuchElement("意外:没有下一元素");
Position currentPosition = nextPosition;
if (currentPosition == list.last())//若已到达尾元素,则
nextPosition = null;//不再有下一元素
else//否则
nextPosition = list.getNext(currentPosition);//转向下一元素
return currentPosition.getElem();
}
}
/*
* 基于列表实现的位置迭代器
*/
package dsa;
public class IteratorPosition implements Iterator {
private List list;//列表
private Position nextPosition;//当前(下一个)位置
//默认构造方法
public IteratorPosition() { list = null; }
//构造方法
public IteratorPosition(List L) {
list = L;
if (list.isEmpty())//若列表为空,则
nextPosition = null;//当前位置置空
else//否则
nextPosition = list.first();//从第一个位置开始
}
//检查迭代器中是否还有剩余的位置
public boolean hasNext() { return (nextPosition != null); }
//返回迭代器中的下一位置
public Object getNext() throws ExceptionNoSuchElement {
if (!hasNext()) throw new ExceptionNoSuchElement("意外:没有下一位置");
Position currentPosition = nextPosition;
if (currentPosition == list.last())//若已到达尾位置,则
nextPosition = null;//不再有下一个位置
else//否则
nextPosition = list.getNext(currentPosition);//转向下一位置
return currentPosition;
}
}
/**
* 基于列表实现的树迭代器
*/
package dsa;
public class IteratorTree implements Iterator {
private List list;//列表
private Position nextPosition;//当前(下一个)元素的位置
//默认构造方法
public IteratorTree() { list = null; }
//前序遍历
public void elementsPreorderIterator(TreeLinkedList T) {
if (null == T) return;//递归基
list.insertLast(T);//首先输出当前节点
TreeLinkedList subtree = T.getFirstChild();//从当前节点的长子开始
while (null != subtree) {//依次对当前节点的各个孩子
this.elementsPreorderIterator(subtree);//做前序遍历
subtree = subtree.getNextSibling();
}
}
//后序遍历
public void elementsPostorderIterator(TreeLinkedList T) {
if (null == T) return;//递归基
TreeLinkedList subtree = T.getFirstChild();//从当前节点的长子开始
while (null != subtree) {//依次对当前节点的各个孩子
this.elementsPostorderIterator(subtree);//做后序遍历
subtree = subtree.getNextSibling();
}
list.insertLast(T);//当所有后代都访问过后,最后才访问当前节点
}
//层次遍历
public void levelTraversalIterator(TreeLinkedList T) {
if (null == T) return;
Queue_List Q = new Queue_List();//空队
Q.enqueue(T);//根节点入队
while (!Q.isEmpty()) {//在队列重新变空之前
TreeLinkedList tree = (TreeLinkedList) (Q.dequeue());//取出队列首节点
list.insertLast(tree);//将新出队的节点接入迭代器中
TreeLinkedList subtree = tree.getFirstChild();//从tree的第一个孩子起
while (null != subtree) {//依次找出所有孩子,并
Q.enqueue(subtree);//将其加至队列中
subtree = subtree.getNextSibling();
}
}
}
//检查迭代器中是否还有剩余的元素
public boolean hasNext() { return (null != nextPosition); }
//返回迭代器中的下一元素
public Object getNext() throws ExceptionNoSuchElement {
if (!hasNext()) throw new ExceptionNoSuchElement("No next position");
Position currentPosition = nextPosition;
if (currentPosition == list.last())//若已到达尾元素,则
nextPosition = null;//不再有下一元素
else//否则
nextPosition = list.getNext(currentPosition);//转向下一元素
return currentPosition.getElem();
}
}
- Java基于列表实现的元素迭代器、位置迭代器、树迭代器(算法源码)
- Java基于双向链表实现列表结构(算法源码)
- python实现移除列表指定位置的元素
- Java基于可扩充数组的向量实现(算法源码)
- python实现给定一个列表,输出由各个位置除了自身元素外所有元素乘积组成的列表
- 散列表的java源码实现
- java基础编程,用户自定义替换list列表部分位置元素(基于collections工具类扩展)
- java 列表实现迭代器
- 求回型存储的二维数组中任意位置的(java long范围内)元素值的数学算法分析及java实现
- 小算法----寻找插入元素的位置
- 【JAVA实现】基于决策树的ID3算法
- 基于Java实现的二分查找算法
- 求任意多个不重复元素的排列(基于Java实现)
- 最短路径算法,VC6源码,基于STL的实现
- 基于OpenCV的三种光流算法实现源码及测试结果
- 基于数组的列表实现
- java实现的LZW 压缩算法源码
- hash算法 (hashmap 实现原理) Java实现的散列表
- HR模块查找信息类型资格(0024)表中的内容
- Java基于双向链表实现列表结构(算法源码)
- zinemaker基础—如何去掉封底的logo和启动画面)
- Android简介
- 封装三:面向原子(0BUG的保障)
- Java基于列表实现的元素迭代器、位置迭代器、树迭代器(算法源码)
- 与 Google 畅谈 Chrome 操作系统, HTML 5 以及 Web 的未来(下)
- 快速傅里叶变换(FFT)代码资源
- 离去的第十三天
- Android开发中用到的命令—整理贴
- Windows 7 暗藏的管理功能--上帝模式(GodMode)
- 在linux下安装配置svn独立服务器
- Java Web开发学习笔记之二
- 邢台企业资本运作战略研讨会