第四章 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;}
阅读全文
0 0
- 第四章 ALDS1_3_A:Stack 栈
- 栈 ALDS1_3_A:Stack
- Aizu-ALDS1_3_A:Stack
- STL源码剖析_读书笔记:第四章 序列式容器 stack篇
- 第四章:javascript: 栈
- 第四章 栈
- 第四章 栈
- 第四章(栈)
- stack栈
- 栈 Stack
- STACK 栈
- 栈(stack)
- 栈 Stack
- 栈stack
- stack栈
- stack栈
- stack栈
- stack栈
- 给定任意数组获取任意连续的项求和的最大值,并输出新的数组
- 用Python建设企业认证和权限控制平台
- 数据结构实验之查找三:树的种类统计
- OSX上进行JNI开发的流程及命令
- caffe转换tensorflow工具caffe-tensorflow
- 第四章 ALDS1_3_A:Stack 栈
- svn“Previous operation has not finished; run 'cleanup' if it was interrupted“报错的解决方法
- 12月23日 周六
- SpringBoot第一个示例
- 关于MAC下安装virtual box linux 系统-主机与虚拟机互通问题
- navicat for mysql 远程连接数据库时出现2003-Can't connect to Mysql on '主机名'(10061)解决方法
- svn清理失败的解决方法
- 优先级
- Express4.x API 译文 系列文章