Java模拟单向链表和双向链表的实现
2012-03-09 17:11
691 查看
下面演示的Java模拟的单向链表的实现
下面演示的是Java模拟双向链表的实现
package com.jadyer.sort; /** * 模拟单向链表 * @author 宏宇 * @editor Jan 23, 2012 7:55:21 PM * @see ================================================================================================== * @see 【数据结构的分类:线性数据结构和非线性数据结构】 * @see 1)线性数据结构,包含:线性表、栈、队列、串、数组、文件 * @see 2)非线性数据结构,含:树、图 * @see ================================================================================================== * @see 【线性表的概述:其数据元素呈线性关系】 * @see 1)线性表中的所有数据元素在同一个线性表中必须是相同的数据类型 * @see 2)线性表中必存在唯一的称为"第一个"的数据元素,必存在唯一的称为"最后一个"的数据元素 * @see 3)线性表中除第一个元素外,每个元素都有且只有一个前驱元素。除最后一个元素外,每个元素都有且只有一个后继元素 * @see 4)线性表的逻辑结构是n个数据元素的有限序列(a1,a2,a3,...,an),其中n为线性表的长度(n>=0),n=0的表称为空表 * @see ================================================================================================== * @see 【线性表的分类:按其存储结构可分为顺序表和链表】 * @see 1)顺序表:用顺序存储结构存储的线性表称为顺序表。即内存地址中的元素是按照循序连续存放的 * @see 也可以说,将线性表中的数据元素依次存放在某个存储区域中,所形成的表称为顺序表 * @see 一维数组就是用顺序方式存储的线性表,所以ArrayList可以看作是一种顺序表 * @see 2)链表:用链式存储结构存储的线性表称为链表。即内存地址中的元素不是连续存放的 * @see ================================================================================================== * @see 【stack】 * @see 栈(stack)也是一种特殊的线性表,是限定仅在表尾进行插入和删除运算的线性表 * @see 栈的物理存储可以用顺序存储结构,也可以用链式存储结构 * @see 栈是一种后进先出(LIFO)的结构,栈的表尾称为栈顶(top),栈的表头称为栈底(bottom) * @see ================================================================================================== * @see 【Queue】 * @see 队列(Queue)是限定所有的插入只能在表的一端进行,而所有的删除都在表的另一端进行的线性表 * @see 队列的物理存储可以用顺序存储结构,也可以用链式存储结构 * @see 队列是一种先进先出(FIFO)的结构,其中允许插入的一端称为队尾(Rear),允许删除的一端称为队头(Front)(有点像等公交车) * @see ================================================================================================== */ class NodeOneWay { String data; //存放节点数据本身 NodeOneWay next; //存放指向后一个节点的引用 public NodeOneWay(){} public NodeOneWay(String data){ this.data = data; } } /** * 单向链表测试类 * @author 宏宇 * @editor Jan 23, 2012 7:56:51 PM */ public class NodeOneWayTest { public static void main(String[] args) { NodeOneWay node11 = new NodeOneWay("node11_data"); NodeOneWay node22 = new NodeOneWay("node22_data"); NodeOneWay node33 = new NodeOneWay("node33_data"); node11.next = node22; //生成后继关系 node22.next = node33; System.out.println(node11.next.next.data); //通过node11获得node33的data属性值 /** * 生成node44对象,并将其插入到node11和node22中间 */ NodeOneWay node44 = new NodeOneWay("node44_data"); node11.next = node44; //修改node11的后继关系指向node44 node44.next = node22; //修改node44的后继关系指向node22 System.out.println(node11.next.next.next.data); //通过node11获得node33的data属性值 System.out.println(node11.next.next.data); //通过node11获得node22的data属性值 /** * 删除node44对象 */ node11.next = node22; //即node11的后继关系指向node22,node44的后继关系不再指向node22 node44.next = null; System.out.println(node11.next.next.data); //通过node11获得node33的data属性值 } }
下面演示的是Java模拟双向链表的实现
package com.jadyer.sort; /** * 模拟双向循环链表 * @author 宏宇 * @editor Jan 23, 2012 8:16:34 PM * @see java.util.ArrayList类的底层,是用数组实现的 * @see java.util.LinkedList类的底层,就是用双向循环链表实现的 * @see 双向链表内的每个对象除了数据本身外,还有两个引用,分别指向前一个元素和后一个元素 * @see 故add/remove操作时,LinkedList性能好一些,而get操作时,ArrayList性能好一些 */ class NodeTwoWay { NodeTwoWay previous; //存放指向前一个节点的引用 String data; //存放节点数据本身 NodeTwoWay next; //存放指向后一个节点的引用 public NodeTwoWay(){} public NodeTwoWay(String data){ this.data = data; } } /** * 双向循环链表测试类 * @author 宏宇 * @editor Jan 23, 2012 8:21:33 PM */ public class NodeTwoWayTest { public static void main(String[] args) { NodeTwoWay node11 = new NodeTwoWay("node11_data"); NodeTwoWay node22 = new NodeTwoWay("node22_data"); NodeTwoWay node33 = new NodeTwoWay("node33_data"); node11.previous = node33; //生成前驱和后继关系 node11.next = node22; node22.previous = node11; node22.next = node33; node33.previous = node22; node33.next = node11; /** * 生成node44对象,并将其插入到node11和node22中间 */ NodeTwoWay node44 = new NodeTwoWay("node44_data"); node44.previous = node11; node44.next = node22; node11.next = node44; node22.previous = node44; /** * 删除node44对象 */ node44.previous = null; node44.next = null; node11.next = node22; node22.previous = node11; } }
相关文章推荐
- Java 之 模拟单向链表和双向链表的实现
- Java模拟单向链表和双向链表的实现
- Java模拟单向链表和双向链表的实现
- Java模拟单向链表和双向链表的实现
- Java模拟单向链表和双向链表的实现
- Java模拟单向链表和双向链表的实现
- Java实现单向链表和双向链表
- Java实现链表(单向和双向)
- Java实现单向双向链表原理分析
- JAVA单向/双向链表的实现
- [Java]单向链表实现
- 数据结构Java实现03----单向链表的插入和删除
- JAVA实现双向链表
- 单向单链表的java实现
- Java实现双向链表
- Java实现单向链表的基本功能详解
- 剑指offer--面试题27:二叉搜索树与双向链表--Java实现
- java实现双向链表
- 用Java实现单向链表
- java 实现的单向链表