(数据结构与算法分析 二)------单链表的实现,使用链表迭代器
2012-01-11 10:48
323 查看
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); } }
相关文章推荐
- 链表系列之单链表——使用单链表实现大整数相加
- 使用迭代器(Iterator)来实现链表的相关操作
- 链表系列之单链表——使用单链表实现大整数相加
- 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数将其返回。 ⑤ 建立两个
- (2)单链表的操作 ① 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数
- Python 使用单链表实现队列 (基于class, 包含迭代器)
- Python 使用由单链表构建的数组实现有边际优先队列 (基于class, 包含迭代器)
- 浅谈STL list<T>链表容器和迭代器的使用C++实现
- Python 使用单链表实现堆栈 (基于class, 包含迭代器)
- 单链表和双链表 算法与实现
- 树用链表实现(链表使用二重指针减少判断以及空间复杂度)
- python使用迭代器实现关键字检索
- java实现双向循环链表和单链表
- Python 使用循环数组实现队列 (基于class, 包含迭代器)
- 单链表的实现(包括就地逆转单链表,表排序, 合并单链表、判断表是否有环)
- 【算法设计-单链表的逆转】单链表逆转实现
- [置顶] C++全排列:一种新的全排列方法(使用单向链表实现)
- 面试题三:使用 java 实现单向链表的倒置
- 使用STL中的list容器实现单链表的操作
- 某一天的思考题(使用Java实现链表)的参考答案