数据结构中的链表的特点是元素都是FIFO(First In First Out),其中链表又分单向链表与双向链表。

单向链表中每个元素都有一个指向下一元素的指针,而双向链表在单向链表的基础上,增加了一个指向前一个元素的指针。

    这几天休假,我继续造轮子,重新实现了一下双向链表。

    首先是链表节点数据的定义,见如下代码:

template <class T>
class Node
{
public:
    Node
<T>* next;
    Node
<T>* prior;
    T data;

public:
    Node(){};
    
~Node(){};
    Node
<T>* GetNext();
    Node
<T>* GetPrior();
    
void GetData(T& data);
    
void ChangeData(T data);
};

template
<class T>
void Node<T>::GetData(T& _data)
{
    _data 
= data;
}

template
<class T>
Node
<T>* Node<T>::GetNext()
{
    
return next;
}

template
<class T>
Node
<T>* Node<T>::GetPrior()
{
    
return prior;
}

template
<class T>
void Node<T>::ChangeData(T _data)
{
    data 
= _data;
}

  Node结点类是一个模板类,具体最基本链表访问的方法。

  接下来,才是最重要链表类:

 

template <class T>
class DoubleLinkedList:public Node<T>
{
public:
    Node
<T>* start;
    Node
<T>* end;

public:
    DoubleLinkedList();
    
~DoubleLinkedList();
    
void ForwardList();
    
void BackwardList();
    
bool Remove(Node<T>* node);
    
void Add(T data);
    Node
<T>* Search(T data);
    Node
<T>* GetStart();
};

相关文章: