[Data Structure]04.双链表和可利用空间表

本文介绍了可利用空间表(freelist)作为一种栈结构,用于优化内存分配。通过重载new和delete操作符,freelist在链表类中管理空闲指针,提高内存利用率。双链表的实现中,详细阐述了插入、删除操作,并通过图示辅助理解。在main函数中展示了应用实例,强调了变量声明的重要性。
摘要由CSDN通过智能技术生成

可利用空间表(freelist)其实是一种栈stack的结构。它的原理就是重载链表类的new和delete运算符,使得分配空间变得更为智能。具体过程如下:
freelist是结点node类的static成员(说明它是共享于所有链表的)其中全都是空的指针以栈的形式存放,当构造对象的时候,调用重载的new运算符,即使用freelist中的闲余指针。而当删除对象时,调用delete运算符,然而该对象所对应的的指针并不会被真正删除,而是放到freelist中以便下次使用。

这一次我会把可用空间表写到成员函数中,再在双链表的实现中调用。

注意:由于我们写的是链表类,不知道实际返回指针的类型,所以new和delete重载的返回类型都应该写void。

首先是node类实现的代码段:

template <typename E> class node{
   
private:
    static node<E>*freelist; //reference to fresslist head

public:
    E element;
    node *prev;
    node *next; //dl list's attribute--two pointers
    
    //constructor:
    node (const E&it, node* prevp, node* nextp){
   
        element = it;
        prev = prevp;
        next = nextp;
    }
    node (node* prevp = NULL, node* nextp = NULL){
   
        prev = prevp;   next = nextp;
    }
    //destructor:
    ~node(){
   }
    void *operator new(size_t){
   
        if(freelist==NULL) return ::new node;//here ::new means the original new method
        node<E> *temp =
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值