本程序可以对 “输入的表达式” 和 “从文件里面读入的表达式” 进行运算
并且支持对负号的处理
代码运行时有一个警告信息 ,但是不影响运行和最终的结果。不知道问题出在哪!
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<math.h>
#include<string.h>
#include<iostream>
using namespace std;
typedef double ElemType;
typedef char ElemType_c;
#define STACK_INIT_SIZE 10 //栈的总存储容量
#define STACKINCREMENT 10 //增加的容量
#define MAXBUFFER 10 //字符串的长度
typedef struct SqStack//ElemType类型的栈
{
ElemType *base; //栈底指针
ElemType *top; //栈顶指针
int stacksize; //栈总的可用容量
}SqStack;
typedef struct SqStack_c
{
ElemType_c *base;
ElemType_c *top;
int stacksize;
}SqStack_c;
struct Cal_Return{
double Retur;
int flag = 1;
};
//栈的建立
SqStack* InitStack(){
SqStack *s = (SqStack *)malloc(sizeof(SqStack));
s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
if (!s->base)
exit(0);
s->top = s->base;
s->stacksize = STACK_INIT_SIZE;
return s;
}
SqStack_c* InitStack_c(){
SqStack_c *s = (SqStack_c *)malloc(sizeof(SqStack_c));
s->base = (ElemType_c *)malloc(STACK_INIT_SIZE * sizeof(ElemType_c));
if (!s->base)
exit(0);
s->top = s->base;
s->stacksize = STACK_INIT_SIZE;
return s;
}
//压栈
bool Push(SqStack *s, ElemType e){
if (s->top - s->base >= s->stacksize){
s->base = (ElemType *)realloc(s->base, (s->stacksize + STACKINCREMENT) * sizeof(ElemType)); //如果栈满了,扩充栈容量
if (!s->base)
return false;
s->top = s->base + s->stacksize;
s->stacksize = s->stacksize + STACKINCREMENT;
}
*(s->top) = e;
s->top++;
return true;
}
bool Push_c(SqStack_c *s, ElemType_c e){
if (s->top - s->base >= s->stacksize)
{
s->base = (ElemType_c *)realloc(s->base, (s->stacksize + STACKINCREMENT) * sizeof(ElemType_c)); //如果栈满了,扩充栈容量
if (!s->base)
return false;
s->top = s->base + s->stacksize;
s->stacksize = s->stacksize + STACKINCREMENT;
}
*(s->top) = e;
s->top++;
return true;
}
//出栈
bool Pop(SqStack *s, ElemType &e){
if (s->top == s->base)
return false;
--(s->top);
e = *(s->top);
return true;
}
bool Pop_c(SqStack_c *s, ElemType_c &e){
if (s->top == s->base)
return false;
--(s->top);
e = *(s->top);
return true;
}
//获取栈顶元素,不出栈
ElemType GetTop(SqStack *s){
ElemType e;
if (s->top == s->base)
exit(0);
e = *(s->top - 1);
return e;
}
ElemType_c GetTop_c(SqStack_c *s){
ElemType_c e;
if (s->top == s->base)
exit(0);
e = *(s->top - 1);
return e;
}
//清空栈
void ClearStack(SqStack *s){
s->top = s