双向链表的C++实现
双向链表与单向链表相比,各个结点多了一个指向前一个结点的指针。结构如图所示:
双向链表的结点定义如下:
#ifndef SIMPLENODE_HPP
#define SIMPLENODE_HPP
template<typename T> //再定义一个模板 写双链表
class DoubleNode
{
public:
T element;
DoubleNode* prev;
DoubleNode* next;
DoubleNode(const T& theElement,DoubleNode* thePrev=NULL,DoubleNode* theNext=NULL)
:element(theElement),prev(thePrev),next(theNext) {}
//这里已经创建了一个双链表
};
#endif
在组成一个双向链表后,还需要补充一些功能,以便后续实现,模仿之前的单向链表:
1.定义这个双向链表类的构造函数及析构函数
2.清空链表内所有元素
3.给出元素位置再返回对应结点
4.返回链表内部元素个数
5.判断这个链表是否为空
6.返回链表首尾的元素值
7.查找元素是否在此链表内,如果在则返回所在位置
8.从首端到尾端输出链表上的各元素,以及反序输出链表上各元素
9.对链表插入元素以及删除元素
给出这个双向链表类框架,就像这样:
#ifndef DOUBLELINKLIST_HPP
#define DOUBLELINKLIST_HPP
#include<iostream>
#include"simplenode.hpp"
template<typename T>
class DoubleLinkList
{
private:
DoubleNode<T>* head;
DoubleNode<T>* tail;
int size;
DoubleNode<T>* GetPointAt(in