栈的应用 逆波兰式

#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#include
#include
#include
using namespace std;

enum Type
{
	OP_NUM,
	OP_SYMBOL,
};

enum SYMBOL
{
	ADD,
	SUB,
	MUL,
	DIV,
};

struct Cell
{
	Type _type;
	int _value;
};

#include 

int CountRNP(Cell a[], size_t size)
{
	assert(a);
	stack s;
	for (size_t i = 0; i < size; ++i)
	{
		if (a[i]._type == OP_NUM)
		{
			s.push(a[i]._value);
		}
		else
		{
			int right = s.top();
			s.pop();
			int left = s.top();
			s.pop();

			switch (a[i]._value)
			{
			case ADD:
				s.push(left + right);
				break;
			case SUB:
				s.push(left - right);
				break;
			case MUL:
				s.push(left*right);
				break;
			case DIV:
				s.push(left / right);
				break;
			}
		}
	}

	return s.top();
}

void TestRNP()
{
	//vector
	Cell a[] =
	{
		{ OP_NUM, 12 },
		{ OP_NUM, 3 },
		{ OP_NUM, 4 },
		{ OP_SYMBOL, ADD },
		{ OP_SYMBOL, MUL },
		{ OP_NUM, 6 },
		{ OP_SYMBOL, SUB },
		{ OP_NUM, 8 },
		{ OP_NUM, 2 },
		{ OP_SYMBOL, DIV },
		{ OP_SYMBOL, ADD },
	};
	cout << "运算结果:" << CountRNP(a, sizeof(a) / sizeof(Cell)) << endl;
}

int main()
{
	TestRNP();
	getchar();
	return 0;
}

本文标题:栈的应用 逆波兰式
当前地址:http://bzwzjz.com/article/iegspp.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 营销网站建设 成都网站建设 成都网站设计 成都网站设计 成都网站建设 成都网站制作 成都网站建设 成都定制网站建设 成都网站制作 app网站建设 重庆网站制作 手机网站制作设计 高端定制网站设计 营销型网站建设 成都网站建设 企业网站制作 定制网站建设多少钱 盐亭网站设计 网站建设方案 手机网站制作 企业网站设计 成都模版网站建设