对于循环队列,假设队列中所有元素为数字字符,利用循环队列的基本运算,删除其中所有奇数字符元素。
#include <iostream>
#include <cstring>
const int MAX_SIZE = 100;
struct Queue
{
char data[MAX_SIZE];
int front;
int rear;
};
// 初始化循环队列
void init(Queue& queue)
{
queue.front = 0;
queue.rear = 0;
}
// 判断循环队列是否为空
bool is_empty(const Queue& queue)
{
return queue.front == queue.rear;
}
// 在循环队列的末尾插入一个元素
bool enqueue(Queue& queue, char value)
{
if ((queue.rear + 1) % MAX_SIZE == queue.front)
{
return false;
}
queue.data[queue.rear] = value;
queue.rear = (queue.rear + 1) % MAX_SIZE;
return true;
}
// 删除循环队列的第一个元素
bool dequeue(Queue& queue)
{
if (is_empty(queue))
{
return false;
}
queue.front = (queue.front + 1) % MAX_SIZE;
return true;
}
// 删除循环队列中所有奇数字符元素
void remove_odd(Queue& queue)
{
while (!is_empty(queue))
{
char value = queue.data[queue.front];
if (value % 2 != 0)
{
dequeue(queue);
}
else
{
break;
}
}
if (is_empty(queue))
{
return;
}
int i = queue.front;
int j = (queue.front + 1) % MAX_SIZE;
while (j != queue.rear)
{
if (queue.data[j] % 2 != 0)
{
queue.data[i] = queue.data[j];
i = j;
}
j = (j + 1) % MAX_SIZE;
}
queue.rear = i;
}
int main()
{
Queue queue;
init(queue);
// 向循环队列中插入数字字符
enqueue(queue, '1');
enqueue(queue, '2');
enqueue(queue, '3');
enqueue(queue, '4');
enqueue(queue, '5');
// 输出原始的循环队列
std::cout << "Original queue: ";
for (int i = queue.front; i != queue.rear; i = (i + 1) % MAX_SIZE)
{
std::cout << queue.data[i] << " ";
}
std::cout << std::endl;
// 删除循环队列中所有奇数字符元素
remove_odd(queue);
// 输出删除后的循环队列
std::cout << "Queue after removing odd elements: ";
for (int i = queue.front; i != queue.rear; i = (i + 1) % MAX_SIZE)
{
std::cout << queue.data[i] << " ";
}
std::cout << std::endl;
return 0;
}