c语言运算符进栈操作
如图 这个为什么除号在乘号之前呀 上面的解释为什么遇到第二个左括号要让除号出栈?
/* 数据结构-栈 *//* 异常的细节处理还没弄好*/#include <iostream>#include <stdlib.h>#include <malloc.h>#define len_chu_shi 50 //初始空间大小#define len_zeng_jia 10 //额外增加空间大小#define OK 0 //正确#define OVER -2 //#define ERROR -1 //using namespace std;typedef int elem_type; //元素类型typedef int function_type; //函数类型typedef struct zhan{ elem_type *top; //栈顶 elem_type *base; //栈底 int len; //当前空间大小}zhan; //栈结构 function_type Init_zhan(zhan *exam);//初始化栈function_type Get_top(zhan *exam,elem_type *e);//获取栈顶元素function_type Add_top(zhan *exam,elem_type *e);//增加栈顶元素function_type Delete_top(zhan *exam, elem_type *e);//删除栈顶元素 int main(int argc,char *argv[]){ zhan *example = (zhan *)malloc(sizeof(zhan)); Init_zhan(example); return OK;} function_type Init_zhan(zhan *exam){ exam->base = (elem_type *)malloc(len_chu_shi*sizeof(elem_type)); if(!exam->base) //分配失败 exit(OVER); exam->top = exam->base; exam->len = len_chu_shi; return OK;}//--endfunction_type Get_top(zhan *exam,elem_type *e){ if(!exam->base) exit(OVER); *e = *(exam->top - 1); //不能用自减运算符,那样会改变栈顶指针的值 return OK;}//--endfunction_type Add_top(zhan *exam,elem_type *e){ if(exam->len <= exam->top - exam->base) //我个人觉得,如果 已经"<",就已经数据溢出了,就应该报错 exam->base = (elem_type *)realloc(exam->base,(exam->len + len_zeng_jia)*sizeof(elem_type)); if(!exam->base) //分配失败 exit(OVER); *(exam->top++) = *e; //应该是先改变栈顶指针的内容,然后栈顶指针再自增 exam->len += len_zeng_jia; return OK;}//--endfunction_type Delete_top(zhan *exam, elem_type *e){ if(!exam->base) //空栈 exit(OVER); *e = *(--exam->top); //应该是栈顶指针先自减,然后获取栈顶指针的内容 return OK;}//--end
下一篇:缺少列表分割符或