使用C语言实现一个基于键盘输入的顺序栈,具体步骤包括从用户输入获取元素并压入栈中,以及执行栈顶元素的删除操作(即弹出)。
时间: 2024-10-25 17:15:25 浏览: 35
在C语言中实现一个简单的顺序栈(也称为数组栈),你可以按照以下步骤进行:
1. **包含头文件**:
首先,我们需要包含`stdio.h`(用于标准输入输出)和`stdlib.h`(提供处理内存分配所需的函数)。
```c
#include <stdio.h>
#include <stdlib.h>
```
2. **定义栈结构体**:
定义一个名为`Stack`的结构体,包含栈顶指针`top`、存储数据的动态数组`data`和数组的容量`capacity`。
```c
typedef struct {
int* data;
int top;
int capacity;
} Stack;
```
3. **初始化栈**:
创建一个栈实例,并设置初始容量。通常选择一个较大的数,以便后续添加元素。
```c
Stack stack = {NULL, -1, 10};
```
4. **读取用户输入**:
使用`scanf`函数从用户那里获取整数元素,并检查是否已达到栈满的情况。
```c
int input;
while (stack.top < stack.capacity - 1) {
printf("请输入一个整数:");
scanf("%d", &input);
// 将元素压入栈中
stack.data[++stack.top] = input;
}
```
5. **压栈操作**:
当用户输入结束后,可以添加一个结束标志,如-1,表示栈不再接收新元素。
```c
stack.data[stack.top] = -1; // 添加结束标志
```
6. **弹出栈顶元素**:
如果栈非空,可以创建一个辅助函数`pop_element(Stack *stack)`来执行弹出操作。
```c
void pop_element(Stack *stack) {
if (stack->top != -1) {
stack->top--;
// 可选:释放内存(如果需要)
free(stack->data);
stack->data = NULL;
} else {
printf("栈已为空,无法弹出。\n");
}
}
```
7. **主程序循环**:
用户可以选择执行多次压栈和弹栈操作,直到退出。
```c
int main() {
while (1) {
printf("请选择操作:
1. 压栈
2. 弹出
3. 退出\n");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
// 压栈操作...
break;
case 2:
pop_element(&stack);
break;
case 3:
return 0; // 退出程序
default:
printf("无效的选择,请重新尝试。\n");
}
}
return 0;
}
```
阅读全文