#include
#include
#include
#include
#define StackInitSize 100
#define max 20
#define isNum 1
#define isCha 0
#define lenNum sizeof(struct nodeNum)
#define lenCha sizeof(struct nodeCha)
#define lenBiTree sizeof(struct biTreeNode)
//操作数节点元素
struct nodeNum{
int number;
};
//操作符节点元素
struct nodeCha{
char ch;
};
//共用体
typedef union demo{
int number;
char cha;
}Demo;
//二叉树节点
struct biTreeNode{
int flag;
Demo useUnion;
struct biTreeNode *lchild;
struct biTreeNode *rchild;
};
//二叉树节点栈 !会初始化两个二叉树节点栈!
struct biTreeStack{
struct biTreeNode *base;
struct biTreeNode *top;
int stackSize;
};
//操作数栈
struct numStack{
struct nodeNum *base;
struct nodeNum *top;
int stackSize;
};
//操作符栈
struct chaStack{
struct nodeCha *base;
struct nodeCha *top;
int stackSize;
};
//初始化二叉树栈
void biTreeInitStack(struct biTreeStack *stack0)
{
stack0->base = (struct biTreeNode *)malloc(StackInitSize * lenBiTree);
if(!stack0->base)
{
printf("没有足够空间!\n退出程序!\n");
exit(0);
}
stack0->top = stack0->base;
stack0->stackSize = StackInitSize;
}
//初始化操作数栈
void numInitStack(struct numStack *stack1)
{
stack1->base = (struct nodeNum *)malloc(StackInitSize * lenNum);
if(!stack1->base)
{
printf("没有足够空间!\n退出程序!\n");
exit(0);
}
stack1->top = stack1->base;
stack1->stackSize = StackInitSize;
}
//初始化操作符栈
void chaInitStack(struct chaStack *stack2)
{
stack2->base = (struct nodeCha *)malloc(StackInitSize * lenCha);
if(!stack2->base)
{
printf("没有足够空间!\n退出程序!\n");
exit(0);
}
stack2->top = stack2->base;
stack2->stackSize = StackInitSize;
}
//压入操作符
void chaPush(struct chaStack *stack3,char ch)
{
if(stack3->top - stack3->base >= stack3->stackSize)
{
printf("栈满!\n退出程序!\n");
exit(0);
}
stack3->top->ch = ch;
stack3->top++;
}
//压入操作数
void numPush(struct numStack *stack4,int number)
{ </