第四章 ALDS1_3_A:Stack 栈

来源:互联网 发布:如何获取阿里云优惠码 编辑:程序博客网 时间:2024/06/16 16:24

知识点

  • 规则:后入先出(Last In First Out)
  • 基本操作:
    • push(x):在栈顶部添加元素x
    • pop():在栈顶部取出元素
    • isEmpty():检查栈是否为空
    • isFull():检查栈是否已满
  • STL中的stack类的成员函数,都是O(1)操作
    • size():返回栈的元素数
    • top():返回栈顶的元素
    • pop():从栈中取出并删除元素
    • push(x):向栈中添加元素x
    • empty(): 在栈为空时返回true

题目链接

ALDS1_3_A:Stack

题目内容

输出逆波兰表示法的算式的结果

思路

利用栈的结构特点去实现算法。若遇到数字,则将其压入栈;若是运算符,则取出栈顶部的两个元素进行计算,然后将结果压入到栈顶继续执行算式,直到算出结果

代码

实现栈的功能

#include<iostream>#include<cstdio>using namespace std;// 实现栈的功能// top是指向栈顶的指针, s是实现栈结构的数组int top, S[1000];// 将x压入栈的操作void push(int x) {    // top加1之后将元素插入到top所指的位置    S[++top] = x;}// 将栈顶元素返回并删除int pop() {    top--;    return S[top + 1];}// 字符转数字int CharToInt(char s[]) {    int ans = 0, i = 0;    while (s[i] != '\0') {        ans = ans * 10 + s[i] - '0';        i++;    }    return ans;}int main() {    char s[1000];    int a, b;    // 清空栈    top = 0;     while(scanf("%s",s)!=EOF){            if (s[0] == '+') {                b = pop();a = pop();                push(a + b);            }else if (s[0] == '-') {                b = pop(); a = pop();                push(a - b);            }else if (s[0] == '*') {                b = pop(); a = pop();                push(a * b);            }else {                push(CharToInt(s));            }    }    printf("%d\n",pop());    return 0;}

利用STL的stack类

 #include<iostream>#include<cstdio>#include<stack>using namespace std;// 字符转数字int CharToInt(char s[]) {    int ans = 0, i = 0;    while (s[i] != '\0') {        ans = ans * 10 + s[i] - '0';        i++;    }    return ans;}int main() {    char s[1000];    int a, b;    stack<int> S;    while(scanf("%s",s)!=EOF){            if (s[0] == '+') {                b = S.top(); S.pop();                a = S.top(); S.pop();                S.push(a + b);            }else if (s[0] == '-') {                b = S.top(); S.pop();                a = S.top(); S.pop();                S.push(a - b);            }else if (s[0] == '*') {                b = S.top(); S.pop();                a = S.top(); S.pop();                S.push(a * b);            }else {                S.push(CharToInt(s));            }    }    printf("%d\n", S.top());    return 0;}
原创粉丝点击