单向链表实现

 

通过重载new 和 delete 大大提高内存空间的分配速度。 

 

 

template <class type> class Link
{
 type elememt;
 Link* next;
 Link(const type& ele, Link* ne == NULL)
 {
  element = ele;
  next = ne;
 }
 Link(Link* ne = NULL)
 {
  next = ne;
 }
}

template <class type> class link_list: public Link<type>
{
 private:
  Link<type>* head;
  Link<type>* tail;
  Link<type>* fence;
  int leftcnt;
  int rightcnt;
  void init()
  {
   fence = tail = head = new Link<type>;
   rightcnt = leftcnt = 0;
  }
  void remove_all()
  {
   while (head != NULL)
   {
    Link<type>* tmp = NULL;
    tmp = head;
    head = head->next;
    delete tmp;
   }
  }
  
  static Link<type>* freelist;
  void* operator new(size_t);
  void operator delete(void*);
 
 public:
  link_list()
  {
   init();
  }
  ~link_list()
  {
   remove_all();
  }
  void clear()
  {
   remove_all();
   init();
  }
  bool insert(const type&);
  bool append(const type&);
  bool remove(type&);
  void setStart()
  {
   fence = head;
   rightcnt += leftcnt;
   leftcnt = 0;
  }
  void setEnd()
  {
   fence = tail;
   leftcnt += rightcnt;
   rightcnt = 0;
  }
  bool prev();
  void next();
  {
   if (fence != tail)
   {
    fence = fence->next;
    rightcnt--;
    leftcnt++;
   }
  }
  bool setPos(int pos);
}

template <class type>
bool link_list<type>::insert(const type& item)
{
 Link<type>* tmp = new Link<type>(item, fence->next);
 fence->next = tmp;
 if (tail == fence)
  tail = fence->next;
 right++;
 return true;
}

template <class type>
bool link_list<type>::append(const type& item)
{
 tail = tail->next = new Link<type>(item, NULL);
 right++;
 return true;
}

template <class type>
bool link_list<type>::remove(type& item)
{
 if (fence->next == NULL)
  return false;
 item = fence->next->element;
 Link<type>* tmp = fence->next;
 fence->next = tmp->next;
 if (tail = tmp)
  tail = fence;
 delete tmp;
 rightcnt__;
 return true;
}

template <class type>
bool link_list<type>::prev(void)
{
 Link<type>* tmp = head;
 if (fence == head)
  return false;
 while (tmp->next != fence)
  tmp = tmp->next;
 fence = tmp;
 rightcnt++;
 leftcnt--;
 return true;
}

template <class type>
bool link_list<type>::setPos(int pos)
{
 int i = 0;
 while (i != pos)
 {
  fence = fence->next;
  i++;
 }
 return true;
}

template <class type>
link_list<type>* link_list<type>::freelist = NULL;

template <class type>
void* link_list<type>::operator new(size_t)
{
 if (free_list == NULL)
  return new Link<type>;
 Link<type>* tmp = freelist;
 freelist = freelist->next;
 return tmp;
}

template <class type>
void link_list<type>::operator delete(void* ptr)
{
 ((Link<type>*)ptr)->next = freelist;
 freelist = (Link<type>*)ptr;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值