用栈实现数据的分类,要求当输入为偶数时进栈1,当输入为奇数时进栈2,最后分别从栈1和栈2输出偶数和奇数序列。c语言代码
时间: 2024-09-25 21:02:19 浏览: 39
在C语言中,我们可以使用两个栈分别存储偶数和奇数。这里是一个简单的实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义栈结构体
typedef struct {
int* array;
int top;
int size;
} Stack;
// 初始化栈
Stack* initStack(int size) {
Stack* stack = (Stack*)malloc(sizeof(Stack));
stack->array = (int*)malloc(size * sizeof(int));
stack->top = -1;
stack->size = size;
return stack;
}
// 入栈操作
void push(Stack* stack, int item) {
if(stack->top < stack->size - 1) {
stack->array[++stack->top] = item;
} else {
printf("Stack overflow.\n");
}
}
// 出栈并检查元素类型(奇数进栈1,偶数进栈2)
int popAndClassify(Stack** stacks, int* class) {
if(stacks[*class]->top == -1) {
return -1; // 栈为空
}
int item = stacks[*class]->array[stacks[*class]->top--];
return item;
}
// 主函数
int main() {
Stack* stack1 = initStack(10);
Stack* stack2 = initStack(10);
int input;
while(scanf("%d", &input) != EOF) {
if(input % 2 == 0) {
push(stack1, input);
} else {
push(stack2, input);
}
}
while((input = popAndClassify(&stack1, &class)) != -1) {
printf("%d ", input); // 输出栈1中的偶数
}
printf("\n");
while((input = popAndClassify(&stack2, &class)) != -1) {
printf("%d ", input); // 输出栈2中的奇数
}
printf("\n");
free(stack1->array);
free(stack1);
free(stack2->array);
free(stack2);
return 0;
}
```
这个程序首先初始化了两个栈`stack1`和`stack2`,然后循环读取输入的整数。如果数字是偶数,就推入`stack1`;如果是奇数,推入`stack2`。最后,遍历每个栈并打印出对应类型的数字。
阅读全文