这段代码使用C语言实现了一个使用队列存储奇数和偶数,并按照奇偶数配对输出的程序。

程序首先定义了一个队列结构体,包含队列的前端、后端、大小、容量和数组。然后,通过createQueue函数创建了两个队列q1和q2。

generateNumbers函数使用rand函数和time函数生成20个100以内的随机数,并根据数值的奇偶性将其分别存入q1和q2队列中。

在主函数中,程序使用while循环,只要q1和q2队列均不为空,就不断从队列中取出一个奇数和一个偶数,并通过printf函数进行配对输出。

最后,程序释放了动态分配的内存,释放了q1和q2队列的数组以及队列本身。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// 定义队列结构体
typedef struct Queue {
    int front, rear, size;
    unsigned capacity;
    int* array;
} Queue;

// 创建一个队列
Queue* createQueue(unsigned capacity) {
    Queue* queue = (Queue*)malloc(sizeof(Queue));
    queue->capacity = capacity;
    queue->front = queue->size = 0;
    queue->rear = capacity - 1;
    queue->array = (int*)malloc(queue->capacity * sizeof(int));
    return queue;
}

// 队列是否已满
int isFull(Queue* queue) {
    return (queue->size == queue->capacity);
}

// 队列是否为空
int isEmpty(Queue* queue) {
    return (queue->size == 0);
}

// 入队
void enqueue(Queue* queue, int item) {
    if (isFull(queue))
        return;
    queue->rear = (queue->rear + 1) % queue->capacity;
    queue->array[queue->rear] = item;
    queue->size = queue->size + 1;
}

// 出队
int dequeue(Queue* queue) {
    if (isEmpty(queue))
        return -1;
    int item = queue->array[queue->front];
    queue->front = (queue->front + 1) % queue->capacity;
    queue->size = queue->size - 1;
    return item;
}

// 随机生成20个100以内的奇数和偶数,并存入队列
void generateNumbers(Queue* q1, Queue* q2) {
    srand(time(NULL));
    int i, num;
    for (i = 0; i < 20; i++) {
        num = rand() % 100 + 1;
        if (num % 2 == 0)
            enqueue(q2, num);
        else
            enqueue(q1, num);
    }
}

int main() {
    Queue* q1 = createQueue(20);
    Queue* q2 = createQueue(20);

generateNumbers(q1, q2);

    while (!isEmpty(q1) && !isEmpty(q2)) {
        printf('%d %d
', dequeue(q1), dequeue(q2));
    }

    free(q1->array);
    free(q1);
    free(q2->array);
    free(q2);

    return 0;
}

如果你想要运行这段代码,请使用C编译器将其编译为可执行文件,然后运行该可执行文件即可。


原文地址: https://www.cveoy.top/t/topic/bhNa 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录