数据结构--【栈与队列】笔记

栈的应用【实验题】

使用栈实现后缀表达式计算,其中,在后缀表达式中,输入的数字为整数,且为正数,数字、符号之间用空格隔开,整个后缀表达式用"#"表示结束。其中,整个后缀表达式长度不超过200,每个数字位数不超过10。

提示:读取数据的过程中,可以利用栈处理每个数字。

输入样例:

11 2 3 + * #(注:对应的中缀表达式是11*(2+3))

6 2 3 + * 5 / 7 - #(注:对应的中缀表达式是6*(2+3)/5-7)

输出样例:

55

-1

cpp 复制代码
#include<iostream>
#include<string>
using namespace std;
struct stack
{
	int a[300];
	int index = -1;
	void instack(int x)  //入栈操作
	{
		a[++index] = x;
	}
	void calculate(char k)  //k是运算符
	{
		int sum = 0;
		int k1, k2;
		k1 = showtop(); outstack();
		k2 = showtop(); outstack();
		if (k == '+')
		{
			sum = k1 + k2;
		}
		else if (k == '-')
		{
			sum = k2 - k1;
		}
		else if (k == '*')
		{
			sum = k1 * k2;
		}
		else if (k == '/')
		{
			sum = k2 / k1;
		}
		instack(sum);
	}
	void outstack() //出栈
	{
		index--;
	}
	int showtop()  //显示栈顶字符
	{
		return a[index];
	}
};
int main()
{
	stack f;
	string b;
	while (cin >> b && b != "#")
	{
		if (b == "+" || b == "-" || b == "*" || b == "/")
		{
			f.calculate(b[0]);
		}
		else
		{
			int num = stoi(b);
			f.instack(num);
		}
	}
	cout << f.showtop() << endl;
	return 0;
}

整体还是很简单的,主要操作步骤如下

1.写一个栈的结构,这里面设置栈结构(a[]数组),index索引指向目前栈顶,并包含入栈、出栈、显示栈顶字符操作

2.输入字符

3.写运算calculate函数

要注意的问题是cin可以隔断输入的string b,此时比如单个输入的"11"就是要给字符串b

cpp 复制代码
string b;
	while (cin >> b && b != "#")
	{
		if (b == "+" || b == "-" || b == "*" || b == "/")
		{
			f.calculate(b[0]);
		}
		else
		{
			int num = stoi(b);
			f.instack(num);
		}
	}

同时calculate()也可以用switch写,更简洁一些

cpp 复制代码
 void calculate(char k) {
        int right = a[index--]; // 右操作数(栈顶)
        int left = a[index--];  // 左操作数(次栈顶)
        int sum = 0;
        switch(k) {
            case '+': sum = left + right; break;
            case '-': sum = left - right; break;
            case '*': sum = left * right; break;
            case '/': sum = left / right; break; // 修正为 left / right
        }
        a[++index] = sum; // 结果入栈
    }
相关推荐
XQ丶YTY15 分钟前
TCP/UDP协议原理和区别 笔记
笔记·tcp/ip·udp
孞㐑¥41 分钟前
Linux之基础IO
linux·开发语言·c++·经验分享·笔记
丁一郎学编程1 小时前
优先级队列(堆)
java·数据结构
Codeking__1 小时前
前缀和——中心数组下标
数据结构·算法
GG不是gg2 小时前
数据结构:二叉树一文详解
数据结构·青少年编程
花火QWQ2 小时前
图论模板(部分)
c语言·数据结构·c++·算法·图论
姬公子5213 小时前
leetcodehot100刷题——排序算法总结
数据结构·c++·算法·排序算法
jackson凌3 小时前
【Java学习笔记】【第一阶段项目实践】房屋出租系统(面向对象版本)
java·笔记·学习
卓律涤4 小时前
【找工作系列①】【大四毕业】【复习】巩固JavaScript,了解ES6。
开发语言·前端·javascript·笔记·程序人生·职场和发展·es6
love530love4 小时前
【笔记】记一次PyCharm的问题反馈
ide·人工智能·windows·笔记·python·pycharm