数据结构中的链表的特点是元素都是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;
}
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();
};
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();
};