实现一个栈

实现一个简单的栈操作模拟器,通过命令行输入对栈进行操作。栈是一种后进先出(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值