数据结构实验之栈与队列三:后缀式求值

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_数据结构实验之栈与队列三:后缀式求值的更多相关文章

  1. 数据结构实验之栈与队列三:后缀式求值(SDUT 2133)

    题解:把每一步计算的答案再存在栈里面,直到计算结束. 如果是操作数 那么直接入栈:如果是运算符,那么把栈里面最顶部的两个操作数拿出来进行运算,运算结果再放入到栈里面,计算完所有的(#之前的长度位len ...

  2. SDUT-2088_数据结构实验之栈与队列十一:refresh的停车场

    数据结构实验之栈与队列十一:refresh的停车场 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description refresh最近发 ...

  3. SDUT-2449_数据结构实验之栈与队列十:走迷宫

    数据结构实验之栈与队列十:走迷宫 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个由n * m 个格子组成的迷宫,起 ...

  4. SDUT-1479_数据结构实验之栈与队列九:行编辑器

    数据结构实验之栈与队列九:行编辑器 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个简单的行编辑程序的功能是:接受用 ...

  5. SDUT-3335_数据结构实验之栈与队列八:栈的基本操作

    数据结构实验之栈与队列八:栈的基本操作 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 堆栈是一种基本的数据结构.堆栈具 ...

  6. SDUT-3334_数据结构实验之栈与队列七:出栈序列判定

    数据结构实验之栈与队列七:出栈序列判定 Time Limit: 30 ms Memory Limit: 1000 KiB Problem Description 给一个初始的入栈序列,其次序即为元素的 ...

  7. SDUT-3332&3333_数据结构实验之栈与队列五:下一较大值

    数据结构实验之栈与队列六:下一较大值 Time Limit: 150 ms Memory Limit: 8000 KiB Problem Description 对于包含n(1<=n<=1 ...

  8. SDUT-2134_数据结构实验之栈与队列四:括号匹配

    数据结构实验之栈与队列四:括号匹配 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给你一串字符,不超过50个字符,可能 ...

  9. SDUT-2132_数据结构实验之栈与队列二:一般算术表达式转换成后缀式

    数据结构实验之栈与队列二:一般算术表达式转换成后缀式 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运 ...

随机推荐

  1. Oracle中函数如何返回结果集

    在Oracle中,用函数返回结果集有时候要用到,下面是demo: 1 2 3 4 5 6 7 create or replace type t_test as object ( id integer, ...

  2. Comparator进行List集合排序

    对数据库中查询到的结果进行排序,一般开发中,实体类是没有实现Comparable接口的,所以不能实现compareTo()方法进行排序, 只能用Comparator去进行排序,只需要在带排序的集合中加 ...

  3. 2019.7.27 NOIP模拟测试9 反思总结

    先来整理题目 T1题目大意:给出n个数字和一个质数作为模数,一个变量x初始值为1.进行m次操作,每次让x随机乘上n个数中的一个,问m次操作以后x的期望值. 答案一定可以用分数表示,输出分子乘分母逆元的 ...

  4. JavaScript 对象的所有方法名称转换为大写

    function A() { this.do1 = function () { console.log(1); }; this.do2 = function () { console.log(2); ...

  5. 初探Druid

    说到连接池,最常见的就是dbcp和c3p0,关于druid,官方定义是为监控而生的数据库连接池. 官方中文文档地址:https://github.com/alibaba/druid/wiki/%E5% ...

  6. Leetcode120.Triangle三角形最小路径和

    给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 自顶向下的最小路径和为 11 ...

  7. python的工具pip进行安装时出现 No module named 'pip'

    现象: 解决: python -m ensurepip easy_install pip python -m pip install --upgrade pip #用于更新pip,默认安装的是pip9 ...

  8. 只需一步,DLA开启TableStore多元索引查询加速!

    一.背景介绍 Data Lake Analytics(简称DLA)在构建第一天就是支持直接关联分析Table Store(简称OTS)里的数据,实现存储计算分离架构,满足用户基于SQL接口分析Tabl ...

  9. Django项目:CRM(客户关系管理系统)--04--02PerfectCRM创建ADMIN页面02

    十.CRM项目创建模板页面 {#king_base.html#} {## ————————02PerfectCRM创建ADMIN页面————————#} {#模板文件 king_base.html#} ...

  10. CTSC2016时空旅行

    当时看这道题AC的人数比较多,就开了这道题. 很容易发现是这是一个有关凸包的题. 然后不知道怎么维护凸包,一直在想cdq,感觉复杂度不行,于是被这玩意难住了…… 幸好有亲学长yyh造福人类的题解:ht ...