双向链表的实现,定义, 并实现freelist管理内存

本文介绍了如何实现双向链表,包括定义结点类Link,包含前后结点prev和next,以及使用freelist进行内存管理。通过重载new和delete操作符实现内存池。此外,还展示了双向链表类LinkList,它提供了初始化、插入、删除、移动和查询等基本操作。
摘要由CSDN通过智能技术生成

首先建立双向链表的结点类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;
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值