链表由一系列结点组成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,链表比较方便插入和删除操作。
用链表实现迭代器:
class LinkIter
{
public int iData;
public LinkIter next;
public LinkIter(int data)
{
iData = data;
}
public void displayLink()
{
System.out.println(iData + " ");
}
}
class LinkListIter
{
public LinkIter first;
public LinkListIter()
{
first = null;
}
public boolean isEmpty()
{
return first == null;
}
public LinkIter getFirst()
{
return first;
}
public void setFirst(LinkIter first)
{
this.first = first;
}
public void displayList()
{
LinkIter current = first;
while (current != null)
{
current.displayLink();
current = current.next;
}
}
public ListIterator getIterator()
{
return new ListIterator(this);
}
}
class ListIterator
{
private LinkIter current;
private LinkIter previous;
private final LinkListIter ourList;
public ListIterator(LinkListIter lnk)
{
ourList = lnk;
reset();
}
public void reset()
{
current = ourList.getFirst();
previous = null;
}
public boolean atEnd()
{
return current.next == null;
}
public void nextLink()
{
previous = current;
current = current.next;
}
public LinkIter getLink()
{
return current;
}
//在当前结点后插入,先判断链表是否为空
public void insertAfter(int dd)
{
LinkIter newLink = new LinkIter(dd);
if(ourList.isEmpty())
{
ourList.setFirst(newLink);
current = newLink;
}
else
{
newLink.next = current.next;
current.next = newLink;
nextLink();
}
}
//在当前结点前插入,判断是否是首结点
public void insertBefore(int dd)
{
LinkIter newLink = new LinkIter(dd);
if(previous == null)
{
newLink.next = ourList.getFirst();
ourList.setFirst(newLink);
reset();
}
else
{
newLink.next = previous.next;
previous.next = newLink;
nextLink();
}
}
//删除当前结点,判断是否是首结点
public int deleteCurrent()
{
int data = current.iData;
if(previous == null)
{
ourList.setFirst(current.next);
reset();
}
else
{
previous.next = current.next;
if(atEnd())
reset();
else
current = current.next;
}
return data;
}
注:以上代码均出自 JAVA数据结构与算法 第二版
分享到:
相关推荐
模拟vector,Constructors, operators, assign, at, back, begin, clear, empty, end, erase, front, insert, pop_back, push_back, reserve, resize, size, swap,迭代器实现。
介绍博客:http://blog.csdn.net/chengonghao/article/details/51360792
本文实例讲述了php和C#的yield迭代器实现方法对比。...IEnumerable表示一个类可以迭代,也就是可以用foreach遍历,IEnumerator是真正的迭代器实现,IEnumerable和IEnumerator一个是使用迭代器的接口,一个是实现迭
本文实例讲述了PHP中迭代器的简单实现及Yii框架中的迭代器实现方法。分享给大家供大家参考,具体如下: 在维基百科中我们可以看到其定义如下: 迭代器有时又称光标(cursor)是程式设计的软件设计模式,可在容器物件...
用java编写的迭代器,实现10数字正反向遍历。
本代码用的是迭代器将算法对立与数据结构,运用了分层结构的思想。
设计模式之迭代器模式的java小程序实现!简单的代码!
CORBA实现的迭代器,分别用ior文件的方式,命名服务方式
* 基于列表实现的元素迭代器 */ package dsa; public class IteratorElement implements Iterator { private List list;//列表 private Position nextPosition;//当前(下一个)元素的位置 //默认构造方法 ...
某商品管理系统的商品名称存储在一个字符串数组中,现需要自定义一个双向迭代器实现对该商品名称数组的双向遍历.绘制类图并编程实现
原生Array.prototype迭代器实现,具有控制流功能。 相同的功能乐趣,相同的命令式控制流程。 行为由本机实现严格维护。 合理说明:其实我很久以前就考虑过这个问题,并且很惊讶外面已经没有任何东西(或者可能真...
实现节点和迭代器-代码,包含两部分代码实现节点与迭代器。
迭代器概述: 访问集合元素的一种方式。 是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。 迭代器只能往前不会后退。 1. 创建迭代器对象 实例:基于list列表...
主要介绍了Java中Set&List的迭代器实现步骤解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了Java迭代器实现Python中的range代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
该文件具有不同的迭代器实现 peek Iterators :这将具有 peek 方法来返回 peek 值。 IteratorOfIterators :这是迭代器列表迭代器的代码。 DeepIterators :这是迭代其中的集合和对象的集合。
迭代器模式demo
手动创建迭代器 实现迭代协议(__iter__方法) 反向迭代(reversed方法) 迭代器切片 数据管道实现