北航计算机软件技术基础课程作业笔记【3】

news/2024/5/14 10:39:25

栈的出入顺序问题

题目

给出一个栈的输入顺序为:ABCDEFG,出栈顺序为CBDFGEA,画出其入栈、出栈的变化图

分析

这个意思就是给栈的输入顺序已知,但是并不是所有元素全部入栈之后才全部出栈,可以进C后立马出C再出B再入别的元素

一个动态演示:

操作栈内元素
入AA
入BAB
入CABC
出CAB
出BA

思路

这里采用模拟栈的思路,在待入栈的元素不为空时,一直读取栈顶元素,看是否等于该出栈的元素,不等于就继续入栈,以此循环。最后把栈里的全出来就结束了

简单使用c++的std模板中的deque和stack,来完成已知入栈和出栈顺序,判断入栈出栈操作流程:

#include <iostream>
#include <stack>
#include <string>
#include <vector>
#include <deque>
int main()
{//创建被模拟操作的栈std::stack<char>  my_stack;//用deque来做已知量的存储,方便后续直接读取头元素std::deque<char> in_order = {'A','B','C','D','E','F','G'};std::deque<char> out_order = {'C','B','D','F','G','E','A'};//用于存储结果,验证是否与out-order一致std::string res;//先往栈放一个,以免空栈调.top报错my_stack.push(in_order.at(0));in_order.pop_front();// 非空就继续while(!in_order.empty()){// std::cout << "top"<< my_stack.top()  << std::endl;// std::cout << "in"<< in_order.at(0)  << std::endl;//判断出的头是不是当前栈内元素if(my_stack.top() != out_order.at(0)){char in = in_order.at(0);my_stack.push(in_order.at(0));std::cout << "in:"<< in << std::endl;in_order.pop_front();}else{//不是则继续入栈char top = my_stack.top();my_stack.pop();out_order.pop_front();std::cout << "out:"<< top << std::endl;res+=top;//直到最后一个元素入栈,可以不要if(top == 'G')break;}}//把最后栈里的元素顺序弹出即可while(!my_stack.empty()){char top = my_stack.top();my_stack.pop();std::cout << "out:"<< top << std::endl;res+=top;}std::cout << res << std::endl;return 0;
}

最终输出结果:

in:B
in:C
out:C
out:B
in:D
out:D
in:E
in:F
out:F
in:G
out:G
out:E
out:A
CBDFGEA

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

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

相关文章

Qt小案例

工程概述 MainWindows 还是 Widget 在 Qt 中&#xff0c;创建 "MainWindow" 与 "Widget" 项目的主要区别在于他们的用途和功能范围&#xff1a; 1. MainWindow &#xff1a;这是一个包含完整菜单栏、工具栏和状态栏的主窗口应用程序框架。它适合于更…

以动态库链接库 .dll 探索结构体参数

Dev c C语言实现第一个 dll 动态链接库 创建与调用-CSDN博客 在写dll 插件中发现的函数指针用途和 typedef 的定义指针的用法-CSDN博客 两步之后&#xff0c;尝试加入结构体实现整体数据使用。 注意结构体 Ak 是相同的 代码如下 DLL文件有两个&#xff0c;dll.dll是上面提到…

密码学 总结

群 环 域 群 group G是一个集合&#xff0c;在此集合上定义代数运算*&#xff0c;若满足下列公理&#xff0c;则称G为群。 1.封闭性 a ∈ G , b ∈ G a\in G,b\in G a∈G,b∈G> a ∗ b ∈ G a*b\in G a∗b∈G 2.G中有恒等元素e&#xff0c;使得任何元素与e运算均为元素本…

IntelliJ IDEA 2024 激活版 集成开发环境(IDE)mac/win

IntelliJ IDEA 2024是一款由JetBrains公司开发的集成开发环境&#xff08;IDE&#xff09;&#xff0c;专为Java等编程语言量身打造&#xff0c;同时支持多种其他语言。该软件凭借其出色的智能化和高效性&#xff0c;赢得了广大开发者的喜爱。 mac软件下载&#xff1a;IntelliJ…

微服务项目sc2024通用Base工程

1. cloud-provider-payment8001 2.pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"ht…

Python第四次作业

周六&#xff1a; 1. 找出10000以内能被5或6整除&#xff0c;但不能被两者同时整除的数&#xff08;函数&#xff09; def find_number():for number in range(0,10000):if number % 5 0 or number % 6 0:if number % 5 ! number % 6:ls.append(number)print(ls)ls [] fin…