仿照栈类模版的定义,写一个队列的类模版,队列中数据的特点是“先进先出”,可以用一个一维数组来模拟一个队列,注意:栈中元素的进栈和出栈都是在栈顶进行的,而队列有所不同,元素入队列在队尾进行,元素出队列在队头进行,定义一个队列类如下所示,要求按类模版的定义格式完成成员函数的定义 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; }
时间: 2023-12-28 13:03:44 浏览: 80
模版类的队列定义如下:
```cpp
template <class T>
class queue {
public:
queue(int num);
~queue();
bool insert(T item);
T remove();
private:
T* data; // 队列数据的指针
int maxCount; // 队列的最大容量
int front, rear; // 队头和队尾为数组下标
};
```
其中,构造函数和析构函数的定义如下:
```cpp
template <class T>
queue<T>::queue(int num) {
data = new T[num]; // 开辟num个T类型的空间
maxCount = num;
front = rear = 0; // 队头和队尾均为0
}
template <class T>
queue<T>::~queue() {
delete[] data;
}
```
元素入队列函数的定义如下:
```cpp
template <class T>
bool queue<T>::insert(T item) {
// 如果队列已满,插入失败
if ((rear + 1) % maxCount == front) {
return false;
}
data[rear] = item;
rear = (rear + 1) % maxCount; // 队尾下标加1
return true;
}
```
元素出队列函数的定义如下:
```cpp
template <class T>
T queue<T>::remove() {
// 如果队列为空,返回T类型的默认值
if (front == rear) {
return T();
}
T item = data[front];
front = (front + 1) % maxCount; // 队头下标加1
return item;
}
```
在主函数中,可以进行队列的测试:
```cpp
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;
}
```
输出为:
```
ABC
```
阅读全文