习题3.4

4.从键盘上输入一个后缀表达式,试编写算法计算表达式的值。规定:后缀表达式的长度不超过一行,以“$”作为输入结束,操作数之间用空格分隔,操作符只可能有+、-、*、/ 四种运算。例如:234 34+2×$。

完整代码:

#include <iostream>
#include <string.h>
using namespace std;
typedef int Status;
typedef int TypeStack;

#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAX 100 //栈空间初始大小

//顺序栈
typedef struct SqStack
{
    TypeStack *top;  //栈顶指针
    TypeStack *base; //栈底指针
    int size;        //当前栈空间的大小
} SqStack;

void readan(SqStack &S);
double Postfix(SqStack &S);

bool EmptyStack(SqStack S)
{

    if (S.top == S.base)

        return true;

    else
        return false;
}

Status InitStack(SqStack &S)
{
    S.base = new TypeStack[MAX];
    if (!S.base)
        exit(OVERFLOW);
    S.top = S.base;
    S.size = MAX;
    return OK;
}

Status push(SqStack &S, TypeStack e)
{
    if (S.top - S.base == S.size)
    {
        cout << "栈满!" << endl;
        return ERROR;
    }
    *S.top = e;
    *S.top++;
    return OK;
}

Status Pop(SqStack &S, TypeStack &e)
{
    if (S.top == S.base)
    {
        cout << "栈为空" << endl;
        return ERROR;
    }
    *--S.top;
    e = *S.top;
    return OK;
}

TypeStack GetTop(SqStack S)
{
    if (S.top != S.base)
        return *(S.top - 1);
}

Status PrintStack(SqStack S)
{
    TypeStack *x = S.base;
    while (x < S.top)
    {
        cout << *x << " ";
        x++;
    }
    return OK;
}

Status somepush(SqStack &S)
{
    int num;
    int i = 0;
    TypeStack n;
    cout << "输入元素个数n,初始化栈" << endl;
    cin >> num;
    cout << "请依次输入元素:" << endl;
    while (1)
    {
        cin >> n;
        push(S, n);
        i++;
        if (i == num)
            break;
    }
}
int main()
{
    double x;
    SqStack S;
    InitStack(S);
    x = Postfix(S);
    cout << x;
    PrintStack(S);

    return 0;
}

double Postfix(SqStack &S)
{
    char data[1000];
    double num;
    int i = 0;
    char ch;
    
    int a = 0, b = 0;

    num = 0.0;
    ch = getchar();
    while (ch != '$')
    {   char data[1000]={'\0'};
        
        i = 0;
        while ((ch >= '0' && ch <= '9') || ch == '.')
        {
            data[i] = ch;
            i++;
            ch = getchar();
        }
        num = atof(data);
        push(S, num);
        switch (ch)
        {
        case ' ':
            break;
        case '+':
            Pop(S, b);
            Pop(S, a);
            push(S, a + b);
            break;
        case '-':
            Pop(S, b);
            Pop(S, a);
            push(S, a - b);
            break;
        case '*':
            Pop(S, b);
            Pop(S, a);
            push(S, a * b);
            break;
        case '/':
            Pop(S, b);
            Pop(S, a);
            push(S, a / b);
            break;
        }
        ch = getchar();
    }
    return GetTop(S);
}

 

版权声明:
作者:maple
链接:http://haut.vip/?p=145
来源:欢迎来到计服社
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
海报
习题3.4
4.从键盘上输入一个后缀表达式,试编写算法计算表达式的值。规定:后缀表达式的长度不超过一行,以“$”作为输入结束,操作数之间用空格分隔,操作符只可能有+、-……
<<上一篇
下一篇>>