利用循环队列模拟舞伴配对问题:\n1、利用循环队列模拟舞伴配对问题。在舞会上,男、女各自排成一队。舞会开始时。依次从男队和女队的队头各出一人配成舞伴。如果两队初始人数不等,则较长的那一队中未配对者等待下
时间: 2023-04-17 21:04:25 浏览: 115
数据结构课程设计 关于队列的应用
一轮再进行下一轮配对。直到所有人都配对成功为止。要求使用循环队列实现。
实现思路:
1. 定义一个循环队列,分别存储男队和女队的队列。
2. 从男队和女队的队头各出一人,配成舞伴,输出配对信息。
3. 如果两队初始人数不等,则较长的那一队中未配对者重新入队,等待下一轮配对。
4. 重复步骤2和步骤3,直到所有人都配对成功为止。
代码实现:
```
#include <iostream>
using namespace std;
const int MAXSIZE = 100; // 循环队列的最大长度
// 循环队列的定义
template <typename T>
class Queue {
public:
Queue(int size = MAXSIZE) {
maxSize = size;
front = rear = 0;
queue = new T[maxSize];
}
~Queue() {
delete[] queue;
}
bool isEmpty() const {
return front == rear;
}
bool isFull() const {
return (rear + 1) % maxSize == front;
}
bool enqueue(const T& x) {
if (isFull()) {
return false;
}
queue[rear] = x;
rear = (rear + 1) % maxSize;
return true;
}
bool dequeue(T& x) {
if (isEmpty()) {
return false;
}
x = queue[front];
front = (front + 1) % maxSize;
return true;
}
private:
T* queue; // 存储队列元素的数组
int front; // 队头指针
int rear; // 队尾指针
int maxSize; // 循环队列的最大长度
};
int main() {
Queue<int> maleQueue(10); // 男队列
Queue<int> femaleQueue(10); // 女队列
int maleNum, femaleNum;
cout << "请输入男队和女队的人数:" << endl;
cin >> maleNum >> femaleNum;
// 初始化男队和女队
for (int i = 1; i <= maleNum; i++) {
maleQueue.enqueue(i);
}
for (int i = 1; i <= femaleNum; i++) {
femaleQueue.enqueue(i);
}
// 开始配对
int round = 1; // 记录配对轮数
while (!maleQueue.isEmpty() && !femaleQueue.isEmpty()) {
int male, female;
maleQueue.dequeue(male);
femaleQueue.dequeue(female);
cout << "第" << round << "轮配对:男" << male << "和女" << female << "配对成功!" << endl;
round++;
// 如果男队或女队中还有未配对者,则重新入队
if (!maleQueue.isEmpty() && femaleQueue.isEmpty()) {
maleQueue.enqueue(male);
}
if (maleQueue.isEmpty() && !femaleQueue.isEmpty()) {
femaleQueue.enqueue(female);
}
}
// 输出配对结果
if (maleQueue.isEmpty() && femaleQueue.isEmpty()) {
cout << "所有人都配对成功!" << endl;
} else if (maleQueue.isEmpty()) {
cout << "男队中还有未配对者!" << endl;
} else {
cout << "女队中还有未配对者!" << endl;
}
return 0;
}
```
阅读全文