c语言从键盘读入若干个整数,建一个顺序栈或链式栈,并完成下列操作:(1)初始化栈;(2)判栈为空;(3)出栈;(4)入栈。main函数怎么写
时间: 2024-10-25 20:08:36 浏览: 27
结构体变量的初始化-C语言谭浩强第三版PPT课件
在C语言中,我们可以选择使用数组实现顺序栈(动态数组),或者链表实现链式栈。这里我将演示如何使用数组作为栈的数据结构:
```c
#include <stdio.h>
#define MAX_SIZE 10 // 栈的最大容量
// 序列栈结构体
typedef struct {
int stack[MAX_SIZE]; // 栈元素数组
int top; // 栈顶指针
} SeqStack;
// 初始化栈
void initStack(SeqStack *s) {
s->top = -1;
}
// 判断栈是否为空
int isEmpty(SeqStack *s) {
return (s->top == -1);
}
// 出栈操作,返回栈顶元素并调整栈顶
int pop(SeqStack *s) {
if (isEmpty(s)) {
printf("Error: Stack is empty.\n");
return -1;
}
int item = s->stack[s->top];
s->top--;
return item;
}
// 入栈操作,添加新元素到栈顶
void push(SeqStack *s, int value) {
if (s->top >= MAX_SIZE - 1) {
printf("Error: Stack overflow.\n");
return;
}
s->stack[++s->top] = value;
}
// 主函数示例
int main() {
SeqStack myStack;
initStack(&myStack);
// 输入整数并进行操作
int n, num;
while (scanf("%d", &num) != EOF) {
if (scanf("%*c") == EOF) break; // 读取换行符
if (!isEmpty(&myStack)) {
printf("Pushing %d into the stack...\n", num);
push(&myStack, num);
} else {
printf("Popping from an empty stack.\n");
printf("Top element: %d\n", pop(&myStack));
}
}
if (!isEmpty(&myStack)) {
printf("Stack not empty. Top element: %d\n", pop(&myStack)); // 如果还有剩余元素,出栈显示
} else {
printf("Stack is now empty.\n");
}
return 0;
}
```
在这个例子中,`main`函数首先初始化栈,然后通过`scanf`循环读取用户输入的整数。每个数字都会被判断是否要入栈或出栈,最后检查栈是否为空。
阅读全文