实现一个简单的栈操作模拟器,通过命令行输入对栈进行操作。栈是一种后进先出(LIFO,Last In First Out)的数据结构,常见的操作包括压栈(push)、出栈(pop)和查看栈顶元素(top)。
代码:
#include <stdio.h>
#include <string.h>
#include<math.h>
#include<stdlib.h>
#include<malloc.h>
#define MAX_CONTENT_OF_STACK 100000 // 定义栈的最大容量为 100,000
int main() {
int *b = (int*)malloc(MAX_CONTENT_OF_STACK * sizeof(int)); // 动态分配一个整数数组作为栈的存储空间
int base = 0; // 栈底指针
int top = base; // 栈顶指针,初始值与栈底相同
int i;
int operTimes = 0; // 记录操作次数
char ch_input[100] = {0}; // 用于存储每次输入的命令
int x = 0; // 用于存储压入栈的数值
int len = 0; // 用于存储命令的长度
int beishu = 1; // 用于处理多位数的转换
int j;
scanf("%d", &operTimes); // 从输入读取操作次数
for(int i = 0; i < operTimes; i++) {
fgets(ch_input, sizeof(ch_input), stdin); // 读取一行输入命令
if(ch_input[0] == '\n') { // 如果读取的是空行
fgets(ch_input, sizeof(ch_input), stdin); // 再读取一行
}
else { ; }
len = strlen(ch_input); // 计算命令的长度
// 处理 push 操作
if(ch_input[0] == 'p' && ch_input[1] == 'u') {
if(len < 6) { // 检查命令格式是否正确
printf("error\n");
} else if(len == 6) { // 处理单个位数
x = ch_input[5] - 48;
} else { // 处理多位数
for(j = len - 2; j >= 5; j--) {
x += (ch_input[j] - 48) * beishu;
beishu = beishu * 10;
}
}
b[top] = x; // 将数值压入栈
x = 0;
beishu = 1;
top++; // 更新栈顶指针
}
// 处理 pop 操作
else if(ch_input[0] == 'p' && ch_input[1] == 'o') {
if(top == base) { // 如果栈为空
printf("error\n");
} else {
printf("%d\n", b[top - 1]); // 输出栈顶元素
top--; // 栈顶指针下移
}
}
// 处理 top 操作
else if(ch_input[0] == 't' && ch_input[1] == 'o') {
if(top == base) { // 如果栈为空
printf("error\n");
} else {
printf("%d\n", b[top - 1]); // 输出栈顶元素
}
}
else {
printf("error\n"); // 如果命令不符合要求,输出错误信息
}
}
return 0; // 程序结束
}
示例:
输入:
6
push 1
pop
top
push 2
push 3
pop
输出:
1
error
3