逆波兰运算符和转换中缀表达式 (C语言编写逆波兰计算器) ------- 算法笔记011

本文介绍了逆波兰表达式及其在C语言中的实现,演示了一个简单的逆波兰计算器DEMO。还详细阐述了如何将中缀表达式转换为后缀表达式,通过举例展示了转换过程,并证明了后缀表达式的正确性。最后,提供了最终实现逆波兰运算器的代码及运行结果。
摘要由CSDN通过智能技术生成

逆波兰表达式

在这里插入图片描述

编程思路

我们可以输入一段逆波兰表达式,然后程序循环读取单个字符,判断字符是数字范围的还是计算符。当读到的是数字范围时我们将其入栈,当读到的是计算字符我们将前面的两个数Pop出来进行对应的计算,最后再将其入栈。

Demo1实现代码
#include <stdio.h>
#include <stdlib.h>

#define MAX_NUM_STACK 10 
#define error 0
#define ok 1
#define MAX_SIZE 10

typedef double ElemType;
typedef int Status;

typedef struct stack{
   
	
	ElemType *top;
	ElemType *base;
	int stackSize;
	
}Stack,*stackList;
 
 
Status Pop(Stack *stack,ElemType *e){
   
	
	if(stack->top==stack->base){
   
		printf("栈空空如也!\n");
		return error;
	}
	
	*e=*(--stack->top); 
	stack->stackSize++;
	return ok;
} 

Status Push(Stack *stack,ElemType e){
   
	if(stack->stackSize<=0)
		stack->top=(ElemType *)malloc(sizeof(ElemType)*MAX_NUM_STACK);
	
	if(!stack->top)
		return error;
	
	*stack->top=e;
	stack->top++;		
	stack->stackSize--;	
	return ok;
}
 
Status InitStack(Stack *stack){
   
	
	stack->base=(ElemType *)malloc(sizeof(ElemType)*MAX_NUM_STACK);
	if(!stack->base)
		return error;
	
	stack->top=stack->base;
	stack->stackSize=MAX_NUM_STACK;
	return ok;
	
} 
 
void PrintTitle(char*title,char*name,char*date){
   
	printf("---------------------%s----------------------------------\n",title);
	printf("\n");
	printf("作者:%s\n",name);
	printf("日期:%s\n\n",date);
	printf("----------------------------------------------------------\n");
	
}

int main(int argc, char *argv[]) {
   
	
	
	PrintTitle("逆波兰计算器","Changlon","2019-12/19");  //程序信息
	
	Stack stack;
	int s=InitStack(&stack); //初始化栈内存
	if(!s){
   
	     printf("内存出错!");
	     return 0;		
	}
	char in; //每次接受一个字符
	char buffer[MAX_SIZE]; //定义字符串缓冲区
	int i=0;
	double c1,c2;
	double e; //最终要输出的计算值
	printf("请输入一段逆波兰表达式 (以#结束):");
	scanf("%c",&in);
	while(in!='#'){
   		
		switch(in){
   
			//当检测到计算符时,取出前面两个数进行计算,并入栈
			case '+':
				Pop(&stack,&c1);
				Pop(&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智者_若愚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值