阿漩 2022-08-13 23:42 采纳率: 100%
浏览 69
已结题

关于数据结构后缀表达式

麻烦帮帮忙!想了好久真的想不出来为什么了!

img


我抄的标准答案:(重点代码是post_fix()那一段)

using namespace std;
#include<iostream>
#define MAXSIZE 100
#define ERROR 0
#define OK 1
#define OVERFLOW -1

typedef double SElemType;
typedef int Status;

typedef struct {
    SElemType* base;
    SElemType* top;
    int stacksize;
}SqStack;

Status InitStack(SqStack& S) {
    S.base = new SElemType[MAXSIZE];  //为顺序栈分配一个最大容量为MAXSIZE的数组空间
    if (!S.base)exit(OVERFLOW);  //存储分配失败
    S.top = S.base;  //top初始为base,空栈
    S.stacksize = MAXSIZE;  //stacksize置为栈的最大容量MAXSIZE
    return OK;
}

Status Push(SqStack& S, SElemType e) {
    if (S.top - S.base == S.stacksize) return ERROR;
    *S.top++ = e;  //元素e压入栈顶,栈顶指针+1
    return OK;
}

Status Pop(SqStack& S, SElemType& e) {
    if (S.top == S.base)return ERROR;
    e = *--S.top;  //栈顶指针-1,将栈顶元素赋给e
    return OK;
}

SElemType GetTop(SqStack& S) {
    if (S.top != S.base) {
        return *(S.top - 1);  //返回栈顶元素的值,栈顶指针不变
    }
}

double  post_fix() {
    SqStack OPND;
    InitStack(OPND);
    double num = 0.0;
    int ch = getchar();
    while (ch != '$') {
        int i = 0;
        char data[MAXSIZE];
        while ((ch >= '0' && ch <= '9') || ch == '.') {  //拼数,读入的数字或者小数点依次保留在data数组
            data[i] = ch;
            i++;
            ch = getchar();
        }
        num = atof(data);  //将字符串转化成浮点数
        Push(OPND, num);
        double a,b;
        switch (ch) {
        case ' ': break;
        case '+':Pop(OPND, b); Pop(OPND, a); Push(OPND, a + b); cout << a << b <<a+b<<endl;break;
        case '-':Pop(OPND, b); Pop(OPND, a); Push(OPND, a - b); break;
        case '*':Pop(OPND, b); Pop(OPND, a); Push(OPND, a * b); break;
        case '/':Pop(OPND, b); Pop(OPND, a); Push(OPND, a / b); break;
        }
        ch = getchar();
    }
    return GetTop(OPND);
}


int main() {
    SqStack S;
    InitStack(S);
    cout<<post_fix();

    return 0;
}

比如我输入3 4 +,cout << a << b <<a+b<<endl;代码会输出448,就是a=4,b=4,a+b=8,但是最后返还的还是4
真不知道是为什么,帮帮忙谢谢了!

  • 写回答

1条回答 默认 最新

  • 烟雨龙升 2022-08-13 23:57
    关注

    你确定标准答案,num不更新,每运行一次就压一次栈,栈里的数都不对了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 8月22日
  • 已采纳回答 8月14日
  • 修改了问题 8月13日
  • 创建了问题 8月13日

悬赏问题

  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 Macbookpro 连接热点正常上网,连接不了Wi-Fi。
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题