【c语言小项目】简单计算器

应用栈实现表达式求值,具体思路如下:

  • 创建两个栈,一个用来存数字,一个用来存符号。起始,数字栈为空,符号栈底先存一个’\n’用来标记开始,用输入的’\n’标记结尾。

  • 开始处理输入的字符,当字符是运算符号时,根据运算符的优先关系:如果当前符号优先关系大于栈顶符号,入栈;如果小于,则拿出栈顶符号,再从数字栈拿出两个数字进行运算,将结果放在数字栈里;如果等于,说明是两个括号相遇,此时括号内的运算已经完成,将括号脱栈。

  • 遇到用户输入的回车符结束运算,并从数字栈里拿出运算结果。

代码如下:

#include<stdio.h>
#include<stdlib.h>
#define STACKMAX 100
#define STACKADD 10


/**********************************符号栈****************************/
typedef struct StackChar
{
    char *base;
    char *top;
    int stacksize;
}SC;

void InitStackSC(SC *S)
{
    S->base = (char*)malloc(STACKMAX*sizeof(char));
    S->top = S->base;
    S->stacksize = STACKMAX;
}

void PushSC(SC *S,char e)
{
    if(S->top - S->base >= S->stacksize)
    {
        S->base = (char*)realloc(S->base,(S->stacksize+STACKADD)*sizeof(char));
        if(!S->base)
            return;
        S->top = S->base + S->stacksize;
        S->stacksize += STACKADD;
    }
    *S->top++ = e;
}
int StackEmptySC(SC* S)
{
    if(S->base == S->top)
        return 1;
    return 0;
}
void PopSC(SC *S,char *e)
{
    *e = *--S->top;
}

char GetTopSC(SC *S)
{
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值