c语言表达式树的创建,数据结构之---C语言实现栈的表达式求值(表达式树)

本文介绍了如何使用C语言通过栈实现表达式树的创建,用于表达式求值。文章分为两部分,第一部分是直接利用栈处理运算符和操作数,遇到运算符时进行运算;第二部分是通过两个栈,一个存储运算符,一个存储运算值,根据运算符优先级进行运算。代码示例展示了具体实现过程。
摘要由CSDN通过智能技术生成

利用栈实现表达式树这里我一共有两种思路:

part one:

首先判断输入表达式的每个字符,如果遇到运算符,不压栈,

接着弹出两个栈顶的元素,进行元素,接着把结果压栈。

代码:

//栈实现表达式

//思路:此程序的思路是,读取输入的字符串,然后判断每个字符,

//当遇到的是运算符,这时运算符不如栈,接着把栈顶的两个元素

//出栈,然后运算,然后再将得的结果压栈

//杨鑫

#include

#include

typedef int SElemType;// 栈的元素类型

#define STACK_INIT_SIZE 10// 存储空间初始分配量

#define STACKINCREMENT 2// 存储空间分配增量

/*

*顺序栈的结构体

* */

typedef struct SqStack

{

SElemType *base;// 在栈构造之前和销毁之后,base的值为NULL

SElemType *top;// 栈顶指针

int stacksize;// 当前已分配的存储空间,以元素为单位

}SqStack;

/*

*构造一个栈

* */

int InitStack(SqStack *S)

{

// 为栈底分配一个指定大小的存储空间

(*S).base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));

if( !(*S).base )

exit(0);// 存储分配失败

(*S).top = (*S).base;// 栈底与栈顶相同表示一个空栈

(*S).stacksize = STACK_INIT_SIZE;

return 1;

}

/*

*获取栈顶元素

* */

int GetTop(SqStack S,SElemType *e)

{

if(S.top > S.base)

{

*e = *(S.top-1);// 栈顶指针的下一个位置为栈顶元素

return 1;

}

else

return 0;

}

/*

*入栈(压栈)

* */

int Push(SqStack *S, SElemType e)

{

if((*S).top - (*S).base >= (*S).stacksize)// 栈满,追加存储空间

{

(*S).base = (SElemType *)realloc((*S).base,

((*S).stacksize + STACKINCREMENT) * sizeof(SElemType));

if( !(*S).base )

exit(0); // 存储分配失败

(*S).top = (*S).base+(*S).stacksize;

(*S).stacksize += STACKINCREMENT;

}

*((*S).top)++=e;

// 这个等式的++ * 优先级相同,但是它们的运算方式,是自右向左

return 1;

}

/*

*出栈

* */

int Pop(SqStack *S,SElemType *e)

{

if((*S).top == (*S).base)

return 0;

*e = *--(*S).top;

// 这个等式的++ * 优先级相同,但是它们的运算方式,是自右向左

return 1;

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值