c语言输入奇数入队偶数出队.用队列的方式来模拟:当输入的数据为奇数时,数据进队;当输入的数据为偶数时,数据出队。
时间: 2024-12-18 12:19:54 浏览: 7
在C语言中,我们可以使用数组或者链表来实现这个简单的队列操作,这里我们以循环队列为例,因为它的头部和尾部的操作比较直观。首先,我们需要创建两个指针,一个指向队首元素(front),一个指向队尾元素的下一个位置(rear)。当输入奇数时,我们将它添加到队尾;输入偶数时,如果队列非空并且队首元素是偶数,我们就将队首元素移除并打印。
以下是大致的代码结构:
```c
#include <stdio.h>
#define MAX_SIZE 50 // 队列最大容量
typedef struct {
int data[MAX_SIZE]; // 存储元素的数组
int front; // 队首指针
int rear; // 队尾指针
} Queue;
// 初始化队列
void initQueue(Queue* queue) {
queue->front = -1;
queue->rear = -1;
}
// 判断队列是否为空
int isEmpty(Queue* queue) {
return queue->front == -1 && queue->rear == -1;
}
// 判断队列是否满
int isFull(Queue* queue) {
return (queue->front + 1) % MAX_SIZE == queue->rear;
}
// 入队操作
void enqueue(Queue* queue, int num) {
if (isFull(queue)) {
printf("队列已满,无法插入。\n");
return;
}
if (queue->front == -1) {
queue->front = 0;
} else {
queue->rear = (queue->rear + 1) % MAX_SIZE;
}
queue->data[queue->rear] = num;
printf("奇数 %d 入队\n", num);
}
// 出队操作
int dequeue(Queue* queue) {
if (isEmpty(queue)) {
printf("队列为空,无法删除。\n");
return -1;
}
if (queue->front == queue->rear) {
printf("队列仅有一个元素,移除并返回。\n");
int temp = queue->data[queue->front];
queue->front = -1;
queue->rear = -1;
return temp;
} else if (queue->data[queue->front] % 2 == 0) {
printf("偶数 %d 出队\n", queue->data[queue->front]);
int temp = queue->data[queue->front];
queue->front = (queue->front + 1) % MAX_SIZE;
return temp;
} else {
printf("队头元素是奇数,不做处理。\n");
return -1; // 如果队头不是偶数,不执行出队操作
}
}
int main() {
Queue q;
initQueue(&q);
// 输入并处理数据
int input;
while (scanf("%d", &input) == 1) {
if (input % 2 == 0) { // 偶数
int removed = dequeue(&q);
if (removed != -1) {
printf("出队后的偶数:%d\n", removed);
}
} else { // 奇数
enqueue(&q, input);
}
}
return 0;
}
```
阅读全文