用c++按照队列ADT构造队列类并使之可以输入输出,编写两个测试程序,分别测试顺序队列和链队列的输入、输出函数。
时间: 2024-10-08 21:09:57 浏览: 51
在 C++ 中,我们可以使用数组(对于顺序队列)或者链表(对于链队列)来实现队列数据结构。这里我会给出一种简单的顺序队列和链队列的实现,并提供相应的输入输出测试。
**顺序队列(基于数组)实现:**
```cpp
#include <iostream>
using namespace std;
class Queue {
private:
int front, rear;
int capacity;
int* array;
public:
Queue(int size) : front(0), rear(0), capacity(size), array(new int[capacity]) {}
// 入队
void enqueue(int value) {
if (rear == (front + capacity - 1) % capacity)
throw "Queue is full";
array[rear] = value;
rear = (rear + 1) % capacity;
}
// 出队
int dequeue() {
if (front == rear)
throw "Queue is empty";
int value = array[front];
front = (front + 1) % capacity;
return value;
}
// 输入测试
void test_input() {
cout << "Enter elements to enqueue:\n";
for (int i = 0; i < capacity / 2; ++i) {
int val;
cin >> val;
enqueue(val);
}
cout << "\nElements in the queue after input:\n";
for (int i = front; i != rear; i = (i + 1) % capacity)
cout << array[i] << " ";
}
// 输出测试
void test_output() {
cout << "\nElements in the queue before dequeue:\n";
for (int i = front; i != rear; i = (i + 1) % capacity)
cout << array[i] << " ";
for (int i = 0; i < capacity / 4; ++i) {
dequeue();
}
cout << "\nElements in the queue after output:\n";
for (int i = front; i != rear; i = (i + 1) % capacity)
cout << array[i] << " ";
}
};
int main() {
Queue q(5); // 创建一个大小为5的队列
try {
q.test_input();
q.test_output();
} catch (const char* msg) {
cerr << msg << endl;
}
delete[] q.array;
return 0;
}
```
**链队列(基于链表)实现:**
由于篇幅限制,这里简化了链表节点和队列的实现。你可以参考类似教材或在线资源来完善链队列的细节:
```cpp
class Node {
public:
int data;
Node* next;
};
class Queue {
private:
Node* front, *rear;
public:
Queue() : front(nullptr), rear(nullptr) {}
// 省略入队(enqueue)、出队(dequeue)和其他方法
void test_input() {
// 略
}
void test_output() {
// 略
}
};
int main() {
Queue q;
// 略
return 0;
}
```
注意,在链队列的实现中,`enqueue` 和 `dequeue` 会直接操作链表头指针,不需要额外的数组管理。
阅读全文