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;
    }

  • 相关阅读:
    hiho一下 第115周:网络流一•Ford-Fulkerson算法 (Edmond-Karp,Dinic,SAP)
    hiho一下 第二周&第四周:从Trie树到Trie图
    2016 acm香港网络赛 C题. Classrooms(贪心)
    2016 acm香港网络赛 F题. Crazy Driver(水题)
    2016 acm香港网络赛 B题. Boxes
    系统吞吐量(TPS)、用户并发量、性能测试概念和公式(转发)
    使Eclipse下支持编写HTML/JS/CSS/JSP页面的自动提示。
    Tomcat 系统架构与设计模式,第 2 部分: 设计模式分析
    Tomcat 系统架构与设计模式,第 1 部分: 工作原理
    Tomcat源码分析
  • 原文地址:https://www.cnblogs.com/seebro/p/2476554.html
Copyright © 2011-2022 走看看