Java实现链表能够很好的封装对指针的实现,让用户使用的时候不会感受到指针的繁琐,但是可能会带来效率的降低。
这个链表是一个单链表的实现,使用了链表迭代器,刚开始看的时候感觉有些很不舒服,但是使用起来明显能感受功能带来的效果,因为你可以脱离链表而独自操作,可以同时对链表进行前后的遍历。提高时间效率,但是同样也得操作带来了麻烦。我觉的还是直接使用链表比较好,但是作为一种思想,还是值得学习学习,说不定是因为现在水平太低呢,呵呵,留着备用吧,下面上代码
第一个是链表的节点实现
package com.bird.three;
/**
* @category 该类为链表的节点类,存储指针和数据
* @author Bird
*
*/
public class ListNode {//具有包友好访问权限
Object element;
ListNode next;
ListNode(Object theElement){
this(theElement,null);
}
ListNode(Object theElement, ListNode n){
element = theElement;
next = n;
}
}
第二个是枚举器,实现对提供表元素的访问
package com.bird.three;
/**
* @category 枚举器类,提供读取表元素的方法
* @author Bird
*
*/
public class LinkedListItr {
ListNode current;//记录当前节点位置,具有包访问权限
public LinkedListItr(ListNode theNode){
current = theNode;
}
public boolean isPastEnd(){
return current == null;
}
public Object retrieve(){//返回存储在当前位置上的元素
return isPastEnd() ? null : current.element;
}
public void advance(){//将当前位置推进到下一个节点位置
if(!isPastEnd())
current = current.next;
}
}
第三个链表的实现
package com.bird.three;
/**
* @category 链表的实现
* @author Bird
*
*/
public class LinkedList {
private static ListNode header;
public LinkedList(){
header = new ListNode(null);//头结点赋值为空
}
public boolean isEmpty(){
return header.next == null;
}
public void makeEmpty(){
header.next = null;
}
public LinkedListItr zeroth(){//返回对应于头结点的枚举器
return new LinkedListItr(header);
}
public LinkedListItr first(){//返回第一个节点的枚举器
return new LinkedListItr(header.next);
}
public LinkedListItr find(Object x){//根据指定的元素找到相对应的节点,并且返回迭代器
ListNode itr = header.next;
while(itr != null && !itr.element.equals(x))
itr = itr.next;
return new LinkedListItr(itr);
}
public LinkedListItr findPrevious(Object x){//注意,这个返回的是X的前驱节点
ListNode itr = header;
while(itr.next != null && !itr.next.element.equals(x))
itr = itr.next;
return new LinkedListItr(itr);
}
public void remove(Object x){
LinkedListItr p = findPrevious(x);
if(p.current.next != null)
p.current.next = p.current.next.next;
}
public void insert(Object x, LinkedListItr p){
if(p!=null && p.current != null)
p.current.next = new ListNode(x,p.current.next);
}
public void printList(LinkedList theList){
if(theList.isEmpty())
System.out.println("Empty List");
else{
LinkedListItr itr = theList.first();
for(; !itr.isPastEnd(); itr.advance())
System.out.println(itr.retrieve()+" ");
}
System.out.println();
}
public static void main(String[] args){
LinkedList list = new LinkedList();
System.out.println(header);
System.out.println(header.next);
list.printList(list);
}
}
分享到:
相关推荐
算法-数据结构和算法-6-链表和单链表的实现过程.rar
数据结构与算法----线性表及Java实现顺序表、链表、栈、队列 定义线性表节点的结构.pdf
本书是国外数据结构与算法分析方面的标准教材,介绍了数据结构(大量数据的组织方法)以及算法分析(算法运行时间的估算)。本书的编写目标是同时讲授好的程序设计和算法分析技巧,使读者可以开发出具有最高效率的...
算法-数据结构和算法-8-双向链表.rar
双向链表 - 数据结构与算法 C 双向链表 - 数据结构与算法 C 。。。。。。
数据结构与算法--链表 很好的哦 欢迎下载
上机实验报告 课程名称: 数据结构A 实验题目: 实验一 单链表操作 专业班级: 学 号: 姓 名: 完成日期: 2017年10月11日 成 绩: 1. 实验内容、目的和要求 1. 实验内容 单链表的创建、合并和输出。 【扩展内容】...
这份资料里面讲解的很清楚详细,易懂,对正在学习编程的同学特别是对正在找工作的同学非常有帮助。
01-001数据结构的概念和基本术语、抽象数据类型的表示与实现 01-002算法设计的要求、算法效率的度量 02-001线性表的类型定义 02-002线性表的顺序表示与实现、线性表的基本操作 02-003单链表的创建与操作、加工型...
严蔚敏-数据结构--链表实现c++实现 还不错哦!``
《数据结构与算法》-李春葆 实验报告-基于二叉链存储的树形结构算法实践---二叉链表
链表 链表_使用PHP实现的单链表数据结构
数据结构-----单链表的操作------带头节点
算法大全-面试题-链表-栈-二叉树-数据结构.docx 一、单链表 目录 1.单链表反转 2.找出单链表的倒数第4个元素 3.找出单链表的中间元素 4.删除无头单链表的一个节点 5.两个不交叉的有序链表的合并 6.有个二级...
数据结构与算法(Python) 一、引入概念 1-01算法引入 1-02 时间复杂度与大O表示法 1-03-最坏时间复杂度与计算规则 1-04-常见时间复杂度与大小关系 1-05-代码执行时间测量模块 1-06-Python列表类型不同操作的...
数据结构---线性表之单链表,包括单链表的创建、插入、删除等,C语言编写
书名:数据结构Java版 图书编号:2086963 出版社:清华大学 定价:118.0 ISBN:730213544 作者:(美)福特(Ford,W.H.),(美)托普(Topp,W.R.) 著,梁志敏 译 出版日期:2006-11-11 版次: 开本: 简介: 本书...