#include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <math.h> #define IncreSize 10 #define InitSize 10 typedef int status; typedef int Elemtype; typedef struct sStack { Elemtype *base; Elemtype *top; int StackSize; }sqStack; void InitStack(sqStack *s) { s->base = (Elemtype *)malloc(sizeof(int)*InitSize); if(!s->base) exit(0); else { s->top = s->base; s->StackSize = InitSize; //return OK; } } void Push(sqStack *s, Elemtype e) { if(s->top - s->base >= s->StackSize) { s->base = (Elemtype *)realloc(s->base,(s->StackSize + IncreSize)*sizeof(Elemtype)); //这里申请的大一些的空间; if(!s->base) exit (0); } *(s->top) = e; s->top++; //return OK; } void Pop(sqStack *s, Elemtype *e) { if(s->top == s->base) exit(0); *e = *--(s->top); // return OK; } int StackLen(sqStack s) { return(s.top - s.base); //注意这里的结果是栈中的数据个数; } //输入数字,然后根据计算法则进行求解。 int main() { char c; char str[20]; //设立一个缓冲区; int i = 0; int d,e,f; sqStack s; InitStack(&s); scanf("%c", &c); while(c != ‘#‘) { while( isdigit(c) || c == ‘.‘) { str[i++] = c; str[i] = ‘\0‘; if(i >= 10) { printf("过界\n"); return -1; } scanf("%c", &c); if(c == ‘ ‘) { d = atof(str); Push(&s,d); i = 0; break; } } switch(c) { case ‘+‘ : Pop(&s, &e); Pop(&s, &f); Push(&s,e+f); break; case ‘-‘: Pop(&s, &e); Pop(&s, &f); Push(&s,f-e); break; case ‘*‘: Pop(&s, &e); Pop(&s, &f); Push(&s,e*f); break; case ‘/‘: Pop(&s, &e); Pop(&s, &f); if(f == 0) exit(0); Push(&s,e/f); break; } scanf("%c",&c); } Pop(&s,&e); printf("%d",e); return 0; }
这个程序还是有些地方刚刚开始细节没有考虑清楚。
时间: 2024-10-05 04:43:24