(C)(数据结构_栈)实现无括号算数表达式求值,运算数为0-9的自然数,支持+ - * /,取模,求余

本文介绍了如何利用数据结构中的栈来实现无括号算术表达式的求值,支持的运算包括加减乘除以及取模求余,其中运算数限制为0到9的自然数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//思路:
//规定运算符的优先级(设置一个最低优先级的标志'#')
//设定两个栈:OVS(运算数栈),OPTR(运算符栈),首先令'#'入OPTR栈
//自左向右扫描,处理如下:
//    遇到运算数,进ovs栈
//    遇到运算符,与OPTR栈顶元素比较,若前者比后者优先级高,则运算符进栈
//        若前者比后者优先级低,OVS退栈两次,OPTR退栈一次,进行相应运算,得数入OVS栈
//    遇到结尾的标志‘#’,则以后的扫描都停留在此位置。当OPTR栈顶元素为'#'时结束循环

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

#define N 100
#define TRUE 1
#define FALSE 0

typedef struct
{
	char optr[N/2];
	int top;
}OPTR;//运算符栈
typedef struct
{
	double ovs[N/2];//大约一个运算符对应一个运算数
	int top;
}OVS;//运算数栈

int PushStack1(OPTR *s1,char ch)//入运算符栈
{
	if(s1->top==N/3)
		return FALSE;
	s1->optr[++s1->top]=ch;
		return TRUE;
}

int PushStack2(OVS *s2,double ch)//入运算数栈
{
	if(s2->top==N*2/3)
		return FALSE;
	s2->ovs[++s2->top]=ch;
		return TRUE;
}

int PopStack1(OPTR *s1,char 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值