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

     

    template <class type>
    class link
    {
     private:
      static link<type>* freelist;
     public:
      type element;
      link* next;
      link* prev;
      link(const type& a, link* pre = NULL, link* ne = NULL)
      {
       element = a;
       next = ne;
       prev = pre;
      }
      link(link* pre = NULL, link* ne = NULL)
      {
       next = ne;
       prev = pre;
      }
      void* operator new(size_t);
      void operator delete(void* ptr);
      
    }

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

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

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

    template <class type>
    class list:public link
    {
    private:
     link<type>* head;
     link<type>* tail;
     link<type>* fence;
     int leftcnt;
     int rightcnt;
     void init()
     {
      fence = head = tail = NULL;
      rightcnt = 0;
      leftcnt = 0;
     }
     void removeall(0
     {
      while (head != NULL)
      {
       fence = head;
       head = head->next;
       delete fence;
      }
     }
    public:
     bool insert(const type&);
     bool append(const type&);
     bool remove(type&);
     void prev(void);
    }

    template <class type>
    bool list<type>::insert(const type& item)
    {
     fence->next = new link<type>(item, fence, fence->next);
     if (fence->next->next != NULL)
      fence->next->next->prev = fence->next;
     if (tail = fence)
      tail = fence->next;
     rightcnt++;
     return true;
    }

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

    template <class type>
    bool list<type>::remove(type& item)
    {
     if (fence->next == NULL)
      return false;
     item = fence->next->element;
     link<type>* tmp = fence->next;
     if (tmp->next != NULL)
      tmp->next->prev= fence;
     else
      tail = fence;
     fence->next = tmp->next;
     delete tmp;
     right--;
     return true;
    }

    template <class type>
    void list<type>::prev()
    {
     fence = fence->prev;
     rightcnt++;
     leftcnt--;
    }

  • 相关阅读:
    juc之ConcurrentHashMap在我工作中的实践
    设计模式在我工作中的实践
    SpringBoot突报java.lang.NoSuchFieldError分析
    JQuery.UI类库AutoComplete 调用WebService进行模糊查询
    DevExpress控件库----LookUpEdit控件 和 GridLookUpEdit控件使用
    DevExpress控件库----FlyoutPanel提示控件
    Android学习笔记---Log与Activity生命周期
    DevExpress控件库---MarqueeProgressBarControl控件和ProgressBarControl控件
    DevExpress控件库---TokenEdit控件使用
    DevExpress控件库----SearchLookUpEdit控件
  • 原文地址:https://www.cnblogs.com/seebro/p/2476553.html
Copyright © 2011-2022 走看看