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

news2024/11/27 13:43:53

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

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

栈的基本常识

栈(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;
}

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue dev-tools的安装

安装 Vue 开发者工具&#xff0c;装插件调试Vue应用 1.通过谷歌应用商店来进行安装&#xff08;国外网站&#xff09; 2.极简插件&#xff1a; 搜索 Vue -> 下载解压 -> 浏览器扩展模式打开&#xff0c;开发者模式 -> 将解压的CRX文件拖拽安装 -> 插件详情 &…

YOLOV8目标识别——详细记录从环境配置、自定义数据、模型训练到模型推理部署

一、概述 Yolov8建立在Yolo系列历史版本的基础上&#xff0c;并引入了新的功能和改进点&#xff0c;以进一步提升性能和灵活性。Yolov8具有以下特点&#xff1a; 高效性&#xff1a;Yolov8采用了新的骨干网络、新的Ancher-Free检测头和新的损失函数&#xff0c;可在CPU到GPU的…

在SpringBoot中使用EhCache缓存

在使用EhCache缓存之前&#xff0c;我们需要了解的是EhCache缓存是啥&#xff1f; Ehcache的概述 Ehcache是一个开源的Java缓存框架&#xff0c;用于提供高效的内存缓存解决方案&#xff0c;他可以用于缓存各种类型的数据&#xff0c;包括对象&#xff0c;查询结果&#xff0…

软件测试行业趋势分析

1 绪论 本文先对互联网对时代和社会变革进行了论述&#xff0c;然后再由互联网时代对软件工业模式变革进行了介绍&#xff0c;最后引出附属于软件工业的测试行业在新形势下的需求变化&#xff0c;并对趋势进行了分析&#xff0c;并最终给出了相关的从业人员的职业发展建议。 …

3DMAX建模基础教程:实例与复制

3D Studio Max&#xff0c;或称3DMAX&#xff0c;是一种专业的三维计算机图形软件&#xff0c;被广泛应用于电影、电视、游戏开发等领域。以下是一份关于3DMAX建模基础教程的实例与复制的详解。 3D模型实例化 实例化是一种重复使用相同对象的技术&#xff0c;而无需每次都创建…

搭建网站选择弹性云服务器

​ 弹性云服务器已成为建站的首选方案&#xff0c;弹性云服务器并从成本、灵活性、可扩展性和安全性等多个角度进行分析。 一、成本控制弹性云服务器以其优势的弹性计费模式&#xff0c;在建站初期成本控制中占据了重要地位。与传统的物理服务器相比&#xff0c;弹性云服务器可…

深度对话:以实在RPA Agent智能体安全机制破解LLM应用谜题

AI大模型席卷全球&#xff0c;为各个行业带来了颠覆式创新机遇&#xff0c;同时也打开了未知的潘多拉魔盒。随着大语言模型能力的不断增强和适用范围延伸&#xff0c;大模型本身带来的隐私泄漏、数据安全等问题越发成为各大厂商关注的核心&#xff0c;引发了各界更多的思考与发…

软件测试 —— 常见的自动化测试架构!

一个自动化测试架构就是一个集成体系&#xff0c;其中定义了一个特殊软件产品的自动化测试规则。这一体系中包含测试功能函数库、测试数据源、测试对象识别标准&#xff0c;以及各种可重用的模块。这些组件作为小的构建模块&#xff0c;被组合起来代表某种商业流程。自动化测试…

组件库篇 | EUI | 快速上手

组件库篇 | EUI | 快速上手 导入组件库 仅需三个步骤便可以导入组件库&#xff1a; 进入main.cpp所在目录&#xff0c;将EUI文件夹复制到该目录下 双击sln文件使用vs打开项目&#xff0c;右键项目名-添加-新建筛选器&#xff0c;命名为EUI 将第1步导入的EUI文件夹拖入到第2步…

做C语言的编程题总是想骂人怎么办?

