您的位置:首页 > 其它

栈实现后缀表达式的计算

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));

}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: