C语言学习记录(11)逆波兰表示法

本文介绍了一种使用栈的数据结构解决逆波兰表达式求值问题的方法。通过将逆波兰表达式的运算符和操作数从左到右读取,利用栈进行临时存储和运算,最终得到表达式的值。文章提供了一个C语言实现的例子。

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

C语言学习记录

前言

一直自己没有学习做笔记的习惯,所以为了加强自己对知识的深入理解,决定将学习笔记写下来,希望向各位大牛们学习交流!

不当之处请斧正!在此感谢!这边就先从学习C语言写起,自己本身对程序语言方面不擅长,所以决定对此从基础开始学习,

大牛们对此文可以忽略!

学校OJ上的题目

逆波兰表示法

题目描述
有些计算器使用逆波兰表示法来书写数学表达式。在这一表示法中,运算符放置在操作数的后面而不是放置在操作数中间。例如:在逆波兰表示法中1+2将表示为1 2 +,而1+23将表示为1 2 3 * +。

逆波兰表达式可以很方便地用栈求值。算法从左向右读取运算符和操作数,并执行下列步骤:

(1)当遇到操作数时,将其压入栈中。

(2)当遇到运算符时,从栈中弹出它的操作数,执行运算并把结果压入栈中。

编写程序对逆波兰表达式求值。操作数都是个位的整数,运算符为+、-、
、/和=。

输入描述
在一行中输入逆波兰表达式。保证操作数都是个位的整数,运算符为+、-、、/和=。

输出描述
输出所求的值。

输入样例
123
+=
输出样例
7

解题: 用数组代替栈。
ps:他的输入样例真是一点用都没有。你可能要试试563+*3/1-=

#include <stdio.h>
#include <string.h>

void reverse(char a[]);

int main(int argc, char *argv[]) {
	char s[100];
	gets(s);
	reverse(s);
	return 0;
}

void reverse(char a[])
{
	int b[100],i,lenB=-1;
	
	for( i=0; i<=strlen(a); i++ )
	{
		if( a[i]>='0' && a[i]<='9' )
		{
			lenB++;
			b[lenB] = (int)a[i]-48;
		}
		else
		{
			switch( a[i] )
			{
				case '+': b[lenB-1] = b[lenB-1] + b[lenB]; lenB--; break;
				case '-': b[lenB-1] = b[lenB-1] - b[lenB]; lenB--; break;
				case '*': b[lenB-1] = b[lenB-1] * b[lenB]; lenB--; break;
				case '/': b[lenB-1] = b[lenB-1] / b[lenB]; lenB--; break;
				case '=': printf("%d",b[lenB]);
			}
		}
	}
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值