【数据结构】计算器实现思路

一个简易计算器的实现

基本思路就是采用栈和逆波兰表达式的思想对于输出的算式进行求解

1.实现两个需要用到的栈

首先定义存放在算式中用到的存放符号所用的栈和相关的栈的操作

//实现存放符号所用的栈
typedef struct 
{
   
	char *base;
	char *top;
	int maxsize;
}Stack;
//对栈进行初始化
void InitStack(Stack &S,int size)
{
   
	S.maxsize=size;
	S.base=(char *)malloc(sizeof(char)*size);
	S.top=S.base;
}
//判断栈是否是空的
bool is_stack_empty(Stack S)
{
   
	if(S.base==S.top)
		return true;
	else return false;
}
//判断栈是否是满的
bool is_stack_full(Stack s)
{
   
	int lenth=s.top-s.base;
	if(lenth<s.maxsize)
		return false;
	else 
		return true;
}
//获得栈顶顶元素
void GetTop(Stack S,char &e)
{
   
	if(is_stack_empty(S))
	{
   
		cout<<"符号栈空"<<endl;
		return ;
	}
	e=*(S.top-1);
}
//出栈操作
void Pop(Stack &S,char &e)
{
   
	if(is_stack_empty(S))
	{
   
		cout<<"符号栈空"<<endl;
		return ;
	}
	S.top--;
	e=*(S.top);
}
void Push(Stack &s,char e)
{
   
	if(is_stack_full(s))
	{
   
		cout<<"符号栈满"<<endl;
		return ;
	}
	*s.top=e;
	s.top++;
}

接着实现存放数字所用的栈和相关的操作,为了在后面使用的方便,这里所有的函数都采用重载的形式

typedef struct 
{
   
	int *base;
	int *top;
	int maxsize;
}NumberStack;
//对栈进行初始化
void InitStack(NumberStack &S,int size)
{
   
	S.maxsize=size;
	S.base=(int *)malloc(sizeof(int)*size);
	S.top=S.base;
}
//判断栈是否是空的
bool is_stack_empty(NumberStack S)
{
   
	if(S.base==S.top)
		return true;
	else return false;
}
//判断栈是否是满的
bool is_stack_full(NumberStack s)
{
   
	int lenth=(s.top-s.base);
	if(lenth<s.maxsize)
		return false;
	else 
		return true;
}
//获得栈顶顶元素
void GetTop(NumberStack S,int &e)
{
   
	if(is_stack_empty(S))
		{
   
			cout<<"数字栈空"<<endl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值