java实现双连表

来源:互联网 发布:淘宝旺旺名是什么意思 编辑:程序博客网 时间:2024/06/05 01:18

</pre> 本人android工程师一枚,工作闲暇之余,巩固一下java基础,写写双连表玩儿玩儿;<p></p><p><span style="white-space:pre"></span>先说一下思想:</p><p><span style="white-space:pre"></span>1.双连表,故名思意,因此pre属性和next属性就成为了必要属性;</p><p><span style="white-space:pre"></span>2.可从头或者从尾部添加数据,此处贴出从尾部添加版本;</p><p><span style="white-space:pre"></span>3.提供CRUD方法;</p><p><span style="white-space:pre"></span></p><p><span style="white-space:pre"></span>首先,一个双连表的话,java实现可以在内部维护一个节点类:</p><p></p><pre name="code" class="java"><span></span>/** * 节点类 *  * @author Luoxiang * */private static class Node {// 上一个Node pre;// 数据Object data;// 下一个Node next;}
其次,在当前类中需要维护两个节点,一个头结点head,一个尾节点rear;

<span style="white-space:pre"></span>/** * 头结点 */private Node head;/** * 尾节点 */private Node rear;

提供增删改差方法:

<span style="white-space:pre"></span>/** * 添加数据的方法 *  * @param data *            数据 */public void add(Object data) {Node node = new Node();node.data = data;/** * 如果头结点等于null 说明还没有数据 头结点和尾节点都是当前节点 */if (head == null) {head = node;rear = node;} else {/** * 默认从尾部添加 */rear.next = node;node.pre = rear;rear = node;}}

<span style="white-space:pre"></span>/** * 删除方法 * @param data 需要删除的数据 * @return 返回true删除成功 */public boolean delete(Object data) {Node temp = find(data);//当节点等于空的时候,直接返回if (temp == null) {return false;}if (temp == head && temp == rear) {//当节点既是头结点也是尾节点的时候,直接置空头结点和尾节点head = null;rear = null;}else if (temp == head) {//当节点只是头节点的时候,头结点向后移动一位head = head.next;}else if (temp == rear) {//当节点只是尾节点的时候,尾节点前移一位,尾节点的上一个节点的next属性置空rear.pre.next = null;rear = rear.pre;}else {/** * 其余情况说明当前的节点是中间的节点 * 当前节点的上一个节点的next属性指向当前节点的下一个节点 * 当前节点的下一个节点的pre属性指向当前节点的上一个节点 * 删掉当前节点 */temp.pre.next = temp.next;temp.next.pre = temp.pre;temp = null;}return true;}

<span style="white-space:pre"></span>/** * 改数据,默认从头结点开始遍历,更改第一个 * @param oldData 老数据 * @param newData 新数据 * @return true更改成功 */public boolean update(Object oldData , Object newData) {Node temp = find(oldData);boolean result = false;if (temp != null) {temp.data = newData;result = true;}return result;}


<span style="white-space:pre"></span>/** * 查询方法 是否包含这个数据 *  * @param data *            需要查询的数据 * @return true 包含数据 */public boolean contains(Object data) {return find(data) != null;}


最后,加入测试代码测试:

<span style="white-space:pre"></span>public static void main(String[] args) {DoubleLink doubleLink = new DoubleLink();doubleLink.add("abc");doubleLink.add("dfadfad");doubleLink.add(1234);doubleLink.add("这个是什么");doubleLink.add(2.2222);System.out.println(doubleLink);System.out.println(doubleLink.contains(1234));System.out.println(doubleLink);System.out.println(doubleLink.update(1234 , 123));System.out.println(doubleLink);System.out.println(doubleLink.delete(123));System.out.println(doubleLink);}
输出结果:


此处,没有提供泛型限制和实现增强for循环版本的,如果需要泛型和增强for循环版本的(有处理模拟栈结构的方法),请自行下载:http://download.csdn.net/download/ynztlxdeai/9601447

欢迎交流!


1 0
原创粉丝点击