zoukankan      html  css  js  c++  java
  • 中缀表达

    #include<stdio.h>
    #include<stdlib.h>
    #define OK 1
    #define Error 0
    typedef int Status;
    //ջ
    typedef struct StackNode
    {
        char a;
        struct StackNode *next;
    }StackNode,*LinkStack;
    
    Status IniStack(LinkStack &S)
    {
        S=NULL;
        return OK;
    }
    
    Status Isempty(LinkStack &S)
    {
        if(S!=NULL)
            return Error;
        return OK;
    }
    
    Status Push(LinkStack &S,char e)
    {
        LinkStack p;
        p=new StackNode;
        p->a=e;
        p->next=S;
        S=p;
        return OK;
    }
    Status Pop(LinkStack &S,char &e)
    {
        LinkStack p;
        if(S==NULL)
            return Error;
        e=S->a;
        p=S;
        S=S->next;
        free(p);
        return OK;
    }
    char GetTop(LinkStack S)
    {
        if(S!=NULL)
            return S->a;
        return Error;
    }
    
    int pp(char a)
    {
        if(a=='/'||a=='*')
            return 1;
        return 0;
    }
    
    
    int main()
    {
        char ass[400];
        LinkStack Q;
        int i;
        char k;
        IniStack(Q);
        gets(ass);
        for(i=0;;i++)
        {
            if(ass[i]=='')
                break;
            else if(ass[i]>='A'&&ass[i]<='Z')//alp
                printf("%c",ass[i]);
            else if(ass[i]=='(')//Z
                Push(Q,ass[i]);
            else if(ass[i]==')')//Y
            {
                int l;
                for(l=0;;l++)
                {
                    Pop(Q,k);
                    if(k=='(')
                        break;
                    else
                        printf("%c",k);
                }
            }
            else
            {
                if(Isempty(Q)==1)
                    Push(Q,ass[i]);
                else
                {
                    int j;
                    for(j=0;;j++)
                    {
                        if(Isempty(Q)==0)
                        {
                            k=GetTop(Q);
                            if(pp(ass[i])<=pp(k)&&k!='(')
                            {
                                Pop(Q,k);
                                printf("%c",k);
                                continue;
                            }
                            else
                            {
                                Push(Q,ass[i]);
                                break;
                            }
                        }
                        Push(Q,ass[i]);
                        break;
                    }
                }
            }
        }
        while(Isempty(Q)==0)
        {
            Pop(Q,k);
            printf("%c",k);
        }
        return 0;
    }
  • 相关阅读:
    Jenkins历史构建作业jobs的删除与管理
    Redis消息队列与主流的消息队列中间件对比
    GDAL数据模型
    Android的语言切换
    GDAL驱动实现向导
    Win7 安装IIS
    局域网中其他机器不能访问本机IIS网站
    DXF库(dxflib)使用指南
    GDAL中文学习资料
    QT的中文站址
  • 原文地址:https://www.cnblogs.com/1328497946TS/p/11059248.html
Copyright © 2011-2022 走看看