【Java数据结构】2.2双向链表的简单实现
2013-09-04 16:59
363 查看
按链表的组织形式分有ArrayList和LinkList两种。ArrayList内部其实是用数组的形式实现链表,比较适合链表大小确定或较少对链表进行增删操作的情况,同时对每个链表节点的访问时间都是constant;而LinkList内部以一个List实现链表,比较适合需要频繁对链表进行操作的情况,对链表节点的访问时间与链表长度有关O(N)。
另外,根据实现形式可以分为直接式(想不出什么合适的名字,姑且这样吧)和使用Iterator(迭代模式)两种方法。 直接式的实现方法和C/C++中的写法差不多; 而使用Iterator时,需要实现java.lan中的Iterable接口(或者也可以自己在链表内部定义自己的Iterator method)将在下章博客中介绍:直接式:
有什么问题,我们随时沟通!
本文出自 “CEO之路” 博客,请务必保留此出处http://zhaohaibo.blog.51cto.com/7808533/1288669
另外,根据实现形式可以分为直接式(想不出什么合适的名字,姑且这样吧)和使用Iterator(迭代模式)两种方法。 直接式的实现方法和C/C++中的写法差不多; 而使用Iterator时,需要实现java.lan中的Iterable接口(或者也可以自己在链表内部定义自己的Iterator method)将在下章博客中介绍:直接式:
package com.ds.link; public class DoubleLink <T>{ /** * Node<AnyType>类定义了双向链表中节点的结构,它是一个私有类, * 而其属性和构造函数都是公有的,这样,其父类可以直接访问其属性 * 而外部类根本不知道Node类的存在。 * @author ZHB * * @param <T> 类型 * @param Data 是节点中的数据 * @param pre 指向前一个Node节点 * @param next 指向后一个Node节点 */ private class Node<T>{ public Node<T> pre; public Node<T> next; public T data; public Node(T data,Node<T> pre,Node<T> next){ this.data = data; this.pre = pre; this.next = next; } public Node(){ this.data = null; this.pre = null; this.next = null; } } // 下面是DoubleLinkedList类的数据成员和方法 private int theSize; private Node<T> Header; private Node<T> Tail; /* * 构造函数 * 我们构造了一个带有头、尾节点的双向链表 * 头节点的Next指向尾节点 * 为节点的pre指向头节点 * 链表长度起始为0。 */ public DoubleLink(){ theSize = 0; Header = new Node<T>(null,null,null); Tail = new Node<T>(null,Header,null); Header.next = Tail; } public void add(T item){ Node<T> aNode = new Node<T>(item,null,null); Tail.pre.next = aNode; aNode.pre = Tail.pre; aNode.next = Tail; Tail.pre = aNode; theSize++; } public boolean isEmpty(){ return (this.theSize == 0); } public int size(){ return this.theSize; } public T getInt(int index){ if(index > this.theSize - 1 || index < 0) throw new IndexOutOfBoundsException(); Node<T> current = Header.next; for(int i = 0;i < index;i++){ current = current.next; } return current.data; } public void print(){ Node<T> current = Header.next; while(current.next != null){ System.out.println(current.data.toString()); current = current.next; } } public static void main(String[] args){ DoubleLink<String> dLink= new DoubleLink<String>(); dLink.add("zhb"); dLink.add("zzb"); dLink.add("zmy"); dLink.add("zzj"); System.out.println("size : " + dLink.size()); System.out.println("isEmpty? : " + dLink.isEmpty()); System.out.println("3 : " + dLink.getInt(2)); dLink.print(); } }运行结果:
size : 4 isEmpty? : false 3 : zmy zhb zzb zmy zzj
有什么问题,我们随时沟通!
本文出自 “CEO之路” 博客,请务必保留此出处http://zhaohaibo.blog.51cto.com/7808533/1288669
相关文章推荐
- Java实现简单数据结构之二叉树结构排序 binary tree
- 数据结构:线性表的链式存储(双向链表)--Java实现
- 数据结构(Java语言)——Stack简单实现
- 【数据结构+Java】Java实现简单队列、循环队列操作
- java数据结构-简单的模仿实现HashMap类的部分函数
- 数据结构(JAVA)---二叉树的简单实现及排序
- 【数据结构和算法】用java简单的实现单链表的基本操作
- 数据结构(Java语言)——LinkedList简单实现
- 数据结构: Java中ArrayList的简单实现
- Java实现简单的数据结构(三)
- Java数据结构之简单的链表的实现
- Java基础课程学习总结,使用LinkedList简单模拟队列数据结构和堆栈数据结构的实现
- 数据结构: Java中LinkedList的简单实现
- 【算法数据结构Java实现】递归的简单剖析及时间复杂度计算
- Java数据结构之简单的连接点(link)实现
- Java数据结构之简单的连接点(link)实现方法示例
- Java实现简单的贪吃蛇小游戏(使用线程、内部类、双向链表等)
- 数据结构笔记--栈的总结及java数组实现简单栈结构
- 【Java数据结构】2.3双向链表的迭代实现
- Java实现简单的数据结构(一)