• 大小: 5KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2023-01-28
  • 语言: C/C++
  • 标签: c++  哈工大  

资源简介

中缀表达式转化成后缀表达式并计算C++实现

资源截图

代码片段和文件信息

/*通过栈的方式实现中缀表达式转化成后缀表达式
  通过栈的方式实现后缀表达式的计算
  计算表达式数字可以为正整数和正小数*/
#include 
#define Max 100000
using namespace std;
struct node1
{
    char val;
    node1 * next;
};
typedef node1 * STACK1;
typedef char Elementtype1;
void MakeNull1 (STACK1 &S)
{
    S=new node1;
    S->next=NULL;
}
void Push1 ( Elementtype1 x STACK1 &S)
{
    STACK1 stk;
    stk=new node1;
    stk->val=x;
    stk->next=S->next;
    S->next=stk;
}
void Pop1 ( STACK1 &S)
{
    STACK1 stk;
    if ( S->next )
    {
        stk=S->next;
        S->next=stk->next;
        delete stk;
    }
}
char Top1 (STACK1 S)
{
    if (S->next)
        return(S->next->val);
    else
        return NULL;
}
bool Empty1(STACK1 S)
{
    if (S->next)
        return false;
    else
        return true;
}


struct node2
{
    float val;
    node2 * next;
};
typedef node2 * STACK2;
typedef float Elementtype2;
void MakeNull2 (STACK2 &S)
{
    S=new node2;
    S->next=NULL;
}
void Push2 ( Elementtype2 x STACK2 &S)
{
    STACK2 stk;
    stk=new node2;
    stk->val=x;
    stk->next=S->next;
    S->next=stk;
}
void Pop2 ( STACK2 &S)
{
    STACK2 stk;
    if ( S->next )
    {
        stk=S->next;
        S->next=stk->next;
        delete stk;
    }
}
float Top2 (STACK2 S)
{
    if (S->next)
        return(S->next->val);
    else
        return NULL;
}
bool Empty2(STACK2 S)
{
    if (S->next)
        return false;
    else
        return true;
}
void change (char a[] char b[])//将中缀表达式转化成后缀表达式
{
    STACK1 s;
    MakeNull1 (s);
    int i=0 j=0;
    while (a[i]!=‘\0‘)
    {

        if ((a[i]>=‘0‘&&a[i]<=‘9‘)||a[i]==‘.‘)
        {
            b[j]=a[i];
            j++;
        }
        else
        {
            b[j]=‘ ‘;
            j++;
            if (a[i]==‘(‘)
            {
                Push1(a[i] s);
            }
            else if (a[i]==‘)‘)
            {
                while (Top1(s)!=‘(‘)
                {
                    b[j]=Top1(s);
                    Pop1(s);
                    j++;
                }
                Pop1(s);
            }
            else if (a[i]==‘*‘||a[i]==‘/‘)
            {
                while (Top1(s)!=‘(‘&&!Empty1(s)&&To

评论

共有 条评论