题意:题目意思是给出后缀表达式。能够通过栈来计算表达式的值,即转化为中缀表达式。

然后如果如今不用栈。而是用队列来操作。即每遇到一操作符时。进行两次pop和一次push。(这里注意,先pop出来的作为第二操作数,操作符如果是不满足交换律和结合律的)由于队列的pop和push,与栈的不同么,所以。问队列的输入应该是如何的,才干和给定的输入用栈来计算,所得值同样。(即转化为同样的中缀表达式)

思路:先转为表达式树。然后能够看到用队列的方式即为层次遍历(队列实现)这棵树,然后将值逆序输出。

这里树的链式存储我没实用到内存动态分配、指针等easy出错的东西。

我是先声明了一个MAXN个的Node数组anode,然后每一个字符来这个数组申请node。用cnt来索引。位置0不存储数据,用索引0来表示不存在的结点。即相当于null。node结点中的left和right即为左右孩子结点在anode数组中的下标。建树的过程即函数build中用到的栈也是存对应结点在anode数组中的下标。

(好久没做题了。这个还一次AC了啊;之前在UVa单题最高排名也一百多。这个题排到77,破纪录了嘿嘿

年轻是一种债务,要加油~)

Code:

#include<stdio.h>
#include<string.h>
#define MAXN 10000 struct Node
{
char data;
int left,right; //存的是anode数组的下标
};
void bfs(int root);
int build(char *str); Node anode[MAXN];
int stack[MAXN+1];
char exp[MAXN+1]; int main()
{
int n;
scanf("%d",&n);
while(n-->0)
{
scanf("%s",exp);
int root=build(exp);//printf("%d\n",root);
bfs(root);
}
return 0;
} void bfs(int root)
{
int que[MAXN];
char ans[MAXN];
int cnt=0;
int front=0,rear=1;
que[0]=root;
while(front<rear)
{
int t=que[front++];
ans[cnt++]=anode[t].data;
if(anode[t].left!=0) que[rear++]=anode[t].left;
if(anode[t].right!=0) que[rear++]=anode[t].right;
}
ans[cnt]='\0';
//print //printf("%s\n",ans);
for(int i=0;i<cnt;++i)
printf("%c",ans[cnt-i-1]);
printf("\n");
} int build(char *str)
{
int cnt=1;//anode数组的下标0元素表示不存在该结点
int top=0;//始终指向栈顶元素。stack[0]不用
while((*str)!='\0')
{
anode[cnt].data=*str;
if(*str>='a'&&*str<='z')
{
anode[cnt].left=anode[cnt].right=0;
stack[++top]=cnt;
}
else
{
if(top>1)
{
anode[cnt].right=stack[top--];
anode[cnt].left=stack[top--];
}
stack[++top]=cnt;
}
str++;
cnt++;
}//while
return cnt-1;
}

最新文章

  1. [LeetCode] Dungeon Game 地牢游戏
  2. TopHat
  3. 【BZOJ-4690】Never Wait For Weights 带权并查集
  4. [liferay6.2]input-date日期控件
  5. Android CountDownTimer倒计时器的使用
  6. 49.关于Quartus和ISE中ROM的初始化和仿真的一些小结
  7. 使用贝赛尔曲线画扇形、圆形、弧线、多边形,实现App下载时的动画效果demo
  8. MySQL(25):事务的隔离级别出现问题之 不可重复读
  9. cxf客户端代码设置设置访问用户名、密码、证书域名不匹配认证通过
  10. iOS 8 Metal Swift教程(一) :开始学习
  11. Python学习笔记 变量
  12. OpenAI dota2大战人类顶尖选手视频
  13. Dynamics CRM2016 Web API之通过实体的primary key查询记录(二)
  14. CF1139B Chocolates
  15. [转]python3字符串与文本处理
  16. php(apache)切换版本
  17. iOS开发 -------- AFNetworking使用中遇到的小问题
  18. windows 安装nvm步骤(shi&#39;yongnvm-windows管理node版本):
  19. STM32 Seminar 2007 -- Timer
  20. OpenCV学习笔记之课后习题练习2-3

热门文章

  1. HashSet源码分析 jdk1.6
  2. 【bzoj2476】战场的数目 矩阵乘法优化dp
  3. HttpRunner自动化框架学习笔记
  4. [luoguP2762] 太空飞行计划问题(最大权闭合图—最小割—最大流)
  5. 学习 JSP:第一步Eclipse+Tomcat+jre(配置环境)
  6. APUE 学习笔记(四) 标准I/O库
  7. linux 时间模块 三
  8. php接口开发时,数据解析失败问题,字符转义,编码问题
  9. Servlet 2.4 规范之第四篇:Servlet上下文
  10. 使用KNN对iris数据集进行分类——python