哈工大数据结构与算法 实验1——算术表达式求值

实验题目:算术表达式求值(算术计算器)

实验内容:

        表达式求值是实现程序设计语言的基本问题之一,也是栈的应用的一个典型例子。一个算术表达式是由操作数(operand)、运算符(operator)和界限符 (delimiter)组成的。假设操作数是正整数,运算符只含加减乘除等四种二元运算符,界限符有左右括号和表达式起始、结束符“#”,如:#(7+15)*(23-28/4)#。引入表达式起始、结束符是为了方便。设计一个程序,演示算术表达式求值的过程。

实验要求:

1. 从文本文件输入任意一个语法正确的(中缀)表达式。
2. 利用栈结构,把(中缀)表达式转换成后缀表达式,并以适当的方式展示栈的状态变化过程和所得到的后缀表达式。
3. 利用栈结构,对后缀表达式进行求值,并以适当的方式展示栈的状态变化过程和最终结果。

目录

实验题目:算术表达式求值(算术计算器)

存储结构

中缀表达式转后缀表达式

后缀表达式求值

测试结果

反思与总结

完整代码


存储结构

typedef struct stack
{
    int top;
    ElemType elements[maxlength];
}STACK;

typedef struct stack_int
{
    int top;
    Elem elements[maxlength];
}STACK_Int;

/*将栈置为空*/
void MakeNull(STACK *s)
{
    s->top=maxlength;
}

void MakeNull_Int(STACK_Int *s)
{
    s->top=maxlength;
}

/*判断是否为空,为空返回1,否则返回0*/
int Empty(STACK s)
{
    if(s.top<maxlength)
        return 0;
    else
        return 1;
}

int Empty_Int(STACK_Int s)
{
    if(s.top<maxlength)
        return 0;
    else
        return 1;
}

/*返回栈顶元素,若stack为空则返回0*/
ElemType Top(STACK s)
{
    if(Empty(s)==1)
    {
        return 0;
    }
    else
    {
        return s.elements[s.top];
    }
}

Elem Top_Int(STACK_Int s)
{
    if(Empty_Int(s)==1)
    {
        return 0;
    }
    else
    {
        return s.elements[s.top];
    }
}

void Display(STACK s)
{
    while(s.top!=maxlength)
    {
        printf("%c ",s.elements[s.top]);
        s.top++;
    }
}

void Display_Int(STACK_Int s)
{
    while(s.top!=maxlength)
    {
        printf("%d ",s.elements[s.top]);
        s.top++;
    }
}

/*删除栈顶元素*/
void Pop(STACK *s)
{
    if(Empty(*s) == 1)
    {
        printf("Stack is empty!");
    }
    else
    {
        s->top=s->top+1;
    }
}

void Pop_Int(STACK_Int *s)
{
    if(Empty_Int(*s) == 1)
    {
        printf("Stack is empty!");
    }
    else
    {
        s->top=s->top+1;
    }
}

/*将元素x压入栈顶*/
void Push(STACK *s,ElemType x)
{
    if(s->top==0)
    {
        printf("Stack is full!");
    }
    else
    {
        s->top=s->top-1;
        s->elements[s->top]=x;
    }
}

void Push_Int(STACK_Int *s,Elem x)
{
    if(s->top==0)
    {
        printf("Stack is full!");
    }
    else
    {
        s->top=s->top-1;
        s->elements[s->top]=x;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值