SDUT OJ 数据结构实验之栈二:一般算术表达式转换成后缀式

#include<iostream>
using namespace std;
int youxian(char s)
{
	if(s=='+'||s=='-') return 1;
	else if(s=='*'||s=='/') return 2;
	else if(s=='(')  return 3;
	else if(s==')')  return 4;
}
int main()
{
	int top=0;
	char s,b[110];
	while(cin>>s && s!='#')
	{
		if(s>='a' && s<='z')
			cout<<s;
		else
		{
			if(top==0)
			{
				b[top++]=s;
			}
			else
			{
				if(youxian(s)>youxian(b[top-1]))
				{
					if(youxian(s)==4)
					{
						while(b[top-1]!='(')
						{
							cout<<b[--top];
						}
						   top--;
					}
					else
					{
						b[top++]=s;
					}
				}
				else
				{
					if(b[top-1]=='(')
					{
						b[top++]=s;
					}
					else
					{
						cout<<b[top-1];
						b[top-1]=s;
					}
				}
			}
		}
	}
	while(top!=0)
	{
		cout<<b[top-1];
		top--;
	}
	cout<<endl;
	return 0;
}
时间: 2024-10-11 07:43:25

SDUT OJ 数据结构实验之栈二:一般算术表达式转换成后缀式的相关文章

数据结构实验之栈二:一般算术表达式转换成后缀式

数据结构实验之栈二:一般算术表达式转换成后缀式 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之. 输入 输入一个算术表达式,以'#'字符作为结束标志. 输出 输出该表达式转换所得到的后缀式. 示例输入 a*b+(c-d/e)*f# 示例输出 ab*cde/-f*+ 提示 来源 示例程序 由一般是求后缀式: 1.设立暂时存放运算符的栈: 2.设表达式的结束符为"#

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

数据结构实验之栈与队列二:一般算术表达式转换成后缀式 Description 对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之. Input 输入一个算术表达式,以‘#’字符作为结束标志. Output 输出该表达式转换所得到的后缀式. Sample Input a*b+(c-d/e)*f# Output ab*cde/-f*+ #include <stdio.h> #include <stdlib.h> char s[100005]; //分配栈的大小 int m

SDUT OJ 数据结构实验之栈四:括号匹配

#include<iostream> #include<stdio.h> using namespace std; int main() { char a[51],b[51]; int i,top; while(gets(a)!=NULL) { top=-1; for(i=0;a[i]!='\0';i++) { if(a[i]=='{'||a[i]=='['||a[i]=='(') { b[++top]=a[i]; } else if(a[i]=='}') { if(b[top]=

数据结构实验之栈一:进制转换(栈的应用)

 数据结构实验之栈一:进制转换 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 输入一个十进制整数,将其转换成对应的R(2<=R<=9)进制数,并输出. 输入 第一行输入需要转换的十进制数: 第二行输入R. 输出 输出转换所得的R进制数. 示例输入 1279 8 示例输出 2377 提示 来源 示例程序 后台数据太水,按理说应该考虑零的情况,但是你不判断零也是对的. #include <stdio.h> #i

SDUT 3341 数据结构实验之二叉树二:遍历二叉树

数据结构实验之二叉树二:遍历二叉树 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 已知二叉树的一个按先序遍历输入的字符序列,如abc,,de,g,,f,,, (其中,表示空结点).请建立二叉树并按中序和后序的方式遍历该二叉树. Input 连续输入多组数据,每组数据输入一个长度小于50个字符的字符串. Output 每组输入数据对应输出2行:第1行输出中序遍历序列:第2行输出后序遍历序列

SDUT 3399 数据结构实验之排序二:交换排序

数据结构实验之排序二:交换排序 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 冒泡排序和快速排序都是基于"交换"进行的排序方法,你的任务是对题目给定的N个(长整型范围内的)整数从小到大排序,输出用冒泡和快排对这N个数排序分别需要进行的数据交换次数. Input 连续多组输入数据,每组数据第一行给出正整数N(N ≤ 10^5),随后给出N个整数,数字间以空格分隔. Output

SDUT 3374 数据结构实验之查找二:平衡二叉树

数据结构实验之查找二:平衡二叉树 Time Limit: 400MS Memory Limit: 65536KB Submit Statistic Problem Description 根据给定的输入序列建立一棵平衡二叉树,求出建立的平衡二叉树的树根. Input 输入一组测试数据.数据的第1行给出一个正整数N(n <= 20),N表示输入序列的元素个数:第2行给出N个正整数,按数据给定顺序建立平衡二叉树. Output 输出平衡二叉树的树根. Example Input 5 88 70 61

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

数据结构实验之栈与队列十:走迷宫 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m),每次可以向上下左右四个方向任意走一步,并且有些格子是不能走动,求从起点到终点经过每个格子至多一次的走法数. Input 第一行一个整数T 表示有T 组测试数据.(T <= 110) 对于每组测试数据: 第一行两个整数n, m,表示迷宫有n * m 个格子.(1

SDUT OJ 数据结构实验之队列一:排队买饭

#include<iostream> #include<memory.h> #include<string> #define N 10010 using namespace std; int main() { int m,i,a[N],b[N],top,n,y,j; string x[N]; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); cin>>m; top=0; for(i=1;i<=m;i++) {