算法笔记-第七章-栈的应用(未完成)

算法笔记-第七章-栈的应用

  • 栈的基本常识
    • 栈的解释一
    • 栈的解释二
  • 栈的操作序列
  • 合法的出栈序列
  • 可能的出栈序列
    • 补充知识点
  • 后缀表达式(无优先级)

栈的基本常识

栈(Stack)是只允许在一端进行插入或删除操作的线性表。

栈的解释一

栈的解释二

栈的操作序列

在这里插入图片描述
在这里插入图片描述

//栈的压入和输出
#include<iostream>
#include<stack>
#include<string>
using namespace std;
int main()
{
    int n, x;
    string action;//字符串的定义
    cin >> n;
    stack<int> s;//栈s

    for (int i = 0; i < n; i++)
    {
        cin >> action;
        if (action == "push")//如果输入的是push则压入栈中
        {
            cin >> x;

            s.push(x);
        }
        else   
        {
            if (s.empty())   
            {
                cout <<-1 << endl;   
            }
            else   
            {
                cout << s.top() << endl;   
                s.pop();   
            }
        }
    }
    return 0;   

}

合法的出栈序列

在这里插入图片描述
在这里插入图片描述


//合法的出栈序列

#include <cstdio>
#include <stack>
using namespace std;

int main() 
{
    int n;
    scanf("%d", &n);
    stack<int> s;//栈

    int x, nowMax = 0;

    bool isValid = true;//布尔函数

    //已知:在入栈的时候任意 时刻都可以出栈,所以判断的条件为:
    //是否为合理出栈序列:在出栈的时候是否序列是合理的
    //如果合理则出栈,否则直接就是false(直接布尔函数判定为No)
    for (int i = 0; i < n; i++) 
    {
        scanf("%d", &x);

        if (x > nowMax) 
        {
            for (int j = nowMax + 1; j <= x; j++) 
            {
                s.push(j);
            }
            nowMax = x;
        }

        if (s.top() != x) 
        {
            isValid = false;  
            break;  
        }
        else  
        {
            s.pop();  
        }
    }
    printf(isValid ? "Yes" : "No");  
    return 0;  
}

可能的出栈序列

在这里插入图片描述

补充知识点

一:C++用vector来表示二维数组;必须先将vector定义为二维数组:vector A
二:定义

vector<vector<int> >a(n);   
初始化一个n*m的二维数组   
for (int i = 0; i < n; i++)   
{
    a[i].resize(m);   
}

二:赋值操作

//现在像二维数组那样赋值即可;  
for(int i=0;i<m;i++)  
	{
		for(int j=0;j<n;j++)  
		{
			a[i][j] = (3*i+j+1);  			
		}
	}

(抄录)-两个矩阵之和

//计算两个二维数组之和
#include <iostream>
#include <vector>
#include<cmath>
using namespace std;
vector<vector<int> > sum(vector<vector<int> > b, vector<vector<int> > c)
{
	//此处同样需要先将a定义为二维数组结构; 
	vector<vector<int> > a(4);
	for (int i = 0; i < 4; i++)
	{
		a[i].resize(3);
	}
	//	vector<int> a2;
	for (int i = 0; i < b.size(); i++)
	{
		for (int j = 0; j < b[i].size(); j++)
		{
			a[i][j] = b[i][j] + c[i][j];
		}
	}
	return a;
}

int main()
{
	//要先定义好二维数组结构,才能直接像二维数组一样赋值; 否则程序没办法往后面运行的; 
	vector<vector<int> > b1(4);
	vector<vector<int> > c1(4);
	//不能直接写 vector<vector<int> > a1;需要初始化大小; 
	vector<vector<int> > a1(4);

	for (int i = 0; i < 4; i++)
	{
		b1[i].resize(3);
	}
	for (int i = 0; i < 4; i++)
	{
		c1[i].resize(3);
	}
	for (int i = 0; i < 4; i++)
	{
		a1[i].resize(3);
	}

	//vector<vector<int> >赋值: 
	for (int i = 0; i < 4; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			b1[i][j] = (3 * i + j + 1);

		}
	}

	for (int i = 0; i < 4; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			c1[i][j] = 3 * i + j + 1;
		}
	}

	//显示vector<vector<int> >; 
	printf("Array b1: \n");
	for (int i = 0; i < 4; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			printf("b1[%d][%d] = %d\t", i, j, b1[i][j]);
		}
		cout << endl;
	}

	printf("Array c1: \n");
	for (int i = 0; i < 4; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			printf("c1[%d][%d] = %d\t", i, j, c1[i][j]);
		}
		cout << endl;
	}

	a1 = sum(b1, c1);
	printf("Array a1: \n");
	for (int i = 0; i < 4; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			printf("a1[%d][%d] = %d\t", i, j, a1[i][j]);  
		}
		cout << endl;  
	}

	system("pause");  
	return 0;  
}

