c语言实现 编写程序sy42.cpp,利用栈和队列将整数数组{1,2,3,4,5,6,7,8,9}分拆为奇数序列和偶数序列,并且逆序输出。要求:用一个栈,两个队列实现。 输出为: 奇数:9,7,5,3,1 偶数:8.6.4.2
时间: 2024-09-12 09:09:08 浏览: 48
C语言实现上述功能的程序可以按照以下步骤来编写:
1. 定义一个栈和两个队列,分别用来存储奇数和偶数。
2. 遍历整数数组,根据数组元素的奇偶性分别入栈和入队。
3. 将栈中的元素依次出栈,同时将队列中的元素依次出队,这样就得到了奇数和偶数的逆序序列。
4. 输出奇数和偶数序列。
下面是一个可能的C语言程序实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
// 定义栈的结构
typedef struct Stack {
int *elements;
int top;
int capacity;
} Stack;
// 定义队列的结构
typedef struct Queue {
int *elements;
int front;
int rear;
int capacity;
} Queue;
// 初始化栈
void initStack(Stack *s, int capacity) {
s->elements = (int *)malloc(capacity * sizeof(int));
s->top = -1;
s->capacity = capacity;
}
// 初始化队列
void initQueue(Queue *q, int capacity) {
q->elements = (int *)malloc(capacity * sizeof(int));
q->front = q->rear = 0;
q->capacity = capacity;
}
// 判断栈是否为空
bool isEmpty(Stack *s) {
return s->top == -1;
}
// 判断队列是否为空
bool isQueueEmpty(Queue *q) {
return q->front == q->rear;
}
// 入栈操作
void push(Stack *s, int element) {
if (s->top < s->capacity - 1) {
s->elements[++s->top] = element;
}
}
// 入队操作
void enqueue(Queue *q, int element) {
if ((q->rear + 1) % q->capacity != q->front) {
q->elements[q->rear] = element;
q->rear = (q->rear + 1) % q->capacity;
}
}
// 出栈操作
int pop(Stack *s) {
if (!isEmpty(s)) {
return s->elements[s->top--];
}
return -1;
}
// 出队操作
int dequeue(Queue *q) {
if (!isQueueEmpty(q)) {
int element = q->elements[q->front];
q->front = (q->front + 1) % q->capacity;
return element;
}
return -1;
}
// 主函数实现
int main() {
int numbers[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int size = sizeof(numbers) / sizeof(numbers[0]);
Stack s;
Queue qOdd, qEven;
initStack(&s, size);
initQueue(&qOdd, size);
initQueue(&qEven, size);
for (int i = 0; i < size; i++) {
if (numbers[i] % 2 == 0) {
enqueue(&qEven, numbers[i]);
} else {
enqueue(&qOdd, numbers[i]);
}
}
// 输出偶数序列
printf("偶数:");
while (!isQueueEmpty(&qEven)) {
printf("%d.", dequeue(&qEven));
}
printf("\n");
// 输出奇数序列
printf("奇数:");
while (!isEmpty(&s)) {
printf("%d,", pop(&s));
}
printf("\n");
// 释放资源
free(s.elements);
free(qOdd.elements);
free(qEven.elements);
return 0;
}
```
在编译和运行上述程序时,确保使用支持C语言的编译器,并且文件名应为sy42.c(注意扩展名),因为代码中提到的文件名为sy42.cpp,但实际上应该使用C语言的扩展名.c。
阅读全文