后缀表达式

#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define Error 0
typedef int Status;
//栈
typedef struct StackNode
{
    int data;
    struct StackNode *next;
}StackNode,*LinkStack;

Status InistStack(LinkStack &S)
{
    S=NULL;
    return OK;
}

Status Push(LinkStack &S,int e)
{
    LinkStack p;
    p=new StackNode;
    p->data=e;
    p->next=S;
    S=p;
    return OK;
}
Status Pop(LinkStack &S,int &e)
{
    LinkStack p;
    if(S==NULL)
        return Error;
    e=S->data;
    p=S;
    S=S->next;
    free(p);
    return OK;
}
Status GetTop(LinkStack S)
{
    if(S!=NULL)
        return S->data;
    return Error;
}

int main()
{

    char ass[1000];
    while(gets(ass)!=NULL)
    {
        int i,num=0;
        int flag=0;
        int left,right;
        LinkStack Q;
        InistStack(Q);
        for(i=0;;i++)
        {
            if(ass[i]=='@')
                break;
            else if(ass[i]>='0'&&ass[i]<='9')
            {
                flag=1;
                num=num*10+ass[i]-'0';
            }
            else
            {
                if(flag==1)
                {
                    Push(Q,num);
                    num=0;
                }
                if(ass[i]==' ')
                {
                    flag=0;
                    continue;
                }
                Pop(Q,right);
                Pop(Q,left);
                switch(ass[i])
                {
                    case '+':
                        Push(Q,left+right);
                        break;
                    case '-':
                        Push(Q,left-right);
                        break;
                    case '/':
                        Push(Q,left/right);
                        break;
                    case '*':
                        Push(Q,left*right);
                        break;
                }
                flag=0;
            }
        }
        Pop(Q,i);
        printf("%d",i);
    }
    return 0;
}

 

上一篇:链栈的基本实现


下一篇:链栈C++(考研数据结构)