C语言实现二叉树的建立、遍历以及表达式的计算

#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)

{ </

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值