#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,没有()的更多相关文章

  1. 高盛昂赛 算法题先写corner case

    [方法] 字写大点,先注释框架 链表:指针走就行了,最多是两个同时一起走. 两个链表求交点 //corner case if (headA == null || headB == null) { re ...

  2. 解决HDU爆栈的问题

    转载:http://forum.byr.edu.cn/article/ACM_ICPC/51264 大家懂的,鉴于HDU用的是windows服务器,所以stack大小及其坑爹,稍微深一点的递归栈就会s ...

  3. (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 ...

  4. 给jdk写注释系列之jdk1.6容器(10)-Stack&Vector源码解析

    前面我们已经接触过几种数据结构了,有数组.链表.Hash表.红黑树(二叉查询树),今天再来看另外一种数据结构:栈.      什么是栈呢,我就不找它具体的定义了,直接举个例子,栈就相当于一个很窄的木桶 ...

  5. 5 手写Java Stack 核心源码

    Stack是Java中常用的数据结构之一,Stack具有"后进先出(LIFO)"的性质. 只能在一端进行插入或者删除,即压栈与出栈 栈的实现比较简单,性质也简单.可以用一个数组来实 ...

  6. 遇到了IAR烧写程序出错,附解决办法The stack plug-in failed to set a breakpoint on "main"

    今天做无线串口调试的时候用IAR7.51往CC2530无线模块烧程序的时候遇到了问题: 先是下载过程中有许多警告,然后就是提示无法跳断点,找不到main方法,每次烧程序都出现: The stack p ...

  7. Infix to postfix 用stack模板,表达式没有括号

    #include<stack> #include<iostream> #include<string> using namespace std; //优先级判断 c ...

  8. 手写代码注意点--java.util.Stack相关

    1-Stack的基本函数为: 注意: 取栈顶的函数为peek(),不是top()... 测试stack是否为空的函数为empty(),不是isEmpty()...

  9. 如何仅用递归函数和栈操作逆序一个栈——你要先用stack实现,再去改成递归——需要对递归理解很深刻才能写出来

    /** * 如何仅用递归函数和栈操作逆序一个栈 * 题目: * 一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1. * 将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就 ...

随机推荐

  1. 第13章 MySQL高级编程

    1.事务:一个或一系列的查询: 2.使用事务安全的表格类型(通过InnoDB): ①关闭自动提交: set autocommit=0; //若自动提交被打开,须使用如下语句开始一个事务: //  st ...

  2. leetcode 024

    Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2-&g ...

  3. 关于mysql 5.6.24 的my.ini配置问题

  4. ios在项目中打开word文档、ppt等总结

    最近在项目开发中遇到下载附件文档预览需求,在这里总结一下我的实现方法,本文最后会附带我写的demo下载地址 这里我总结了三种实现方法(1)用webView预览(2)通过UIDocumentIntera ...

  5. python3 验证用户名密码

    输入用户名,密码,匹配通过,不匹配报错 import getpass user = input('input username: ') pwd = getpass.getpass('input pas ...

  6. tomcat配置https方法

    利用tomcat服务器配置https双向认证 步骤 1.为服务器生成证书进入控制台,切换到%JAVA_HOME%/bin目录,具体操作略. 使用keytool为Tomcat生成证书,假定目标机器的域名 ...

  7. js得到当前页面的url信息方法

    js得到当前页面的url信息方法:http://www.cnblogs.com/zuosong160522/p/5755615.html js获取url传递参数,js获取url?后面的参数:http: ...

  8. Python学习笔记——基础篇【第六周】——面向对象

    Python之路,Day6 - 面向对象学习 本节内容:   面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法.       同时可参考链接: http:// ...

  9. 基于AFN的多张图片上传

    不废话,直接上代码 NSString *urlString = [NSString stringWithFormat:@"http://192.168.1.166:8080/Discipli ...

  10. unity笔录

    ----------------------------unity项目在启动splash的时候黑屏 原因不明------------------测试复制项目  用剔除法测试 笔录开始 先用原版本打包 ...