SDUT-2133_数据结构实验之栈与队列三:后缀式求值
数据结构实验之栈与队列三:后缀式求值
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值。
Input
输入一个算术表达式的后缀式字符串,以‘#’作为结束标志。
Output
求该后缀式所对应的算术表达式的值,并输出之。
Sample Input
59*684/-3*+#
Sample Output
57
Hint
基本操作数都是一位正整数!
简单的后缀表达式求值,也告诉了我们为什么会转化成后缀,严格按照从左往右进行就可以了。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node
{
int data;
struct node *next;
}Node;
typedef struct stack
{
Node *base,*top;
}Stack;
Node *newnode()
{
Node *t;
t = (Node *)malloc(sizeof(Node));
t->next = NULL;
return t;
};
Stack *Newstack()
{
Stack *t;
t = (Stack *)malloc(sizeof(Stack));
t->top = newnode();
t->base = t->top;
return t;
}
void push(Stack *t,int x)
{
Node *p = newnode();
p->data = x;
p->next = t->top->next;
t->top->next = p;
t->base = p;
}
int top(Stack *t)
{
return t->top->next->data;
}
void pop(Stack *t)
{
Node *p;
p = t->top->next;
t->top->next = t->top->next->next;
free(p);
}
int empty(Stack *t)
{
if(t->top->next==NULL)
return 1;
return 0;
}
int main()
{
Stack *t;
char s[100050];
int i;
scanf("%s",s);
t = Newstack();
for(i=0;s[i]!='#';i++)
{
if(s[i]>='0'&&s[i]<='9')
push(t,s[i] - '0');
else
{
int a,b;
a = top(t);
pop(t);
b = top(t);
pop(t);
if(s[i]=='+')
push(t,a+b);
else if(s[i]=='-')
push(t,b-a);
else if(s[i]=='*')
push(t,a*b);
else if(s[i]=='/')
push(t,b/a);
}
}
printf("%d\n",top(t));
return 0;
}
线性表
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Stack
{
int *top,*base;
}Stack;
Stack newStack()
{
Stack t;
t.top = (int *)malloc(100050*sizeof(int));
t.base = t.top;
return t;
}
void push(Stack *t,int x)
{
*(t->top++) = x;
}
int top(Stack t)
{
return *(t.top-1);
}
void pop(Stack *t)
{
t->top--;
}
int Empty(Stack t)
{
if(t.top==t.base)
return 1;
return 0;
}
int main()
{
char s[100050];
int i,a,b;
Stack t;
t = newStack();
scanf("%s",s);
for(i=0;s[i]!='#';i++)
{
if(s[i]>='0'&&s[i]<='9')
push(&t,s[i] - '0');
else
{
a = top(t);
pop(&t);
b = top(t);
pop(&t);
if(s[i]=='+')
push(&t,a+b);
else if(s[i]=='*')
push(&t,a*b);
else if(s[i]=='-')
push(&t,b-a);
else if(s[i]=='/')
push(&t,b/a);
}
}
printf("%d\n",top(t));
return 0;
}
SDUT-2133_数据结构实验之栈与队列三:后缀式求值的更多相关文章
- 数据结构实验之栈与队列三:后缀式求值(SDUT 2133)
题解:把每一步计算的答案再存在栈里面,直到计算结束. 如果是操作数 那么直接入栈:如果是运算符,那么把栈里面最顶部的两个操作数拿出来进行运算,运算结果再放入到栈里面,计算完所有的(#之前的长度位len ...
- SDUT-2088_数据结构实验之栈与队列十一:refresh的停车场
数据结构实验之栈与队列十一:refresh的停车场 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description refresh最近发 ...
- SDUT-2449_数据结构实验之栈与队列十:走迷宫
数据结构实验之栈与队列十:走迷宫 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个由n * m 个格子组成的迷宫,起 ...
- SDUT-1479_数据结构实验之栈与队列九:行编辑器
数据结构实验之栈与队列九:行编辑器 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个简单的行编辑程序的功能是:接受用 ...
- SDUT-3335_数据结构实验之栈与队列八:栈的基本操作
数据结构实验之栈与队列八:栈的基本操作 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 堆栈是一种基本的数据结构.堆栈具 ...
- SDUT-3334_数据结构实验之栈与队列七:出栈序列判定
数据结构实验之栈与队列七:出栈序列判定 Time Limit: 30 ms Memory Limit: 1000 KiB Problem Description 给一个初始的入栈序列,其次序即为元素的 ...
- SDUT-3332&3333_数据结构实验之栈与队列五:下一较大值
数据结构实验之栈与队列六:下一较大值 Time Limit: 150 ms Memory Limit: 8000 KiB Problem Description 对于包含n(1<=n<=1 ...
- SDUT-2134_数据结构实验之栈与队列四:括号匹配
数据结构实验之栈与队列四:括号匹配 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给你一串字符,不超过50个字符,可能 ...
- SDUT-2132_数据结构实验之栈与队列二:一般算术表达式转换成后缀式
数据结构实验之栈与队列二:一般算术表达式转换成后缀式 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运 ...
随机推荐
- [jnhs]未完待续HttpServletRequest示例
uri: /kaihu/showip.html method: GET QueryString: null Parameters: Headers: Name: host Value: localho ...
- cmake how to create vs file filters
用cmakelists构建出来的工程,没有文件filters,可采用如下方法解决 set(SOURCE_LIST "lotteryTicket.cpp" "stdafx. ...
- LINUX访问文件配置
访问文件 /etc/host.conf 告诉网络域名服务器如何查找主机名.(通常是 /etc/hosts,然后就是名称服务器:可通过 netconf 对其进行更改) /etc/hosts 包含(本地网 ...
- Django项目:CRM(客户关系管理系统)--14--06PerfectCRM实现King_admin注册功能获取内存优化处理
<th >{% get_app_name admin_class.model %}{{ admin_class }} </th> #kingadmin_tags.py # —— ...
- node中__dirname、__filename表示的路径
__dirname 表示当前文件所在的目录的绝对路径__filename 表示当前文件的绝对路径module.filename ==== __filename 等价process.cwd() 返回运行 ...
- Katalon系列二十:读写Excle
import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook Fil ...
- freemarker 取值(插值)(转)
Java数据模型 1)基本数据类型取值 八种基本的java类型:byte.short.int.long:float,double:char:boolean 对应的封装类型:Byte.Short.Int ...
- 关于chrome浏览器的帐号密码自动填充以及出现的黄色背景色填充问题
不知道大家平时做项目的时候有木有关注这个问题,其实之前做项目遇到过类似的问题,但是因为是单独的chrome浏览器的填充,而且是样式问题稍微严重点,也就没在意.然而在近期的项目中有遇到了这个问题,最为一 ...
- python ndarray相关操作:索引
- [java]反射1 2017-06-25 21:50 79人阅读 评论(10) 收藏
很多东西的实现基础,都是反射,spring的AOP,动态代理等等,下面咱们来学习一下Java的反射 什么是反射? JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于 ...