逆波兰计算器 进阶版(可以直接计算中缀表达式,支持 小数,负数)

2020年 4-27号 ,我发表了这篇文章,

在这里插入图片描述
在这里插入图片描述

然后之前的这 篇文章的代码并不支持 小数,负数,然后于今天 21点07分
我把这个问题解决了(不是从四月份开始解决的,是因为 之前上网课没时间弄,然后这个学期学数据结构,所以就搞一波,也没有看网上的博客,全都是自己一个人解决的 俺觉得 挺骄傲 的d=====( ̄▽ ̄*)b)
直接上代码!

#include<iostream>
#include<cstring>
#include<math.h>
#include<ctype.h>//isdigit()头文件
#include<stdlib.h>
#define add_size 20
//顺序栈的实现:
 
using namespace std;
class seqstack_d
{
   
   double *top;
   double *base;
   int stacksize;
   public :
   void inistack2(seqstack_d *s);
   void push2(seqstack_d *s,double e);
   void pop2(seqstack_d *s, double *e);
   int stacklength2();
} ;
int seqstack_d::stacklength2()
{
   
	return this->top-this->base;
}
void seqstack_d::pop2(seqstack_d *s ,double *e)
{
   
	if(s->top==s->base)//如果栈为空,就return
	return;	
	//如果栈不为空,就弹数据出来;
	*e=*--(s->top);//出栈,栈顶下移,因为栈顶不存数据 所以是-- 后 取值
	
}
void seqstack_d::inistack2( seqstack_d *s )
{
   
	s->base =(double *) malloc (sizeof (add_size *sizeof(double ) ));//为栈分配20个char 长度的空间大小;
	if(!s->base)//如果base 是null 的话,分配内存失败,base指向一个空的指针,然后就要退出;
	exit(0);
	//否则就是成功分配内存
	s->top=s->base;
	s->stacksize=add_size;
}
void seqstack_d::push2(seqstack_d *s ,double e )
{
   
	if(s->top-s->base>=s->stacksize)//应该不会出现大于的情况,只会出现等于的情况,即栈满了的情况,此时要分配额外的内存给指针
	//否则会报错
	 {
   
	 s->base = (double *)realloc (s->base,s->stacksize+add_size);
	 if(!s->base)
	 exit(0);
	 s->stacksize=s->stacksize+add_size;
	 //s->top=s->base+s->stacksize;//这行代码好像有问题
	 } 
	 //如果没有超出栈的空间大小,那么照常运行。
	 *(s->top)=e;
	 s->top++;
	 
}



class seqstack
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是牛大春呀

老板糊涂啊

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值