后缀表达式(无优先级)

在这里插入图片描述
注意点:
答案是这样的:

#include <iostream>
#include <string>
using namespace std;

string toPostfixExpr(string infixExpr) {
    string result = "";
    result += infixExpr[0];
    for (int i = 2; i < infixExpr.length(); i += 4) {
        result += " ";
        result += infixExpr[i + 2];
        result += " ";
        result += infixExpr[i];
    }
    return result;
}

int main() {
    string expr;
    getline(cin, expr);
    cout << toPostfixExpr(expr);
    return 0;
}

但是我认为有一些问题**************************
正常的表达式子;
参考大佬讲解
中缀转换成后缀表达式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/142678.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基础大模型的结构特性与发展

摘要&#xff1a; 基础大模型的结构特性是什么给予的&#xff1f;在建模部分&#xff0c;我们将探索基础模型背后的底层架构&#xff0c;并确定5个关键属性。 首先&#xff0c;我们从讨论计算模型的表现力开始-捕获和吸收真实世界的信息&#xff0c;以及可扩展性-熟练地处理大量…

类和对象(4):Date类.运算符重载 1

一、赋值运算符重载 1.1 运算符重载 运算符重载是具有特殊函数名的函数&#xff0c;函数名字为&#xff1a;关键词operator需要重载的运算符符号。 不能重载C/C中未出现的符号&#xff0c;如&#xff1a;operator。重载操作符必须有一个类类型参数。不能改变用于内置类型运算…

【stack题解】逆波兰表达式求值 | 用队列实现栈

逆波兰表达式求值 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给你一个字符串数组 tokens &#xff0c;表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意&#xff1a; 有效的算符为 、-、…

《深入浅出进阶篇》——空间换时间优化——P2671 求和

链接&#xff1a;https://www.luogu.com.cn/problem/P2671 上题干&#xff1a; 题目描述 一条狭长的纸带被均匀划分出了n个格子&#xff0c;格子编号从11到n。每个格子上都染了一种颜色colori​用[1,m]当中的一个整数表示&#xff09;&#xff0c;并且写了一个数字numberi​。…

arm2 day6

串口实现单个字符的收发 main.c uart4.c uart4.h

手机厂商参与“百模大战”,vivo发布蓝心大模型

在2023 vivo开发者大会上&#xff0c;vivo发布自研通用大模型矩阵——蓝心大模型&#xff0c;其中包含十亿、百亿、千亿三个参数量级的5款自研大模型&#xff0c;其中&#xff0c;10亿量级模型是主要面向端侧场景打造的专业文本大模型&#xff0c;具备本地化的文本总结、摘要等…

HTML设置标签栏的图标

添加此图标最简单的方法无需修改内容&#xff0c;只需按以下步骤操作即可&#xff1a; 1.准备一个 ico 格式的图标 2.将该图标命名为 favicon.ico 3.将图标文件置于index.html同级目录即可 为什么我的没有变化&#xff1f; 答曰&#xff1a;ShiftF5强制刷新一下网页就行了

湖南省第六届大学生测绘综合技能大赛 GIS 应用赛项

注意事项&#xff1a; ①确认试题编号正确后再开始作答。 ②所有图件需清晰可辨。 ③新建数值型字段设置数据类型为双精度&#xff0c;数字格式为数值&#xff0c;小数位数默认。 ④答卷中不能出现任何涉密信息&#xff0c;答卷文档转成PDF提交。 1.&#xff08;25 分&#xf…

Oracle数据库、实例、用户、表空间和表之间的关系

一、Oracle数据库中数据库、实例、用户、表空间和表&#xff08;索引、视图、存储过程、函数、对象等对象&#xff09;之间的关系。 1、Oracle的数据库是由一些物理文件组成&#xff1a;数据文件控制文件重做日志文件归档日志文件参数文件报警和跟踪日志文件备份文件。 2、实…

