栈实现计算器

v 栈的应用举例
n栈在表达式计算过程中的应用 :建立操作数栈和运算符栈。运算符有优先级。规则:
n自左至右扫描表达式,凡是遇到操作数一律进操作数栈。
n当遇到运算符时,如果它的优先级比运算符栈栈顶元素的优先级高就进栈。反之,取出栈顶运算符和操作数栈栈顶的连续两个操作数进行运算,并将结果存入操作数栈,然后继续比较该运算符与栈顶运算符的优先级。
n左括号一律进运算符栈,右括号一律不进运算符栈,取出运算符栈顶运算符和操作数栈顶的两个操作数进行运算,并将结果压入操作数栈,直到取出左括号为止。




error.h

#ifndef __ERROR_H_
#define __ERROR_H_
#define ERROR -1
#define FULL -2
#define EMPTY -3
#define Malloc -4


int error;
void myERROR(char *str);


char * mystrerror(int num);


#endif


error.c

#include"error.h"
#include<stdio.h>


void myERROR(char *str)
{
/*char * msg=mystrerror(error);
printf("%s:%s",str,msg);*/

switch(error)
{
case ERROR:
printf("%s:输入参数错误\n",str);
break;
case FULL:
printf("%s:已满栈\n",str);
break;
case EMPTY:
printf("%s:已空栈\n",str);
break;

}


}
char * mystrerror(int num)
{
switch(error)
{
case ERROR:
return "%s:输入参数错误\n";

case FULL:
return "%s:已满栈\n";

case EMPTY:
return "%s:已空栈\n";

case Malloc:
return "%s:空间分配失败\n";

}


}

Sqstack.h

#ifndef __SQSTACK_H_
#define __SQSTACK_H_
#define SIZE 100
#define TRUE 1
#define FALSE 0
#include"error.h"


typedef int stackdata;
typedef struct stack
{
stackdata data[SIZE];
int top;

}STACK;


typedef struct stack1
{
char data[SIZE];
int top;

}S;
int Initstack(STACK *s);//zhi kong
int Initstack1(S *s);
//shi fou kong
int stackempty(STACK *s);
int stackempty1(S *s);
//shi fou man
int stackfull(STACK *s);
int stackfull1(S *s);
//jin zhan
int push(STACK *s,stackdata x);
int push1 (S*s,char x);


//chu zhan
int pop(STACK *s,stackdata *x);
int pop1(S *s,char *x);
//qu zhan ding
int gettop(STACK *s,stackdata *x);
int gettop1(S *s,char *x);
#endif


Sqstack.c

#include"Sqstack.h"
#include<stdio.h>
//#include"error.h" <
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值