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;
    }
  • 相关阅读:
    AlterDialog 经常使用的样式
    C++编程-&gt;pair(对组)
    arcgis server10.2.2公布地图基础服务的详细步骤
    solr实战-(一)
    iOS开发-自己定义重用机制给ScrollerView加入子视图
    Day2下午解题报告
    Day2二分图笔记
    考前冲刺班成绩
    Day2平衡树笔记
    Day2上午解题报告
  • 原文地址:https://www.cnblogs.com/1328497946TS/p/11059248.html
Copyright © 2011-2022 走看看