循环队列基本运算,删除奇数字符

对于循环队列,假设队列中所有元素为数字字符,利用循环队列的基本运算,删除其中所有奇数字符元素。


#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;
}