首先建立双向链表的结点类Link,以及前,后结点prev,next.包含成员freelist用来管理内存,重载了new,delete用来实现freelist。
再建立双向链表类LinkList,包含init()初始化结点位置。以及双向链表的一些基本操作函数:removeall(),remove(),
insert(),append(),moveToend(),movetoStart(),length(),clear(),next(),prev(),
#include<iostream>
#include<sstream>
#include <iomanip>
#include <string>
#include<cstddef>
using namespace std;
template <typename E> class Link //双链表结点
{
private:
static Link<E>* freelist;
public:
E element1;
E element2;
Link* next; //后结点
Link* prev;//前结点
//constructure function构造函数
Link(const E it1, const E it2, Link* prevp, Link* nextp)
{
element1 = it1; //值域
element2 = it2;
prev = prevp;
next = nextp;
}
Link(Link* prevp = nullptr, Link* nextp = nullptr)
{
prev = prevp;
next = nextp;
}
//重载new,delete实现freelist 为固定写法
//overloaded "new" operator,
void* operator new(size_t)
{
if (freelist == nullptr)
return ::new Link;
Link<E>* temp = freelist;
freelist = freelist->next;
return temp;