后缀算法
#include<iostream>
using namespace std;
#include<malloc.h>
#include<stdio.h>
#define MaxSize 50
typedef struct{
char data[MaxSize];
int top;
}A;
void InitStack(A *&L)
{
L=(A *)malloc(sizeof(A));
L->top=-1;
}
void DestoryStack(A *&L)
{
free(L);
}
bool StackEmpty(A *L)
{
return (L->top == -1);
}
bool Push(A *&L,char e)
{
if(L->top==MaxSize-1)
return false;
else
L->top++;
L->data[L->top]=e;
return true;
}
bool Pop(A *&L,char &e)
{
if(L->top==-1)
return false;
else
{
e=L->data[L->top];
L->top--;
return true;
}
}
bool GetTop(A *L,char &e)
{
if(L->top==-1)
return false;
else
{
e=L->data[L->top];
return true;
}
}
void trans(char *exp,char postexp[])
{
char e;
A *Optr;
InitStack(Optr);
int i = 0;
while(* exp!='\0')
{
switch(* exp)
{
case '(':
Push(Optr,'(');
exp++;
break;
case ')':
Pop(Optr,e);
while(e!='(')
{
postexp[i++]=e;
Pop(Optr,e);
}
exp++;
break;
case '+':
case '-':
while(!StackEmpty(Optr))
{
GetTop(Optr,e);
if(e!='(')
{
postexp[i++]=e;
Pop(Optr,e);
}
else
break;
}
Push(Optr,*exp);
exp++;
break;
case '*':
case '/':
while(!StackEmpty(Optr))
{
GetTop(Optr,e);
if(e=='*'||e=='/')
{
postexp[i++]=e;
Pop(Optr,e);
}
else
break;
}
Push(Optr,*exp);
exp++;
break;
default:
while(* exp>='A'&&*exp<='Z')
{
postexp[i++]=*exp;
exp++;
}
//postexp[i++]='#';
}
}
while(!StackEmpty(Optr))
{
Pop(Optr,e);
postexp[i++]=e;
}
postexp[i]='\0';
DestoryStack(Optr);
}
/*
void Display(char a[])
{
for(int i=0;a[i]!='#';i++)
{
cout<<a[i]<<endl;
}
}
*/
int main()
{
char exp[50],postexp[MaxSize];
char h;
for(int i=0;i<50;i++)
{
h=getchar();
if(h=='#')
{
exp[i]='\0';
break;
}
else
{
exp[i]=h;
}
}
trans(exp,postexp);
//Display(postexp);
printf("%s\n",postexp);
return 0;
}
- Leetcode 279. Perfect Squares
- Leetcode 278. First Bad Version
- Leetcode 275. H-Index II
- Leetcode 274. H-Index
- 值得 .NET 开发者了解的15个特性
- Angular和Vue.js 深度对比
- 前端开发者常用的9个JavaScript图表库
- 1000多个项目中的十大JavaScript错误以及如何避免
- SoapUI实践:自动化测试、压力测试、持续集成
- 如何把kotlin+spring boot开发的项目部署在tomcat上
- 使用开源项目Alipay.AopSdk.Core完成支付宝网页登录
- vhost-user 简介
- 把玩爬虫框架Gecco
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(55)-Web打印
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 和同事谈谈Flood Fill 算法
- 【每周一库】 img_hash,rust下的pHash算法库
- 【Rust日报】2020-08-29 生产环境 Rust 序列化库的选择
- 【投稿】刀哥:Rust学习笔记 5
- Python测试开发django3.视图和URL配置
- 【Rust日报】2020-08-31 easy_rust 正式完成了
- Python测试开发django4.templates模板配置
- Python测试开发django5.templates模板变量传参
- 在 CLion 中创建基于 CubeMX 的 STM32 工程
- 【Rust日报】 2020-09-03 Google - XLS 加速硬件合成
- 算法篇:栈之常见题型
- 算法篇:栈之字符串相关题目
- redis的安装与启动以及注意事项
- 算法篇:利用map求数组交集
- 分布式锁:一、基础知识