• 20120918LIST类定义《数据结构与算法分析》


    LIST类结构

      1 template <typename Object>
      2 class List
      3 {
      4     private:
      5         struct Node//所有都是公有的
      6         {
      7             Object data;
      8             Node *prev;
      9             Node *next;
     10 
     11             Node(const Object & d = Object(),Node *p = NUll,Node *n = Null):
     12             data(d) , prev(p) , next(n)
     13             {
     14             }
     15         };
     16     public:
     17         class const_iterator
     18         {
     19                 public:
     20                     const_iterator() : current(NULL){}
     21                     const Object & operator* () const
     22                     {
     23                         return retrieve();
     24                     }
     25                     const_iterator & operator++ ( ) const
     26                     {
     27                         current = current->next;
     28                         return *this;
     29                     }
     30                     const_iterator & operator++( int )
     31                     {
     32                         const_iterator old = *this;
     33                         ++(*this);
     34                         return old;
     35                     }
     36                     bool operator == (const const_iterator * rhs) const
     37                     {
     38                         return current == rhs.current;
     39                     }
     40                     bool operator != (const const_iterator & rhs) const
     41                     {
     42                         return !(*this == rhs);
     43                     }
     44 
     45             protected:
     46                 Node *current;
     47 
     48                 Object & retrieve() cosnt
     49                 {
     50                     return current->data;
     51                 }
     52                 const_iterator(Node *p) : current(p)
     53                 {
     54                 }
     55                 friend class List<Object>;
     56         };
     57         class iterator : public const_iterator
     58         {
     59             public:
     60                 iterator()
     61                 {
     62                 }
     63                 Object & operator* ()
     64                 {
     65                     return retrieve();
     66                 }
     67                 const Object & operator* () const
     68                 {
     69                     return const_iterator::operator*();
     70                 }
     71                 iterator & operator++()
     72                 {
     73                     iterator old = *this;
     74                     ++(*this);
     75                     return old;
     76                 }
     77 
     78             protected:
     79                 iterator(Node *p) : const_iterator(p)
     80                 {
     81                 }
     82 
     83                 friend class List<object>;
     84         };
     85     public:
     86         List()
     87         {
     88             init();
     89         }
     90         List(const List & rhs)
     91         {
     92             init();
     93             *this = rhs;
     94         }
     95         ~List()
     96         {
     97             clear();
     98             delete head;
     99             delete tail;
    100         }
    101         const List & operator =(const List & rhs)
    102         {
    103             if(this == &rhs)
    104                 return *this;
    105             clear();
    106             for(const_iterator itr = rhs.begin();itr!=rhs.end();++itr)
    107                 push_back(*itr);
    108             return *this;
    109         }
    110         void init()
    111         {
    112             theSize = 0;
    113             head = new Node;
    114             tail = new Node;
    115             head->next = tail;
    116             tail->prev = head;
    117         }
    118 
    119         iterator begin()
    120         {
    121             return iterator(head->next);
    122         }
    123         const_iterator begin() const
    124         {
    125             return const_iterator(head->next);
    126         }
    127         iterator end()
    128         {
    129             return iterator(tail);
    130         }
    131         const_iterator end() const
    132         {
    133             return const_iterator(tail);
    134         }
    135 
    136         int size() const
    137         {
    138             return theSize;
    139         }
    140         bool empty() const
    141         {
    142             return size() == 0;
    143         }
    144         void clear()
    145         {
    146             while(!empty())
    147                 pop_front();
    148         }
    149         Object & front()
    150         {
    151             return *begin();
    152         }
    153         const Object & front() const
    154         {
    155             return *begin();
    156         }
    157         Object & back()
    158         {
    159             return *--end();
    160         }
    161         const Object & back() const
    162         {
    163             return *--end();
    164         }
    165         void push_front(const Object & x)
    166         {
    167             insert(begin(),x);
    168         }
    169         void push_back(const Object & x)
    170         {
    171             insert(end(),x);
    172         }
    173         void pop_front()
    174         {
    175             erase(begin());
    176         }
    177         viod pop_back()
    178         {
    179             erase(end());
    180         }
    181 
    182         iterator insert(iterator itr,const Object & x)
    183         {
    184         }
    185         iteratro erase(iterator itr )
    186         {
    187         }
    188         iterator erase(iterator start,iterator end)
    189         {
    190         }
    191 
    192 private:
    193     int theSize;
    194     Node *head;
    195     Node *tail;
    196 
    197     void init()
    198     {
    199     }
    200 }
  • 相关阅读:
    AE数据加载
    30.概述strust2中的拦截器
    mybatis 需要注意的点 MyBatis 插入空值时,需要指定JdbcType (201
    29.OGNL与ValueStack(VS)-总结OGNL[重点]
    28.OGNL与ValueStack(VS)-总结$ # %的区别
    27.OGNL与ValueStack(VS)-获取Stack Context中的信息
    26.OGNL与ValueStack(VS)-N语法top语法
    25.OGNL与ValueStack(VS)-集合对象进阶
    24.OGNL与ValueStack(VS)-集合对象初步
    23.OGNL与ValueStack(VS)-调用普通类的构造方法
  • 原文地址:https://www.cnblogs.com/xing901022/p/2691405.html
Copyright © 2020-2023  润新知