zoukankan      html  css  js  c++  java
  • 单向链表实现

    通过重载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;
    }

  • 相关阅读:
    [转]cmd-bat批处理命令延时方法
    chrome pyv8下载
    win10锁屏壁纸路径
    MongoDB系列—— Window 搭建Mongodb 集群
    JS判断所有IE浏览器所有版本
    网页中引用优酷视频默认自动播放超清
    SQL 还原或备份失败数据库变成单个用户模式无法访问
    百度webuploader 上传演示例子
    SQL Server 如何更改SQL Server和windows身份方式验证
    已经阻止此发布者在你的计算机上运行软件
  • 原文地址:https://www.cnblogs.com/seebro/p/2476554.html
Copyright © 2011-2022 走看看