数据库 并发控制

多用户数据库系统&#xff1a;允许多个用户同时使用同一个数据库的数据库系统 交叉并发方式&#xff1a;在单处理机系统中&#xff0c;事务的并行执行实际上是这些并行事务的并行操作轮流交叉运行 同时并发方式&#xff1a;在多处理机系统中&#xff0c;每个处理机可以运行一个…

云原生实战课大纲

1. 云原生是什么 原生应用&#xff08;java,pyrhon&#xff09; 上云的过程应用上云遇到的问题1.微服务的拆分 微服务的访问关系应用的架构云原生适合什么样的人去学具备什么样的前提条件云原生要学习什么docker k8s devlops server mesh jks k8s监控吧自己的微服务上云另…

【C语言】

C语言 1. C语言基础1.1 数据类型和占位符1.2 异或1.3 关键字1.4 const1.5 extern1.6 typedef1.7 static1.8 左值和右值1.9 位进行操作赋值 2. C指针3. 二维数组和指针4. 函数传递二维数组4.1 形参给出第二维的长度。4.2 形参声明为指向数组的指针。4.3 形参声明为指针的指针。 …

如何使用免费的 Vecteezy 旅行视频

网址&#xff1a;https://www.vecteezy.com/ Vecteezy 是一个提供免费和付费矢量图形、模板、视频和其他创意资源的网站。该网站拥有大量旅行视频&#xff0c;可用于各种目的&#xff0c;例如个人使用、商业用途或教育用途。 要下载 Vecteezy 的免费旅行视频&#xff0c;请按…

阿里云服务器u1和经济型e实例有什么区别?

阿里云服务器ECS经济型e实例和通用算力型u1实例有什么区别&#xff1f;如何选择&#xff1f;ECS经济型e实例是共享型云服务器&#xff0c;通用算力型u实例是企业级独享型云服务器&#xff0c;e实例性价比高&#xff0c;现在2核2G3M带宽一年99元&#xff0c;云服务器u1价格相对要…

什么是权限?(Linux篇)

前言 其实我们在学会运用一些简单的Linux指令之后&#xff0c;我们可以简单的用ls查看当前目录的文件有哪些啊&#xff0c;可以使用tree用树形结构查看目录&#xff0c;可以使用touch来创建文件&#xff0c;用mkdir创建目录&#xff0c;可以使用rm来删除目录和文件&#xff0c;…

C#,数值计算——多项式计算,Poly的计算方法与源程序

1 文本格式 using System; using System.Text; namespace Legalsoft.Truffer { /// <summary> /// operations on polynomials /// </summary> public class Poly { /// <summary> /// polynomial c[0]c[1]xc[2]x^2 ..…

高频SQL50题(基础题)-5

文章目录 主要内容一.SQL练习题1.602-好友申请&#xff1a;谁有最多的好友代码如下&#xff08;示例&#xff09;: 2.585-2016年的投资代码如下&#xff08;示例&#xff09;: 3.185-部门工资前三高的所有员工代码如下&#xff08;示例&#xff09;: 4.1667-修复表中的名字代码…

数据库恢复技术

事务 含义&#xff1a;用户定义的一个数据库操作序列&#xff0c;这些操作要么全做&#xff0c;要么全不做&#xff0c;是一个不可分割的工作单位 地位&#xff1a;恢复和控制并发的基本单位 区分事务和程序&#xff0c;一个程序中包含多个事务 定义事务 事务的开始与结束…

[linux网络实验] 多网卡绑定

聚合链路技术 什么是bonding 提供了一种将多个网络接口设备绑定到一个网络接口的方法。这可用于网络负载平衡和网络冗余&#xff1b; 实现将两个网卡虚拟成一个网卡。这种聚合设备看起来就像一个以太网接口设备。通俗地说&#xff0c;这意味着两个网卡拥有相同的 IP 地址&am…

PostgreSQL 机器学习插件 MADlib 安装与使用

MADlib 一个可以在数据库上运行的开源机器学习库&#xff0c;支持 PostgreSQL 和 Greenplum 等数据库&#xff1b;并提供了丰富的分析模型&#xff0c;包括回归分析&#xff0c;决策树&#xff0c;随机森林&#xff0c;贝叶斯分类&#xff0c;向量机&#xff0c;风险模型&#…