C语言队列实现奇偶数配对输出
这段代码使用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 著作权归作者所有。请勿转载和采集!