数据结构习题学习笔记(The Third Day)
2007-11-16 16:17
309 查看
Q1:编写一个函数将一般算术表达式转化为逆波兰表达式。
假设表达式是以字符的形式由键盘输入(简单起见,设算术表达式中的参加运算的数只有一位数字)。
字符数组str:算术表达式
字符数组exp:逆波兰表达式
字符数组stack:栈
方法如下:
1,若C为数字 -> 将C依次存入数组exp中;
2,若C为左括号"(" -> 将此括号压入栈;
3,若C为右括号")" -> 将栈stack中左括号"("以前的字符依次弹出并存入数组exp中,将"("弹出;
4,若C为"+"或"-" -> 将栈stack中"("以前的所有字符号依次弹出并存入数组exp中,然后将C压入栈stack中;
5,若C为"*"或"/" -> 将当前栈stack中栈顶连续的"*"或"/"弹出并存入数组exp中,然后将C压入栈stack中;
6,若C为"#" -> 将栈所有运算符弹出并存入数组exp中,符号然后将C压入数组exp中,最后转换的逆波兰表达式在exp中.
My View:
1,波兰式:二叉树前缀表示;逆波兰式:二叉树后缀表示(在数据结构中有具体解释)
2,C的判断主要是根据符号运算的优先级,栈中弹出的都是比C优先级高或相等的.比如:C为"+",则必须弹出"+","-","*","/".
CODE:
// trans.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#define Maxsize 100/*Maxsize为算术表达式中最多字符个数*/
void trans()
...{
char str[Maxsize];//存储原算术表达式
char exp[Maxsize];//存储转换后的波兰表达式
char stack[Maxsize];//作为栈使用
char ch;
int i,j,t,top=0;//t作为exp下标,top作为stack下标,i作为str下标
i=0;//获取用户输入的表达式
do
...{
i++;
scanf("%c",&str[i]);
}while((str[i]!='#')&&(i<Maxsize));
t=0;i=0;
ch=str[i];i++;
while(ch!='#')
...{
if((ch>='0')&&(ch<='9'))//判定为数字
...{
exp[t]=ch;t++;
}else
if(ch=='(')//判定为左括号
...{
top++;
stack[top]=ch;
}else
if(ch==')')//判定为右括号
...{
while(stack[top]!='(')
...{
exp[t]=stack[top];
top--;
t++;
}
top--;//将左括号弹出
}else
if((ch=='+')||(ch=='-'))//判定为加减号
...{
while((top!=0) && (stack[top]!='('))
...{
exp[t]=stack[top];
top--;
t++;
}
top++;
stack[top]=ch;
}else
if((ch=='*')||(ch=='/'))//判定为乘除
...{
while((stack[top]=='*')||(stack[top]=='/'))
...{
exp[t]=stack[top];
top--;
t++;
}
top++;
stack[top]=ch;
}
ch=str[i];//继续判断字符
i++;
}
while(top!=0)
...{
exp[t]=stack[top];
t++;
top--;
}
exp[t]='#';
for(j=0;j<=t;j++)
printf("%c",exp[j]);
printf(" ");
}
void main()
...{
trans();
}
RUN:
测试数据:(1+2)*((3-4)/5)#
输出结果:12+34-5/*#
已更正错误!!!!!!!!!!!!!
闪……
假设表达式是以字符的形式由键盘输入(简单起见,设算术表达式中的参加运算的数只有一位数字)。
字符数组str:算术表达式
字符数组exp:逆波兰表达式
字符数组stack:栈
方法如下:
1,若C为数字 -> 将C依次存入数组exp中;
2,若C为左括号"(" -> 将此括号压入栈;
3,若C为右括号")" -> 将栈stack中左括号"("以前的字符依次弹出并存入数组exp中,将"("弹出;
4,若C为"+"或"-" -> 将栈stack中"("以前的所有字符号依次弹出并存入数组exp中,然后将C压入栈stack中;
5,若C为"*"或"/" -> 将当前栈stack中栈顶连续的"*"或"/"弹出并存入数组exp中,然后将C压入栈stack中;
6,若C为"#" -> 将栈所有运算符弹出并存入数组exp中,符号然后将C压入数组exp中,最后转换的逆波兰表达式在exp中.
My View:
1,波兰式:二叉树前缀表示;逆波兰式:二叉树后缀表示(在数据结构中有具体解释)
2,C的判断主要是根据符号运算的优先级,栈中弹出的都是比C优先级高或相等的.比如:C为"+",则必须弹出"+","-","*","/".
CODE:
// trans.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#define Maxsize 100/*Maxsize为算术表达式中最多字符个数*/
void trans()
...{
char str[Maxsize];//存储原算术表达式
char exp[Maxsize];//存储转换后的波兰表达式
char stack[Maxsize];//作为栈使用
char ch;
int i,j,t,top=0;//t作为exp下标,top作为stack下标,i作为str下标
i=0;//获取用户输入的表达式
do
...{
i++;
scanf("%c",&str[i]);
}while((str[i]!='#')&&(i<Maxsize));
t=0;i=0;
ch=str[i];i++;
while(ch!='#')
...{
if((ch>='0')&&(ch<='9'))//判定为数字
...{
exp[t]=ch;t++;
}else
if(ch=='(')//判定为左括号
...{
top++;
stack[top]=ch;
}else
if(ch==')')//判定为右括号
...{
while(stack[top]!='(')
...{
exp[t]=stack[top];
top--;
t++;
}
top--;//将左括号弹出
}else
if((ch=='+')||(ch=='-'))//判定为加减号
...{
while((top!=0) && (stack[top]!='('))
...{
exp[t]=stack[top];
top--;
t++;
}
top++;
stack[top]=ch;
}else
if((ch=='*')||(ch=='/'))//判定为乘除
...{
while((stack[top]=='*')||(stack[top]=='/'))
...{
exp[t]=stack[top];
top--;
t++;
}
top++;
stack[top]=ch;
}
ch=str[i];//继续判断字符
i++;
}
while(top!=0)
...{
exp[t]=stack[top];
t++;
top--;
}
exp[t]='#';
for(j=0;j<=t;j++)
printf("%c",exp[j]);
printf(" ");
}
void main()
...{
trans();
}
RUN:
测试数据:(1+2)*((3-4)/5)#
输出结果:12+34-5/*#
已更正错误!!!!!!!!!!!!!
闪……
相关文章推荐
- 数据结构习题学习笔记(The Fourth Day)
- 数据结构习题学习笔记(The Fifth Day)
- 数据结构习题学习笔记(The First Day)
- 数据结构习题学习笔记(The Sixth Day)
- 数据结构习题学习笔记(The Second Day)
- 数据结构学习笔记 --- 栈、队列 (习题)
- 数据结构学习笔记 --- 树(习题)
- Python学习笔记(5)——A Day at the Supermarket
- 数据结构学习笔记8 树 课后习题
- 数据结构学习笔记 --- 栈、队列 (习题)
- 『算法学习笔记』4th -8th day. 10道习题 & 常用数学函数
- 数据结构学习笔记 --- 树(习题)
- On the third day learning Python(第三天学习Python)
- 『算法学习笔记』13-15th day. 10道习题
- ≪统计学习精要(The Elements of Statistical Learning)≫课堂笔记(四)
- python数据结构学习笔记-2016-11-07-03-多重链表以及相应的迭代器
- c++ primer(第五版)学习笔记及习题答案代码版(第十三章)拷贝控制
- 传智播客-Java学习笔记day25
- poj 1062 F - Best Deal【dijstra】【第三周练习】【the third day】
- ≪统计学习精要(The Elements of Statistical Learning)≫课堂笔记(三)