使用c语言实现栈的进栈,出栈,取栈顶元素,和退出操作和菜单服务
时间: 2024-02-07 08:04:16 浏览: 36
好的,我可以帮您实现这个功能。以下是C语言实现栈的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 栈的最大容量
struct Stack {
int data[MAXSIZE]; // 存储栈中元素的数组
int top; // 栈顶指针
};
void initStack(struct Stack *s) {
s->top = -1;
}
int isEmpty(struct Stack *s) {
return s->top == -1;
}
int isFull(struct Stack *s) {
return s->top == MAXSIZE - 1;
}
void push(struct Stack *s, int x) {
if (isFull(s)) {
printf("栈已满,无法插入元素!\n");
return;
}
s->data[++s->top] = x;
}
int pop(struct Stack *s) {
if (isEmpty(s)) {
printf("栈已空,无法弹出元素!\n");
return -1;
}
return s->data[s->top--];
}
int peek(struct Stack *s) {
if (isEmpty(s)) {
printf("栈已空,无法取出栈顶元素!\n");
return -1;
}
return s->data[s->top];
}
void menu() {
printf("********** 栈的基本操作 **********\n");
printf("1. 进栈\n");
printf("2. 出栈\n");
printf("3. 取栈顶元素\n");
printf("4. 退出\n");
printf("**********************************\n");
}
int main() {
struct Stack s;
initStack(&s);
int choice, x;
while (1) {
menu();
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入要插入的元素:");
scanf("%d", &x);
push(&s, x);
break;
case 2:
x = pop(&s);
if (x != -1) {
printf("弹出的元素为:%d\n", x);
}
break;
case 3:
x = peek(&s);
if (x != -1) {
printf("栈顶元素为:%d\n", x);
}
break;
case 4:
printf("程序已退出!\n");
exit(0);
default:
printf("输入有误,请重新选择!\n");
break;
}
}
return 0;
}
```
在这段代码中,我们定义了一个 `Stack` 结构体,包含一个存储元素的数组 `data` 和一个栈顶指针 `top`。然后,我们实现了栈的基本操作函数,包括初始化栈、判断栈空和栈满、进栈、出栈、取栈顶元素。最后,我们编写了一个菜单函数 `menu` 和一个主函数 `main`,通过菜单选择不同的操作。