请使用C语言以菜单形式编程实现栈的基本操作,主要包括栈的创建、压栈栈和弹栈等基本操作
时间: 2024-12-01 14:30:41 浏览: 15
在C语言中,我们可以使用数组作为栈的基础数据结构来实现菜单形式的栈操作。下面是一个简单的例子,演示了如何创建栈、压栈(入栈)和弹栈(出栈):
```c
#include <stdio.h>
#include <stdlib.h> // 引入malloc库用于动态内存分配
#define MAX_SIZE 100 // 栈的最大容量
typedef struct {
int data[MAX_SIZE]; // 栈的数据部分
int top; // 栈顶指针,指向当前栈顶元素的位置
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int is_empty(Stack *s) {
return (s->top == -1);
}
// 将元素压入栈
void push(Stack *s, int item) {
if (is_full(s)) {
printf("Stack overflow! Can't push element.\n");
return;
}
s->data[++(s->top)] = item;
printf("Pushed %d into stack.\n", item);
}
// 从栈中弹出元素
int pop(Stack *s) {
if (is_empty(s)) {
printf("Stack underflow! No element to pop.\n");
return -1;
}
return s->data[s->top--];
}
// 检查栈是否已满
int is_full(Stack *s) {
return (s->top == MAX_SIZE - 1);
}
// 主函数示例
int main() {
Stack my_stack;
init(&my_stack);
while (true) {
int choice;
printf("\n1. Push an element\n2. Pop an element\n3. Check stack status\n4. Exit\nChoose an operation: ");
scanf("%d", &choice);
switch (choice) {
case 1: {
int value;
printf("Enter a number to push: ");
scanf("%d", &value);
push(&my_stack, value);
break;
}
case 2: {
int popped_value = pop(&my_stack);
if (popped_value != -1)
printf("Popped element: %d\n", popped_value);
else
printf("Nothing popped from the empty stack.\n");
break;
}
case 3: {
if (is_empty(&my_stack))
printf("Stack is empty.\n");
else
printf("Current stack status: %d elements.\n", s->top + 1);
break;
}
case 4: {
exit(0); // 退出程序
}
default:
printf("Invalid choice! Please try again.\n");
break;
}
}
return 0;
}
```
这个程序会通过菜单提示用户选择操作,如压栈、弹栈以及检查栈的状态。请注意,由于此处没有处理错误情况(如用户输入非法值),在实际项目中需要添加适当的错误处理。
阅读全文