c语言实现利用栈实现数据的分类,要求当输入为偶数时进栈1,当输入为奇数时进栈2,最后分别从栈1和栈2输出偶数和奇数序列。
时间: 2024-05-14 13:15:58 浏览: 9
好的,根据您的要求,我可以提供以下的C语言代码实现利用栈实现数据的分类,让偶数进栈1,奇数进栈2,并且最后从栈1和栈2输出偶数和奇数序列。请注意,以下代码仅供参考,您可以根据实际情况做出适当的调整和修改。
```
#include <stdio.h>
#define STACK_SIZE 10
typedef struct Stack
{
int data[STACK_SIZE];
int top1; // 栈1的栈顶指针
int top2; // 栈2的栈顶指针
} Stack;
// 初始化栈
void init(Stack *s)
{
s->top1 = -1;
s->top2 = -1;
}
// 判断栈是否为空
int isEmpty(Stack *s, int stackNo)
{
if (stackNo == 1)
{
return s->top1 == -1;
}
else if (stackNo == 2)
{
return s->top2 == -1;
}
}
// 判断栈是否已满
int isFull(Stack *s, int stackNo)
{
if (stackNo == 1)
{
return s->top1 == STACK_SIZE - 1;
}
else if (stackNo == 2)
{
return s->top2 == STACK_SIZE - 1;
}
}
// 进栈操作
void push(Stack *s, int data, int stackNo)
{
if (isFull(s, stackNo))
{
printf("栈已满,无法进栈!\n");
return;
}
if (stackNo == 1)
{
s->top1++;
s->data[s->top1] = data;
}
else if (stackNo == 2)
{
s->top2++;
s->data[s->top2] = data;
}
}
// 出栈操作
int pop(Stack *s, int stackNo)
{
if (isEmpty(s, stackNo))
{
printf("栈为空,无法出栈!\n");
return -1;
}
int data;
if (stackNo == 1)
{
data = s->data[s->top1];
s->top1--;
}
else if (stackNo == 2)
{
data = s->data[s->top2];
s->top2--;
}
return data;
}
int main()
{
Stack s;
init(&s); // 初始化栈
// 读入数据并分类进栈
int num;
printf("请输入一些整数,以0结束:\n");
scanf("%d", &num);
while (num != 0)
{
if (num % 2 == 0)
push(&s, num, 1); // 偶数进栈1
else
push(&s, num, 2); // 奇数进栈2
scanf("%d", &num);
}
// 从栈1中输出偶数序列
printf("\n偶数序列为:");
while (!isEmpty(&s, 1))
{
int data = pop(&s, 1);
if (data % 2 == 0)
printf("%d ", data);
}
// 从栈2中输出奇数序列
printf("\n奇数序列为:");
while (!isEmpty(&s, 2))
{
int data = pop(&s, 2);
if (data % 2 != 0)
printf("%d ", data);
}
return 0;
}
```
希望这个代码对您有所帮助!如果您有任何疑问或需要进一步帮助,请随时提出。