首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

迭代器兑现

2012-11-13 
迭代器实现链表由一系列结点组成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结

迭代器实现
      链表由一系列结点组成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,链表比较方便插入和删除操作。
     用链表实现迭代器:

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数据结构与算法 第二版

热点排行