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
- java实现双连表
- 关于java双连表的实现
- 双连表冒泡排序
- 双连通性
- poj3177 边双连通分量+缩点(并查集实现)
- 【双连通】双连通模板 Tarjan
- hdu 4005(双连通)
- 双连通分量
- 双连通分量_road
- 边双连通分量
- 双连通分量
- 强连通&&双连通
- hoj2360Redundant Paths双连通
- hdu 4005 双连通
- 双连通分量-tarjan
- poj 3177 双连通
- poj 3352 双连通
- poj1523 SPF 双连通求割点
- 网络基础知识总结
- Features From Accelerated Segment Test
- IPC
- 秒杀多线程第二篇 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别
- ThreadLocal的使用
- java实现双连表
- CSS清除浮动
- tar、7z(7zip)压缩/解压缩指令的使用
- BZOJ1513: [POI2006]Tet-Tetris 3D
- 51nod-活动安排问题之二
- Java后端WebSocket的Tomcat实现
- Eclipse快捷键大全
- Java中断机制
- Android手机6.0系统查询本地视频音频数据库查不出来数据的办法