双链表实现

1.双链表结点的实现:

template <typename E> class Link {
private:
   static Link<E>* freelist;
public:
   E element;//value for this node
   Link* next;
   Link* prev;
   Link(const E& it,Link* prevp,Link* nextp){
      element=it;
      prev=prevp;
      next=nextp;
   }
   Link(Link* prevp=NULL,link* nextp=NULL){
   prev=prevp;
   next=nextp;
   }
   void* operator new(size_t){
      if(freelist==NULL) return ::new Link;//create space
      Link<E>* temp=freelist;
      freelist=freelist->next;
      return temp;
   }
   void operator delete(void* ptr){
      ((Link<E>*)ptr)->next=freelist;
      freelist=(Link<E>*)ptr;
   }
};

template <typename E>
Link<E>* Link<E>::freelist=NULL;

2.双链表的insert,append,remove,和prev操作的实现:

void insert(const &E it){
   curr->next=curr->next->prev=new Link<E>(it,curr,curr->next);
   cnt++;
}

void append(const E& it){
   tail->prev=tail->prev->next=new Link<E>(it,tail->prev,tail);
   cnt++;
}
E remove(){
   if(curr->next==tail) return NULL;
   E it=curr->next->element;
   Link<E>* ltemp=curr->next;
   curr->next->next->prev=curr;
   curr->next=curr->next->next;
   delete ltemp;
   cnt--;
   return it;
}
void prev(){
   if(curr!=head)
      curr=curr->prev;
}

双链表比单链表使用了更多的空间。它的结构性开销是单链表的两倍。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值