栈系列(洛谷刷题记录)

语言:C语言 由于clion会自动加上return,所以有时候可能没写……

P1449 

题目描述:

所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。

如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@。’@’为表达式的结束符号。‘.’为操作数的结束符号。

题解如下: 

//
// Created by Lee on 2022/2/1.
//main16
//
//用数组模拟栈
#include <stdio.h>
long array[10000];
int p;//栈顶指针
int temp;//存临时数
char ch;
int main(){
    while((ch=getchar())!='@'){
        if(ch>='0'&&ch<='9'){
            temp = temp * 10 + ch -'0';
        }
        else if(ch=='.'){
            array[p++] = temp;
            temp = 0;//一定要注意归零,否则下一次temp会用这一次的继续往上加
        }
        else if(ch=='+'){
            int a = array[p-2];
            int b = array[p-1];
            p -= 2;
            int c = a+b;
            array[p++] = c;
        }
        else if(ch=='-'){
            int a = array[p-2];
            int b = array[p-1];
            p -= 2;
            int c = a-b;
            array[p++] = c;
        }
        else if(ch=='*'){
            int a = array[p-2];
            int b = array[p-1];
            p -= 2;
            int c = a*b;
            array[p++] = c;
        }
        else if(ch=='/'){
            int a = array[p-2];
            int b = array[p-1];
            p -= 2;
            float c = a/b;
            array[p++] = c;
        }
    }
    printf("%d",array[0]);
    return 0;
}

本题需要注意的地方:

1. 数字不一定只有一位。需要根据 '.' 来判断一个数字到底有几位。

2. 栈顶指针 p 其实是指向栈顶元素的再上面一位,即array[p-1]才是栈顶元素。取数的时候需要注意。

3. 除法的运算结果向下取整。这一点题目好像没表述清楚,但是自己要注意,因为我之前用float错了。

上一篇:做题记录 牛客寒假基础训练3-I


下一篇:LeetCode算法入门之二分查找—704、二分查找