栈实现后缀表达式的计算
2010-04-06 13:15
211 查看
#include <stdio.h>/* 栈实现后缀表达式的计算,因为是后缀表达式计算所以只要定义一个OPND操作数栈,遇到运算符直接取前两个操作数运算后并压入栈即可*/
#include <malloc.h>
#include <stdlib.h>
#define overflow 1
typedef struct Stack{
void InitStack(int n);
char *base;
char *top;
}OPND;
Stack InitStack(Stack *S)/*初始化栈*/
{
S->base = (char *)malloc(100 * sizeof(char));
if(! S->base)
exit(overflow);
S->top = S->base;
return *S;
}
void main()
{ int result;
Stack OPND;
InitStack(&OPND);
int n;
int num1=0;
int num2=0;
int num=0;
char c;
scanf("%c",&c);
for(;c!='#'; )
{
if(c-'0'<100&&0<c-'0')//确保为数字且以内
{
// n=c-'0';//字符型转为整型
*OPND.top=c;
OPND.top++;
}
else
{
num2=*(--OPND.top)-'0';//--OPND.top与OPND.top--完全不同,即使是*(--OPND.top)与*(OPND.top--)也是有本质区别的,数据结构P47
num1=*(--OPND.top)-'0';// 地址先减一再进行取地址 先进行取地址再减一
//OPND.top=OPND.top-2;
switch(c)
{
case'-':*(OPND.top)=(num1-num2)+'0';break;
case'+':*(OPND.top)=(num1+num2)+'0';break;
case'/':*(OPND.top)=(num1/num2)+'0';break;
case'*':*(OPND.top)=(num1*num2)+'0';break;
}
OPND.top++;
}
//printf("%c",*(OPND.top));
//OPND.top=OPND.top+1;
// printf("%c",*(OPND.top-1));
// printf("%c",c);
scanf("%c",&c);
}
printf("%c",*(OPND.top-1));
}}
#include <malloc.h>
#include <stdlib.h>
#define overflow 1
typedef struct Stack{
void InitStack(int n);
char *base;
char *top;
}OPND;
Stack InitStack(Stack *S)/*初始化栈*/
{
S->base = (char *)malloc(100 * sizeof(char));
if(! S->base)
exit(overflow);
S->top = S->base;
return *S;
}
void main()
{ int result;
Stack OPND;
InitStack(&OPND);
int n;
int num1=0;
int num2=0;
int num=0;
char c;
scanf("%c",&c);
for(;c!='#'; )
{
if(c-'0'<100&&0<c-'0')//确保为数字且以内
{
// n=c-'0';//字符型转为整型
*OPND.top=c;
OPND.top++;
}
else
{
num2=*(--OPND.top)-'0';//--OPND.top与OPND.top--完全不同,即使是*(--OPND.top)与*(OPND.top--)也是有本质区别的,数据结构P47
num1=*(--OPND.top)-'0';// 地址先减一再进行取地址 先进行取地址再减一
//OPND.top=OPND.top-2;
switch(c)
{
case'-':*(OPND.top)=(num1-num2)+'0';break;
case'+':*(OPND.top)=(num1+num2)+'0';break;
case'/':*(OPND.top)=(num1/num2)+'0';break;
case'*':*(OPND.top)=(num1*num2)+'0';break;
}
OPND.top++;
}
//printf("%c",*(OPND.top));
//OPND.top=OPND.top+1;
// printf("%c",*(OPND.top-1));
// printf("%c",c);
scanf("%c",&c);
}
printf("%c",*(OPND.top-1));
}}
相关文章推荐
- 数据结构—中缀表达式转后缀表达式算法及实现—栈的应用—计算表达式(C++代码实现)(1)
- C语言实现括号匹配,中缀表达式转后缀表达式并计算的算法
- 堆栈实现,计算后缀表达式
- 实现Linux下dc的功能,计算后缀表达式的值
- 栈 实现 中缀表达式 转换成 后缀表达式 并 计算
- 【数据结构】用栈实现的简单计算器(先转换为后缀表达式、可以计算带括号的)
- Qt计算器开发(一):后缀表达式实现完整数学表达式的计算
- 后缀表达式计算的代码实现
- 【数据结构】用栈实现对后缀表达式的计算
- 中缀表达式转换为后缀表达式 简易实现(c++)(简易表达式计算)
- C语言实现括号匹配,中缀表达式转后缀表达式并计算具体代码实现
- 堆栈的应用(2) 中缀算术表达式到后缀(逆波兰记法reverse polish notation)的转换及其计算 C++实现
- java实现中缀表达式转后缀表达式并且计算
- 堆栈实现中缀表达式转后缀表达式及计算表达式的值
- 数据结构实现中缀表达式到后缀表达式,再到计算出结果的代码
- java实现中缀表达式转后缀表达式并且计算
- 表达式计算,输出后缀表达式,栈实现
- java实现中缀表达式转后缀表达式并且计算
- C++实现计算器功能(包括计算含未知量的式子),输出后缀表达式
- 使用堆栈计算后缀表达式--java实现