zoukankan      html  css  js  c++  java
  • 栈的应用---用栈计算逆波兰表达式

    #include<stdio.h>
    #include<stdlib.h>
    struct Node;
    typedef struct Node *PtrToNode;
    typedef PtrToNode Stack;
    
    struct Node{
        int Ele;
        PtrToNode Next;
    };
    
    Stack
    CreateStack( void )
    {
        Stack S;
        S = malloc( sizeof( struct Node ) );
        if(S == NULL )
            printf("out of space");
        S->Next = NULL;
        return S;
    }
    void
    Push(int ch,Stack S)
    {
        PtrToNode TmpCell;
        TmpCell = malloc(sizeof( struct Node ));
        if(TmpCell == NULL)
            printf("out of space ");
        else
        {
            TmpCell->Next = S->Next;
            S->Next = TmpCell;
            TmpCell->Ele = ch;
        }
    }
    int
    IsEmpty(Stack S)
    {
        return S->Next == NULL;
    }
    void
    Pop( Stack S )
    {
        PtrToNode TmpCell;
        TmpCell = S->Next;
        S->Next = TmpCell->Next;
        free(TmpCell);
    }
    int
    Top( Stack S )
    {
        return S->Next->Ele;
    }
    
    int main()
    {
        char Tmp;
        int val1,val2,fin;
        Stack S;
        S = CreateStack();
        while( ( Tmp = getchar() ) != '
    ' )
        {
            if(Tmp == ' ')
                continue;
            if(Tmp >= '0' && Tmp <= '9')
                Push( Tmp - '0',S );
            else if(Tmp == '+')
            {
                val1 = Top( S );
                Pop( S );
                val2 = Top( S );
                Pop( S );
                fin = val1 + val2;
                Push(fin, S );
            }
            else if( Tmp == '-' )
            {
                val1 = Top( S );
                Pop( S );
                val2 = Top( S );
                Pop( S );
                fin = val1 - val2;
                Push(fin, S );
            }
            else if( Tmp == '*' )
            {
                val1 = Top( S );
                Pop( S );
                val2 = Top( S );
                Pop( S );
                fin = val1 * val2;
                Push(fin, S );
            }
            else
            {
                val1 = Top( S );
                Pop( S );
                val2 = Top( S );
                Pop( S );
                fin = val1 / val2;
                Push(fin, S );
            }
        }
        printf("%d",Top( S ));
        return 0;
    }
    View Code

    算法思想:遇到数字就进栈,遇到+ - * / 就出栈两个元素计算,再压入栈中

  • 相关阅读:
    mysql 卸载 linux
    mybatis教程
    Python操作Redis的5种数据类型
    python+selenium 浏览器无界面模式运行
    关闭Sublime Text 3的自动更新
    ui自动化-则神第一天02-学习练习一个网址写脚本
    ui自动化-则神第一天01-html基础和元素定位之面试问题
    ui自动化-则神第一天01
    字典的学习
    安全测试的测试整理
  • 原文地址:https://www.cnblogs.com/gabygoole/p/4616325.html
Copyright © 2011-2022 走看看