双链表就是在单链表的每个结点中增加一个指向前驱的指针 。
- 结点结构
template <class T>
struct DNode{
T data;
DNode<T> *llink;
DNode<T> *rlink;
};
- 双向链表的实现
template <class T>
class DoubleLink {
private:
Node<T> *head;
public:
DoubleLink() ;
~DoubleLink();
void Append(T data);
void Display();
void Insert(int locate , T data);
T Get(int locate);
T Delete(int locate);
};
- 空表的构造
template <class T>
DoubleLink <T>::DoubleLink(){
head=new Node<T>;
head->rlink=NULL;
head->llink=NULL;
}
- 插入操作
q->rlink=p->rlink;
P->rlink=q;
q->llink=p;
if(q->rlink)
q->rlink->llink=q;
- 删除操作
p->llink->rlink=p->rlink;
p->rlink->llink=p->rlink;
delete(p);
- 遍历操作
template <class T>
void DoubleLink<T>::Display(){
Node <T> *p;
p=head->rlink;
while(p)
{
cout<<p->data<<" ";
p=p->rlink;
}
cout<<endl;
return;
}
- 析构函数
template <class T>
DoubleLink<T>::~DoubleLink(){
Node<T> *p,*q;
p=head;
while(p)
{
q=p->rlink;
delete p;
p=q;
}
}