C语言 栈 实现表达式计算

这篇博客分享了如何使用C语言通过栈来实现表达式的计算,支持加减乘除及括号操作。文章提到了存在两个栈,一个用于存储运算符,另一个用于存储数字。运算遵循运算符的优先级,例如3*5+的情况,会先进行乘法运算得到15,再将15和+放入各自的栈中。代码可以直接使用,但输入的表达式必须以等号结尾。
摘要由CSDN通过智能技术生成

给大家搞了一个C语言用栈实现表达式计算

  1. 可以支持±*/()
  2. 可以进行小数,整数运算,但是吧,精度这个问题我就没解决
  3. 建立了两个栈,一个存储运算符,一个存储数字
  4. (是存在运算符栈的
  5. 遇到)就要pop栈直到把遇到的第一个(也给pop掉
  6. 是按照运算优先级进行操作的
  7. 例如3*5+ 新的即将要插入的+没有*优先级高,那就先搞出数字栈的最上面两个数字,和运算符栈搞出*然后做运算得到15,把15再放入数字栈栈顶,然后把+放入运算符栈。
  8. 代码直接可以用,输入3*5+2=,结尾一定要是等号!!!!!!!
  9. 记得点赞

上代码

#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#pragma warning(disable:4996)
#define maxsize 100
typedef struct SqList_char{
   
	int top;
	int bottom;
	char data[maxsize];
}Sqlist_char;
typedef struct SqList_float {
   
	int top;
	int bottom;
	float data[maxsize];
}Sqlist_float;
void initStack_char(Sqlist_char *L){
   
	L->top = 0;
	L->bottom = 0;
}
void initStack_float(Sqlist_float* L) {
   
	L->top = 0;
	L->bottom = 0;
}
char popStack_char(SqList_char* p) {
   
	char str;
	if (p->top != p->bottom) {
   //栈非空 
		str = p->data[p->top - 1];//栈顶内容输出 
		p->top--;//栈顶减1 
		return str;
	}
}
float popStack_float(SqList_float* p) {
   
	float f1;
	if (p->top != p->bottom) {
   //栈非空 
		f1= p->data[--p->top];//栈顶内容输出  
		//printf("pop%f\n",f1);
		return f1;
	}
}
int pushStack_char(SqList_char* p, char str) {
   
	if (p->top >= maxsize) {
   

		return 1;
	}
	else
	{
   
		p->data[p->top++] = str;
		//printf("optrtop%d\n", p->top);
		return 1;
	}
}
int pushStack_float(SqList_float* p, float str) {
   
	if (p->top >= maxsize) {
   

		return 0;
	}
	else
	{
   
		p->data[p->top++] = str;
		//printf("opndtop%d\n", p->top);
		return 1;
	}
}
int compare(char a,char b)
  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值