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

 

posted @ 2022-06-12 08:52  杏花疏影  阅读(348)  评论(0)    收藏  举报