STL之顺序容器适配器(队列的循环数组实现)

队列的循环数组实现······如果按照Vector,或者List的基础上去做就不用担心队列会满····这是按照教材、《数据结构与算法分析》、《算法导论》的用数组实现的思想····比较简单······所以····所以就没有解释······

  1 #include<iostream>
  2 using namespace std;
  3 
  4 template<typename Object>
  5 class Queue
  6 {
  7 public:
  8     enum { Capacity = 10, Pos = 0 };
  9     Queue( )
 10     {
 11         init( );
 12     }
 13     ~Queue( )
 14     {
 15         delete [ ] data;
 16     }
 17 
 18     int size( )
 19     {
 20         return theSize;
 21     }
 22 
 23     bool empty( )
 24     {
 25         return  size( ) == 0;
 26     }
 27 
 28     void push( const Object & x )
 29     {
 30         if( size() == 0)
 31         {
 32             theFront++;
 33             data[ ++theBack ] = x;
 34             ++theSize;
 35         }
 36         else
 37         {
 38             ++theBack;
 39             if( theBack  == theCapacity )
 40             {
 41                 theBack %= ( theCapacity - 1 );
 42             }
 43             data[ theBack ] = x;
 44             ++theSize;
 45 
 46             if( size() == theCapacity )
 47             {
 48                 cout << "队列已经满了!" << endl;
 49             }
 50         }
 51     }
 52 
 53     void pop( )
 54     {
 55         theFront++;
 56         if( theFront == theCapacity )
 57         {
 58             theFront %= ( theCapacity - 1 );
 59         }
 60         --theSize;
 61     }
 62 
 63     Object front( )
 64     {
 65         return data[ theFront ];
 66     }
 67 
 68     Object back( )
 69     {
 70         return  data[ theBack ];
 71     }
 72 
 73 private:
 74     Object * data;
 75     int theSize;
 76     int theCapacity;
 77     int theFront;
 78     int theBack;
 79 
 80     void init( )
 81     {
 82         theSize = 0;
 83         theCapacity = Capacity;
 84         theFront = theBack = Pos - 1;
 85         data = new Object[ theCapacity ];
 86     }
 87 };
 88 
 89 int main( )
 90 {
 91     Queue<int> q1;
 92     cout << q1.size() << endl;
 93     bool flag = true;
 94     char c;
 95     int m;
 96     while( flag )
 97     {
 98         cout << "输入一个数字,这个数字将会进入队列!" << endl;
 99         cin >> m;
100         q1.push( m );
101         cout << "是否继续输入?如果是,请输入Y,否则输入N。" << endl;
102         cin >> c;
103         if( c == 'Y' )
104             flag = true;
105         else
106             flag = false;
107     }
108     cout << "输出队首!" << endl;
109     cout << q1.front() << endl;
110     cout << "输出队尾!" << endl;
111     cout << q1.back() << endl;
112     cout << "输出队列的数目!" << endl;
113     cout << q1.size() << endl;
114     q1.pop( );
115     cout << "经过pop函数的处理后!" << endl;
116     cout << "输出队首!" << endl;
117     cout << q1.front() << endl;
118     cout << "输出队尾!" << endl;
119     cout << q1.back() << endl;
120     cout << "输出队列的数目!" << endl;
121     cout << q1.size() << endl;
122     return 0;
123 }
posted @ 2012-09-26 14:59  alan_forever  阅读(1949)  评论(0编辑  收藏  举报