利用C++实现双向链表的基本操作
本文采用利用C++实现了对双向链表的基本操作。操作包括:双向链表的构建、链表指定位置的插入、链表指定位置的删除、链表长度的获取、链表指定位置元素的获得及指定元素位置的获得、整体链表的删除。
双向链表是链表的另一种形式,它的结点特点是每个结点包括两个指针域和一个数据域,两个指针域Prior和Next分别指向该结点的前驱和后继元素。双向结点的结构如下图所示。
双向链表除了头结点没有前驱和尾结点没有后继外,其他结点都有前驱结点和后驱结点,其结构下图所示。
从图中的结构可以清楚的看到,双向链表可以从任何一个结点到达链表的头结点和尾结点。双向链表与单链表的操作过程类似,都可已进行插入、删除、获取、以及清空等基本操作。利用C++实现的具体代码如下。
#include<iostream>
using namespace std;
template<typename datatype> class doubleLink; //双向链表声明
/***************************************双向链表数据结构定义*************************************************/
template<typename datatype>class doubleNode
{
public:
//无参数构造函数,将指针域初始化为NULL
doubleNode()
{
p_prior = NULL;
p_next = NULL;
}
//带参数的构造函数,初始化数据域与指针域
doubleNode(datatype item, doubleNode<datatype> * prior=NULL, doubleNode<datatype> * next=NULL)
{
data = item;
p_prior = prior;
p_next = next;
}
//析构函数
~doubleNode()
{
p_prior = NULL;
p_next = NULL;
}
private:
doubleNode<datatype> *p_prior; //指向前节点的指针
doubleNode<datatype> *p_next; //指向后节点的指针
datatype data; //自身节点的数据
int length; //链表长度
//定义友元类
friend class doubleLink<datatype>;
};
/***************************************双向链表定义*************************************************/
template<typename datatype>class doubleLink
{
public:
//双向链表的构造函数,链表产生新头结点
doubleLink()
{
head = new doubleNode<datatype>(); //链表产生新头结点
}
//双向链表的构造函数,链表产生新头结点
doubleLink(doubleNode<datatype>*note)
{
head = note;
}
//双向链表的析构函数,链表删除头节点