Infix to posfix 自己写stack,没有()
#include<iostream>
#include<string>
using namespace std; template<typename Type>
struct Node
{
Type data;
Node<Type>*next;
}; template<typename Type>
class Stack
{
private:
Node<Type>*head;
public:
//构造函数
Stack()
{
head = new Node<Type>;
head->next = NULL;
}
//析构函数
~Stack()
{
delete head;
}
//判空
bool isEmpty()
{
if (head->next == NULL)
return true;
return false;
} //入栈
void push(Type item)
{
Node<Type>*p = new Node<Type>;
p->data = item;
p->next = head;
head = p;
} //出栈
void pop()
{
if (isEmpty())
return;
else
{
Node<Type>*p = head;
head = p->next;
delete p;
}
} //取栈顶
char top()
{
return head->data;
}
}; //优先级判断
char compare(char opt, char si)
{
if ((opt == '+' || opt == '-') && (si == '*' || si == '/'))
return '<';
else if (opt == '#')
return '<';
return '>';
} //判断是否为运算符
bool isOp(char c)
{
if (c == '+' || c == '-' || c == '*' || c == '/')
return true;
return false;
} int main()
{
Stack<char>op;
Stack<char>num;
op.push('#');
num.push('#'); string s;
cin >> s; for (int i = 0; i<s.size(); i++)
{
if (!isOp(s[i]))
num.push(s[i]);
else
{
char c = compare(op.top(), s[i]);
if (c == '<')
op.push(s[i]);
else
{
num.push(op.top());
op.pop();
op.push(s[i]);
}
}
} while (op.top() != '#')
{
num.push(op.top());
op.pop();
} string s1 = ""; while (num.top() != '#')
{
s1 = s1 + num.top();
num.pop();
} for (int i = 0; i<s1.size() / 2; i++)
{
char temp = s1[i];
s1[i] = s1[s1.size() - 1 - i];
s1[s1.size() - 1 - i] = temp;
} cout << s1 << endl; return 0;
}
Infix to posfix 自己写stack,没有()的更多相关文章
- 高盛昂赛 算法题先写corner case
[方法] 字写大点,先注释框架 链表:指针走就行了,最多是两个同时一起走. 两个链表求交点 //corner case if (headA == null || headB == null) { re ...
- 解决HDU爆栈的问题
转载:http://forum.byr.edu.cn/article/ACM_ICPC/51264 大家懂的,鉴于HDU用的是windows服务器,所以stack大小及其坑爹,稍微深一点的递归栈就会s ...
- (hdu step 8.1.1)ACboy needs your help again!(STL中栈和队列的基本使用)
题目: ACboy needs your help again! Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- 给jdk写注释系列之jdk1.6容器(10)-Stack&Vector源码解析
前面我们已经接触过几种数据结构了,有数组.链表.Hash表.红黑树(二叉查询树),今天再来看另外一种数据结构:栈. 什么是栈呢,我就不找它具体的定义了,直接举个例子,栈就相当于一个很窄的木桶 ...
- 5 手写Java Stack 核心源码
Stack是Java中常用的数据结构之一,Stack具有"后进先出(LIFO)"的性质. 只能在一端进行插入或者删除,即压栈与出栈 栈的实现比较简单,性质也简单.可以用一个数组来实 ...
- 遇到了IAR烧写程序出错,附解决办法The stack plug-in failed to set a breakpoint on "main"
今天做无线串口调试的时候用IAR7.51往CC2530无线模块烧程序的时候遇到了问题: 先是下载过程中有许多警告,然后就是提示无法跳断点,找不到main方法,每次烧程序都出现: The stack p ...
- Infix to postfix 用stack模板,表达式没有括号
#include<stack> #include<iostream> #include<string> using namespace std; //优先级判断 c ...
- 手写代码注意点--java.util.Stack相关
1-Stack的基本函数为: 注意: 取栈顶的函数为peek(),不是top()... 测试stack是否为空的函数为empty(),不是isEmpty()...
- 如何仅用递归函数和栈操作逆序一个栈——你要先用stack实现,再去改成递归——需要对递归理解很深刻才能写出来
/** * 如何仅用递归函数和栈操作逆序一个栈 * 题目: * 一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1. * 将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就 ...
随机推荐
- (转)GBDT迭代决策树理解
在网上看到一篇对从代码层面理解gbdt比较好的文章,转载记录一下: GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Re ...
- MySQL中的事务
MySQL中的事务性: MySQL的InnoDB引擎是支持事务性的,事务是由多条SQL语句组成,是一个连续的一组数据库操作.只有该组内的每一个操作都成功时,整个事务才执行成功.(例如银行转账操作,只有 ...
- 网络爬虫之定向爬虫:爬取当当网2015年图书销售排行榜信息(Crawler)
做了个爬虫,爬取当当网--2015年图书销售排行榜 TOP500 爬取的基本思想是:通过浏览网页,列出你所想要获取的信息,然后通过浏览网页的源码和检查(这里用的是chrome)来获相关信息的节点,最后 ...
- svn用Cornerstone上传项目丢失静态库.a问题的解决
最近电脑重装系统后,装上Cornerstone上传项目后,发现又有丢失.a文件的问题,这里说一下解决办法,打开Preferences-->Subversion-->General,将Use ...
- js中访问action
jsp中 <a href="javascript:Excel();" class="easyui-linkbutton" plain="true ...
- Java中集合框架体系
集合的体系结构: |--Collection(单列集合的根接口) |--List(子接口):元素是有序的,元素可以重复.因为该集合体系有索引. |--A ...
- Defraggler(磁盘整理软件) V2.21.993 绿色版
软件名称: Defraggler(磁盘整理软件) 软件语言: 简体中文 授权方式: 免费软件 运行环境: Win 32位/64位 软件大小: 5.0MB 图片预览: 软件简介: Defraggler ...
- Rosenbrock function
w测试最优化算法性能可通过其. https://en.wikipedia.org/wiki/Rosenbrock_function https://zh.wikipedia.org/wiki/Rose ...
- Hibernate5-课程笔记4
单表查询: Hibernate是DAO层技术,对数据的使用,查询是最为重要的.Hibernate的查询技术非常强大,支持原始SQL语句查询,支持QBC查询及Hibernate特有的HQL查询. H ...
- 安卓activity之间值共享解决办法,tabhost之间共享父类值,字符串类型的转换,获取每一个listview的item
1.tabhost父类值共享的解决办法 dianzhanliebiao.java是传值页面,zhuyemian.java放的是tabhost,dianzhangaikuang.java是tabhost ...