利用栈实现数据的分类,要求当输入为偶数时进栈1,当输入为奇数时进栈2,最后分别从栈 1和栈2输出偶数和奇数序列。用c++
时间: 2024-05-20 15:10:05 浏览: 60
语言来实现。
好的,我明白了。以下是代码实现:
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100 // 定义栈的最大容量
typedef struct {
int data[MAXSIZE]; // 定义栈中元素的数据类型
int top1, top2; // 定义两个栈顶指针
} Stack;
// 初始化栈
void InitStack(Stack *S) {
S->top1 = -1; // 栈1为空
S->top2 = MAXSIZE; // 栈2为空
}
// 判断栈是否为空
int isEmpty(Stack *S, int stackNum) {
if (stackNum == 1) {
return S->top1 == -1;
}
else {
return S->top2 == MAXSIZE;
}
}
// 判断栈是否已满
int isFull(Stack *S) {
return S->top2 - S->top1 == 1;
}
// 入栈操作
void Push(Stack *S, int stackNum, int x) {
if (isFull(S)) {
printf("Stack is full.\n");
return;
}
if (stackNum == 1) {
S->data[++S->top1] = x;
}
else {
S->data[--S->top2] = x;
}
}
// 出栈操作
int Pop(Stack *S, int stackNum) {
int x;
if (isEmpty(S, stackNum)) {
printf("Stack is empty.\n");
exit(1);
}
if (stackNum == 1) {
x = S->data[S->top1--];
}
else {
x = S->data[S->top2++];
}
return x;
}
// 输出栈中的元素
void Print(Stack *S, int stackNum) {
int i;
if (stackNum == 1) {
for (i = S->top1; i >= 0; i--) {
printf("%d ", S->data[i]);
}
}
else {
for (i = S->top2; i < MAXSIZE; i++) {
printf("%d ", S->data[i]);
}
}
printf("\n");
}
int main() {
Stack S;
int num, i, x;
InitStack(&S); // 初始化栈
printf("Please enter the numbers: ");
scanf("%d", &num);
for (i = 1; i <= num; i++) {
scanf("%d", &x);
if (x % 2 == 0) { // 如果是偶数,则进栈1
Push(&S, 1, x);
}
else { // 如果是奇数,则进栈2
Push(&S, 2, x);
}
}
printf("Even numbers: ");
Print(&S, 1); // 输出栈1中的偶数序列
printf("Odd numbers: ");
Print(&S, 2); // 输出栈2中的奇数序列
return 0;
}
阅读全文