设计和实现用单链表表示的队列类模板,编写测试程序,设计队列操作指令,根据指令,分别建立整形队列和字符串队列并完成队列的操作
时间: 2024-03-18 19:19:12 浏览: 17
下面是单链表表示的队列类模板的设计和实现:
```cpp
#include <iostream>
using namespace std;
template <typename T>
class Queue {
private:
struct Node {
T data;
Node* next;
};
Node* front;
Node* rear;
public:
Queue() {
front = rear = nullptr;
}
~Queue() {
while (!isEmpty()) {
dequeue();
}
}
void enqueue(T elem) {
Node* newNode = new Node;
newNode->data = elem;
newNode->next = nullptr;
if (isEmpty()) {
front = rear = newNode;
} else {
rear->next = newNode;
rear = newNode;
}
}
T dequeue() {
if (isEmpty()) {
throw "Queue is empty!";
}
Node* temp = front;
T elem = temp->data;
front = front->next;
delete temp;
if (front == nullptr) {
rear = nullptr;
}
return elem;
}
bool isEmpty() {
return front == nullptr;
}
void print() {
Node* temp = front;
while (temp != nullptr) {
cout << temp->data << " ";
temp = temp->next;
}
cout << endl;
}
};
```
下面是测试程序和设计的队列操作指令:
```cpp
#include <iostream>
#include <string>
#include "Queue.h"
using namespace std;
int main() {
Queue<int> intQueue;
Queue<string> stringQueue;
cout << "Enter the queue operation and value separated by space. Enter 0 to exit." << endl;
cout << "Examples: e 10 (enqueue 10); d (dequeue); p (print); 0 (exit)" << endl;
char operation;
while (cin >> operation) {
if (operation == '0') {
break;
}
try {
if (operation == 'e') {
int intVal;
string stringVal;
cin >> intVal;
intQueue.enqueue(intVal);
cin >> stringVal;
stringQueue.enqueue(stringVal);
} else if (operation == 'd') {
cout << "Dequeued element: " << intQueue.dequeue() << ", " << stringQueue.dequeue() << endl;
} else if (operation == 'p') {
cout << "Integer queue: ";
intQueue.print();
cout << "String queue: ";
stringQueue.print();
} else {
cout << "Invalid operation!" << endl;
}
} catch (const char* msg) {
cout << msg << endl;
}
}
return 0;
}
```
上面的程序中,用户可以输入队列操作指令,包括入队、出队和打印队列。用户可以建立整型队列和字符串队列,并对它们进行操作。程序会根据用户输入进行相应的操作,并输出结果。