做C语言的编程题总是想骂人怎么办&#xff1f; 可能C语言的编程题难住了您吧&#xff0c;导致情绪激烈不平静&#xff0c;那么做C语言的编程题可以顺利-些吗? 当然有一些方法可是现实此目标的:最近很多小伙伴找我&#xff0c;说想要一些C语言的资料&#xff0c;然后我根据自己…

K8S的基础知识

K8S的意义与入门 专有名词 容器:包含了运行一个应用程序所需要的所有东西,包括:代码、运行时、各种依赖和配置。pod:K8s调度的最小单元,包含一个或多个容器。一个容器组中的容器具有紧密耦合性,共享资源,存储空间和IP。即同一个容器组中的容器可以通过localhost:xxx访问…

【C++初阶(八)】C/C++内存管理详解

本专栏内容为&#xff1a;C学习专栏&#xff0c;分为初阶和进阶两部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握C。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&…

C 语言指针怎么理解?

今日话题&#xff0c;C 语言指针怎么理解&#xff1f;让我用更简洁的方式来表达这个内容&#xff1a;就像桌面上的快捷方式一样&#xff0c;指针也可以有多层引用。我们可以将指针比作快捷方式的图标&#xff0c;快捷方式可以指向游戏&#xff08;普通指针&#xff09;&#xf…

人工智能基础_机器学习030_ElasticNet弹性网络_弹性回归的使用---人工智能工作笔记0070

然后我们再来看elastic-net弹性网络,之所以叫弹性是因为,他融合了L1和L2正则,可以看到 他的公式 公式中有L1正则和L2正则两个都在这个公式中 可以看到弹性网络,在很多特征互相联系的时候,非常有用,比如, 相关性,如果数学好,那么物理也好,如果语文好,那么英语也好 这种联系 正…

制作这种在线宣传画册,可轻松收获客户!

制作企业宣传画册&#xff0c;首先要了解企业制作宣传画册的需求以及展示方向&#xff0c;如今互联网时代&#xff0c;宣传画册的制作也应该要创新&#xff0c;而制作一本在线电子宣传画册用于线上宣传是非常有必要的。如何制作呢&#xff1f; 我们 可以使用FLBOOK平台在线制作…

bfc 简单理解及应用

1、概念 bfc 是 Block formatting context 的缩写&#xff0c;也就是块级格式化上下文&#xff0c;就是让元素形成独立的渲染区域&#xff0c;bfc容器内部的渲染对外部不会有影响。 2、形成bfc的常见条件 浮动 设置元素具有float: left/right绝对/固定定位&#xff1a;posit…

keepalived 的安装部署及使用详细完整版

架构 1.安装 yum install keepalived -ysystemctl enable keepalivedsystemctl restart keepalivedsystemctl status keepalived2.部署配置样例 vim /etc/keepalived/keepalived.conf global_defs {router_id PROXYSQL_HAscript_user rootenable_script_security } vrrp_scri…

js案例:跟随鼠标移动的大虫子

目录 效果预览图 整体思路 完整代码 效果预览图 整体思路 rang 函数用于生成指定范围内的随机整数。 通过循环&#xff0c;创建了50个div元素&#xff0c;每个div都有一个不同的数字和随机的背景颜色。 给每个div元素添加了名为 "ball" 的类名。 通过 documen…

为什么说葡萄酒越复杂,越有可能陈年?

大家都觉得老酒更好&#xff0c;对吧&#xff1f;一瓶酒在黑暗的洞穴里放得越久&#xff0c;瓶子慢慢积灰&#xff0c;我们喝的时候就越好喝&#xff0c;对吗&#xff1f;其实是不对的&#xff01;葡萄酒陈酿的根本原因是为了让它的味道更好&#xff0c;或者更确切地说让风味发…

一文懂得电源模块过温保护测试方法 ate测试软件助力测试

过温保护测试是电源模块保护功能测试项目之一&#xff0c;也是电源模块测试的重要测试指标&#xff0c;以保证电源模块过温保护功能正常&#xff0c;确保电源模块不受损坏。用ate测试软件测试电源模块过温保护&#xff0c;不仅可以保证测试结果的准确性&#xff0c;还可以多维度…