/*
* POJ_2106.cpp
*
* Created on: 2013年10月30日
* Author: Administrator
*/ #include <iostream>
#include <cstdio> using namespace std; const int maxn = 110; int op[maxn], otop;
int val[maxn],vtop; void insert(int b){//将操作数b压入操作数栈val
while(otop && op[otop - 1] == 3){//在压入之前对b进行!运算
b = !b;
--otop;
} val[vtop++] = b;
} void calc(){//进行双目运算
int b = val[--vtop];
int a = val[--vtop];
int opr = op[--otop]; int c = (a&b);//默认进行&运算
if(opr == 1){//如果运算符为|
c = a|b;
} insert(c);
} int main(){
char c; int counter = 1;
while((c = getchar()) != EOF){//要理解并记住这种形式的输入输出处理
otop = 0;
vtop = 0; do{
if( c == '('){
op[otop++] = 0;
}else if(c == ')'){//处理)内的所有运算,结果压入val栈
while(otop && op[otop - 1] != 0){//只要没有遇到匹配的(,就继续进行运算
calc();
}
--otop;
insert(val[--vtop]);
}else if(c == '!'){
op[otop++] = 3;
}else if(c == '&'){
while(otop && op[otop - 1] >= 2){//将op栈中所有优先级比&的运算符出栈进行运算
calc();
} op[otop++] = 2;//将&压入op栈
}else if(c == '|'){
while(otop && op[otop - 1] >= 1){
calc();
} op[otop++] = 1;
}else if(c == 'V' || c == 'F'){
insert(c == 'V'?1:0);
}
}while((c = getchar()) != '\n' && c != EOF); while(otop){//将op栈中的所有元素出栈进行运算
calc();
} printf("Expression %d: ",counter++);
printf(val[0]?"V":"F");
printf("\n");
} return 0;
}

(栈的应用5.2.2)POJ 2106 Boolean Expressions(表达式求值)的更多相关文章

  1. POJ 2106 Boolean Expressions (布尔表达式求值)

    题意:关于!,&,| 的运算,表达式中V代表true,F代表false. 思路:见代码吧,很详细了. 要注意 !!!F,!(...) 的情况. #include <iostream> ...

  2. POJ 2106 Boolean Expressions

    总时间限制: 1000ms  内存限制: 65536kB 描述 The objective of the program you are going to produce is to evaluate ...

  3. [poj 2106] Boolean Expressions 递归

    Description The objective of the program you are going to produce is to evaluate boolean expressions ...

  4. poj 2106 Boolean Expressions 课本代码

    #include<cstdio> const int maxn=100 +10; int val[maxn],vtop; int op[maxn],otop; void insert(in ...

  5. 数据结构算法C语言实现(八)--- 3.2栈的应用举例:迷宫求解与表达式求值

    一.简介 迷宫求解:类似图的DFS.具体的算法思路可以参考书上的50.51页,不过书上只说了粗略的算法,实现起来还是有很多细节需要注意.大多数只是给了个抽象的名字,甚至参数类型,返回值也没说的很清楚, ...

  6. 利用栈实现算术表达式求值(Java语言描述)

    利用栈实现算术表达式求值(Java语言描述) 算术表达式求值是栈的典型应用,自己写栈,实现Java栈算术表达式求值,涉及栈,编译原理方面的知识.声明:部分代码参考自茫茫大海的专栏. 链栈的实现: pa ...

  7. 数据结构--栈的应用(表达式求值 nyoj 35)

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=35 题目: 表达式求值 时间限制:3000 ms | 内存限制:65535 KB描述 AC ...

  8. 【NYOJ-35】表达式求值——简单栈练习

    表达式求值 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min ...

  9. 表达式求值 (栈) 用C++实现

    #include <cstdio> #include <cstdlib> #include <cmath> #include <stack> #incl ...

随机推荐

  1. 关于ajax的异步通信之异步

    我有这样一个js函数 function add (){ $ajax({ url:"xxxxxx", data:""xxxxx", dataType:& ...

  2. TTL和CMOS

    reprint from:http://blog.csdn.net/hemeinvyiqiluoben/article/details/9253249 TTL和COMS电平匹配以及电平转换的方法 一. ...

  3. LintCode Kth Largest Element

    原题链接在这里:http://www.lintcode.com/en/problem/kth-largest-element/# 在LeetCode上也有一道,采用了标准的quickSelect 方法 ...

  4. channelartlist添加栏目链接

    {dede:channelartlist} <a href='{dede:field name='typeurl'/}'></a> {/dede:channelartlist}

  5. python笔记 - day5

    python笔记 - day5 参考: http://www.cnblogs.com/wupeiqi/articles/5484747.html http://www.cnblogs.com/alex ...

  6. yaffs文件系统

    1. 概述yaffs文件系统专为Nandflash设计的日志文件系统,占用page中oob区域.目前有两个版本的yaffs文件系统.nandflash不可靠,存在坏块,存在数据错误,需要软件弥补纠正此 ...

  7. Spring Boot flyway的启动时机比较早

    flyway,如果已经创建的版本V1中已经更新,则会validation报错 at org.springframework.boot.devtools.restart.RestartLauncher. ...

  8. Java基础之一组有用的类——使用正则表达式查找和替换(SearchAndReplace)

    控制台程序. 使用正则表达式执行查找和替换操作,只需要调用Matcher对象的find()方法,就可以调用appendReplacement()方法来替换匹配的子序列.在提供给方法的新StringBu ...

  9. 错过C++

    曾相识的C++--2008年那是还在学校,接触到了这门语言,可遗憾的是当时,自己没有能静下心好好学习这门语言.所以相识了了半年的c++就这样不见. 如今又相逢,但已经感觉到很陌生,陌生的我们互补相认.

  10. 转:python webdriver API 之 获取对象的属性

    获取测试对象的属性能够帮我们更好的进行对象的定位.比如页面上有很多标签为 input 元素,而我们需要定位其中 1 个有具有 data-node 属性不一样的元素.由于 webdriver 是不支持直 ...