如何用C语言实现一个基于键盘输入的顺序栈?请提供完整的代码示例,包括元素压入栈和从栈顶弹出操作的过程。
时间: 2024-10-25 10:15:51 浏览: 25
栈模拟停车场,用队列模拟候车场,按照从键盘上获取的数据序列进行模拟管理
在C语言中,我们可以使用数组来实现一个简单的基于键盘输入的顺序栈。这里是一个基本的实现,包含了元素的压入(push)和弹出(pop)功能:
```c
#include <stdio.h>
#define MAX_SIZE 10 // 栈的最大大小
// 定义栈结构
typedef struct {
int data[MAX_SIZE];
int top; // 栈顶指针
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 检查栈是否为空
int isEmpty(Stack *s) {
return (s->top == -1);
}
// 检查栈是否已满
int isFull(Stack *s) {
return (s->top == MAX_SIZE - 1);
}
// 压入元素到栈顶
void push(Stack *s, int value) {
if (isFull(s)) {
printf("Stack is full.\n");
return;
}
s->data[++s->top] = value;
}
// 弹出栈顶元素
int pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty.\n");
return -1; // 返回特殊值表示空栈
}
return s->data[s->top--]; // 减小栈顶指针并返回顶部元素
}
int main() {
Stack s;
init(&s);
while (true) {
char choice;
printf("1. Push\n2. Pop\nEnter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
int value;
printf("Enter a number to push: ");
scanf("%d", &value);
push(&s, value);
break;
case 2:
int popped_value = pop(&s);
if (popped_value != -1) {
printf("Popped value: %d\n", popped_value);
}
break;
default:
printf("Invalid choice.\n");
}
}
return 0;
}
```
在这个例子中,我们创建了一个名为`s`的栈,初始化为无元素状态。用户可以选择压入(键入1)或弹出(键入2)元素。注意,这个版本没有处理用户输入错误的情况,实际应用中可能需要增加更多的错误检查和用户交互。
阅读全文