【C++模板题目】队列(类模版)
Description
仿照栈类模版的定义,写一个队列的类模版,队列中数据的特点是“先进先出”,可以用一个一维数组来模拟一个队列,注意:栈中元素的进栈和出栈都是在栈顶进行的,而队列有所不同,元素入队列在队尾进行,元素出队列在队头进行,定义一个队列类如下所示,要求按类模版的定义格式完成成员函数的定义
template <class T>
class queue
{
public:
queue(int num);
~queue();
bool insert(T item); // 元素入队列函数
T remove(); //元素出队列函数
private:
T *data;
int maxCount; //队列的最大容量
int front,rear; //队头和队尾为数组下标
};
主函数如下
int main()
{
queue<char> q( 3 ) ;
q.insert( 'A' ) ;
q.insert( 'B' ) ;
q.insert( 'C' ) ;
cout << q.remove() ;
cout << q.remove() ;
cout << q.remove() << endl;
return 0;
}
Input
无
Output
ABC
Sample Output
ABC
HINT
注意,队头队尾指针的初值应该是多少,什么情况下队列是空的,什么情况下队列是满的,元素入队列和出队列如何修改队头和队尾指针
1 #include<iostream> 2 #include<iomanip> 3 using namespace std; 4 template <class T> 5 class queue 6 { 7 public: 8 queue(int num); 9 ~queue(); 10 bool insert(T item); // 元素入队列函数 11 T remove(); //元素出队列函数 12 private: 13 T *data; 14 int maxCount; //队列的最大容量 15 int front,rear;//队头和队尾为数组下标 16 int top; 17 }; 18 int main() 19 { 20 queue<char> q( 3 ) ; 21 q.insert( 'A' ) ; 22 q.insert( 'B' ) ; 23 q.insert( 'C' ) ; 24 25 cout << q.remove() ; 26 cout << q.remove() ; 27 cout << q.remove() << endl; 28 return 0; 29 } 30 template <class T> 31 queue<T>::queue(int num) 32 { 33 maxCount=num; 34 top=-1; 35 data=new T[num]; 36 front=0;rear=num-1; 37 } 38 template <class T> 39 queue <T>::~queue() 40 { 41 delete []data; 42 } 43 44 template <class T> 45 T queue<T>::remove() 46 { 47 T item; 48 if(front>-1) 49 { 50 item = data[front++]; 51 return item; 52 } 53 } 54 template <class T> 55 bool queue<T>::insert(T item) 56 { 57 if(top<maxCount-1) 58 { 59 data[++top] = item; 60 return true; 61 } 62 else return false; 63 }