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