该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
各位继续吧。我也写了点东西,可以看看哈~~
#include
#include
#define element_number 100 //预定义表达式最长为100个字符
//若超过则继续追加空间)
#define stack_increment 100 //预定义堆栈元素为100个
int i_f_flag=0;//计算方式标志,为1表示整型计算,为0为浮点型计算
typedef float element_type;
typedef struct stack{//操作数栈
element_type *base; //栈底
element_type *top;//栈顶
int stack_size;//栈大小
}stack;
int init_stack(stack *s)
{//top所指的是当前栈顶元素
s->base=(element_type *)malloc(sizeof(element_type));//分配栈空间
if(s->base==NULL)
{
printf("\n分配内存失败!\n");
return 0;
}
s->stack_size=element_number;
s->top=s->base;
return 1;
}
int get_top(stack s,element_type *e)
{//读取栈定元素
if(s.top==s.base)
{
printf("\n栈为空,无法访问!\n");
return 0;
}
*e=*(s.top-1);
return 1;
}
int push(stack *s,element_type e)
{//压栈
if(s->top-s->top>=s->stack_size)
{//如果栈空间已经用完
s->base=(element_type *)realloc(s->base,(element_number+stack_increment)*sizeof(element_type));
if(s->base==NULL)
{
printf("\n分配内存失败!\n");
return 0;
}
s->top=s->base+s->stack_size;
s->stack_size+=stack_increment;
}
*(s->top)=e;
s->top++;
return 1;
}
int pop(stack *s,element_type *e)
{//出栈
if(s->top==s->base)
{
printf("\n栈为空,无法访问!\n");