線性表——鏈式描述(雙向鏈表)

雙鏈表的迭代器類:node

template<class T>
class iterator
{
public:
    //向前迭代
    typedef forward_iterator_tag iterator_category;
    typedef T value_type;
    typedef ptrdiff_t difference_type;
    typedef T* pointer;
    typedef T& reference;

    //構造函數
    iterator(chainNode<T> * theNode = NULL)
    {
        node = theNode;
    }
    //解引用操做符
    T& operator*() const
    {
        return node->element;
    }
    T* operator->() const
    {
        return &node->element;
    }

    //迭代器加法操做
    iterator& operator++()//前加
    {
        node = node->next;
        return *this;
    }
    iterator operator++(int)//後加
    {
        iterator old = *this;
        node = node->next;
        return old;
    }

    //相等檢驗
    bool operator != (const iterator right) const
    {
        return node != right.node;
    }
    bool operator == (const iterator right) const
    {
        return node == right.node;
    }
    protected:
    chainNode<T>* node;

};

iterator begin()
{
    return iterator(firstNode);
}

iterator end()
{
    return irerator(NULL);
}

使用迭代器訪問鏈表元素和get()方法訪問元素,時間效率有很大的差異:
get()函數:O(listSize²)
迭代器:O(listSize)函數

相關文章
相關標籤/搜索