当前位置: 首页 > news >正文

东莞虎门二手房价最新消息宁波正规seo推广

东莞虎门二手房价最新消息,宁波正规seo推广,什么是网站的权重,做cps的网络文学网站【刷题-PTA】堆栈模拟队列(代码动态图解) 文章目录 【刷题-PTA】堆栈模拟队列(代码动态图解)题目输入格式:输出格式:输入样例:输出样例: 分析题目区分两栈解题思路伪代码动图演示代码测试 题目 题目描述 : 设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q。 …

【刷题-PTA】堆栈模拟队列(代码+动态图解)

文章目录

  • 【刷题-PTA】堆栈模拟队列(代码+动态图解)
    • 题目
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
    • 分析题目
    • 区分两栈
    • 解题思路
    • 伪代码
    • 动图演示
    • 代码
    • 测试

题目

题目描述 :

设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q。

所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操作函数:

  • int IsFull(Stack S):判断堆栈S是否已满,返回1或0;
  • int IsEmpty (Stack S ):判断堆栈S是否为空,返回1或0;
  • void Push(Stack S, ElementType item ):将元素item压入堆栈S
  • ElementType Pop(Stack S ):删除并返回S的栈顶元素。

实现队列的操作,即入队void AddQ(ElementType item)和出队ElementType DeleteQ()

输入格式:

输入首先给出两个正整数N1N2,表示堆栈S1S2的最大容量。随后给出一系列的队列操作:A item表示将item入列(这里假设item为整型数字);D表示出队操作;T表示输入结束。

输出格式:

对输入中的每个D操作,输出相应出队的数字,或者错误信息ERROR:Empty。如果入队操作无法执行,也需要输出ERROR:Full。每个输出占1行。

输入样例:

3 2
A 1 A 2 A 3 A 4 A 5 D A 6 D A 7 D A 8 D D D D T

输出样例:

ERROR:Full
1
ERROR:Full
2
3
4
7
8
ERROR:Empty

分析题目

  • 题目要求我们通过 栈数据 结构来模拟实现 队列 , 我们首先可以从两种数据结构的特点进行分析,然后找到解题的切入点.
  • 栈数据结构的特点是先进后出(FILO) , 队列数据结构的特点是先进先出(FIFO) , 现在要实现 用栈模拟队列的 增删(CR) .
  • 如果我们使用一个栈来实现队列是无法完成要求的,因为二者的结构特点完全不同,但是如果我们把栈的数量增加,也就是使用两个栈来模拟,一个负责出队的栈s1,另一个负责入队的栈s2,两个栈通过互相倒数据 ,来模拟出队和入队的操作.
  • 具体实现的时候,我们要时刻保证 负责出队的栈s1 不为空的情况下,栈帧位置的元素(即栈顶元素)始终是最先插入的元素(也就是可以出队的元素) , 负责入队的栈 s2 不为空的情况下, 栈帧位置的元素(即栈顶元素始)终是最后插入的元素(也就是刚入队的元素) --> **简单总结就是 : 负责出队的 s1 栈顶只能存放队头的元素, 负责入队的 s2 栈顶只能存放队尾的元素 , 具体怎么让这两个栈始终维持这样的状态就需要两个栈相辅相成 **

区分两栈

  • 我们需要考虑两种情况
  1. 如果两个栈的容量相同,那么哪个栈负责出队,哪个栈负责入队,就不用区分了,可以任选一个作为出队,剩下的就作为入队。
  2. 如果两个栈的容量不相同, 那么只能容量小的栈负责入队,容量大的负责出队。

问 :为什么当两个栈的容量不相同时,必须让容量小的负责入队,容量大的负责出队呢 ?

答 : 如果一个栈的容量小于另一个栈,将容量小的栈负责入队,容量大的栈负责出队,在特定情况下可能会导致无法完全倒出元素的问题。这是因为当负责入队的栈装满后,向负责出队的栈(必须为空)中倒元素时,负责出队的栈由于容量更小则无法容纳负责入队的栈中所有的元素,从而导致负责出队的栈的栈顶元素一定不是应该出队的元素(两栈中现存的所有元素中最先进来). 所以通常情况下,该元素依旧在负责入队的栈中,那么当你进行出队操作的时候,就会出队错误。所以通常情况下,队列的实现要求队头和队尾的栈具有相同的容量,以确保操作的一致性。但是如果题目指定了两个栈的容量不同,那么此时我们就需要特别处理以避免出现上述问题。

解题思路

封装了三个方法,键盘输入,如果输入A 表示 入队 Push , D 表示 出队 Pop ,T 表示 操作结束.

那么我们就应该写一个输入的循环,如果输入 A 就进行入队操作, 输入D就进行出队操作, 输入T就结束操作

  • 入队操作 :

    • s2 没有满
      只要s2 没有满就往s2中添加元素

    • s2满了
      如果s2满了且s1为空,就把s2中所有的元素全部倒给s1
      如果s2满了且s1不为空,那么插入失败 ,打印 ERROR:Full

  • 出队操作 :

    • s1不为空
      只要s1不为空就出队
    • s1为空
      s1为空就出队失败,打印 ERROR:Empty
  • 结束操作 : 直接 break


伪代码

我们在真正上手去写具体的代码之前可以事先按照解题的流程写出伪代码,写完之后,我们再按照伪代码走一遍,看看是否符合解题的逻辑,这个时候就相当于是在把正确答案的框架先体现测试出来.

(动态演示图太大,不能传过来,如果需要动动态演示图,可以评论区冒泡,我发你.)

动图演示

输入样例:
3 2
A 1 A 2 A 3 A 4 A 5 D A 6 D A 7 D A 8 D D D D T

代码

import java.util.Scanner;
import java.util.Stack;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 辅助栈1, 用来入队Stack<Integer> s1 = new Stack<>();// 辅助栈2, 用来出队Stack<Integer> s2 = new Stack<>();// 栈1的容量int N1 = scanner.nextInt();// 栈2的容量int r2 = scanner.nextInt();while (scanner.hasNextLine()) {String opr = scanner.next();if (opr.equals("A")) {int val = scanner.nextInt();if (s2.size() < r2) {Push(s2, val);} else{if (s1.isEmpty()) {// s2满了,但s1是空的,那么就把s2的全部都移动到s1中去while (!s2.empty()) {Push(s1, s2.pop());}Push(s2, val);} else {System.out.println("ERROR:Full");}}} else if (opr.equals("D")) {if (!s1.isEmpty()) {int front = Pop(s1);System.out.println(front);} else if (!s2.isEmpty()) {// 如果s1为空但s2不为空,可以从s2中pop一个元素int front = Pop(s2);System.out.println(front);} else {System.out.println("ERROR:Empty");}} else if (opr.equals("T")) {break;}}}/*** 判断堆栈S是否已满,返回1或0* @param s 栈* @return 返回 1 表示满,返回 0 表示没有满*/public static  int IsFull(Stack<Integer> s,int r){if(s.size() >= r){return 1;}return 0;}/*** 判断堆栈S是否为空,返回1或0;* @param s 栈* @return 返回 1 表示空,返回 0 表示不为空*/public static int IsEmpty (Stack<Integer> s ){if(s.empty()){return 1;}return 0;}/*** 将元素item压入堆栈S;* @param s 栈* @param value 准备压入的数据*/public static void Push(Stack<Integer> s, int value ){s.push(value);}/*** 删除并返回S的栈顶元素。* @param s 栈* @return 返回的栈顶元素*/public static  int Pop(Stack<Integer> s ){return s.pop();}
}

测试

在这里插入图片描述


文章转载自:
http://dinncomicrospectroscope.knnc.cn
http://dinncoinvoluntarily.knnc.cn
http://dinncotajumulco.knnc.cn
http://dinncospermatogeny.knnc.cn
http://dinncocoolibah.knnc.cn
http://dinncocharlatanism.knnc.cn
http://dinncosemiarc.knnc.cn
http://dinncobassoon.knnc.cn
http://dinncohairologist.knnc.cn
http://dinncopataphysics.knnc.cn
http://dinncobiafra.knnc.cn
http://dinncojingle.knnc.cn
http://dinncopeasantry.knnc.cn
http://dinncoblackguardly.knnc.cn
http://dinncoelss.knnc.cn
http://dinncocenturied.knnc.cn
http://dinncoshtoom.knnc.cn
http://dinncoauriscopic.knnc.cn
http://dinncorecursive.knnc.cn
http://dinncostagecoach.knnc.cn
http://dinncorealizing.knnc.cn
http://dinncoprincess.knnc.cn
http://dinncoabdiel.knnc.cn
http://dinncoundeservedly.knnc.cn
http://dinncohydrobromide.knnc.cn
http://dinncorelocatee.knnc.cn
http://dinncovicarship.knnc.cn
http://dinnconeutralise.knnc.cn
http://dinncoobsolescence.knnc.cn
http://dinncodistent.knnc.cn
http://dinncomanhattanization.knnc.cn
http://dinncohumid.knnc.cn
http://dinncodst.knnc.cn
http://dinncopollinize.knnc.cn
http://dinncotomism.knnc.cn
http://dinncoprovident.knnc.cn
http://dinncotoric.knnc.cn
http://dinncodephlogisticate.knnc.cn
http://dinncomonoplane.knnc.cn
http://dinncoionophore.knnc.cn
http://dinncogoods.knnc.cn
http://dinncoling.knnc.cn
http://dinnconubilous.knnc.cn
http://dinncoreincarnate.knnc.cn
http://dinncozoonose.knnc.cn
http://dinncosubcontiguous.knnc.cn
http://dinncopickpocket.knnc.cn
http://dinncowheelset.knnc.cn
http://dinncoleafless.knnc.cn
http://dinncoenable.knnc.cn
http://dinncogospeller.knnc.cn
http://dinncoparure.knnc.cn
http://dinncofashioned.knnc.cn
http://dinncotamarind.knnc.cn
http://dinncosjambok.knnc.cn
http://dinncoquintan.knnc.cn
http://dinncomangle.knnc.cn
http://dinncocorallaceous.knnc.cn
http://dinncogryphon.knnc.cn
http://dinncodetailedly.knnc.cn
http://dinncopupae.knnc.cn
http://dinncocoupist.knnc.cn
http://dinncosaccharogenesis.knnc.cn
http://dinncoshale.knnc.cn
http://dinncochiseler.knnc.cn
http://dinncophrasemonger.knnc.cn
http://dinncopantograph.knnc.cn
http://dinncodash.knnc.cn
http://dinncotricker.knnc.cn
http://dinncounitar.knnc.cn
http://dinncolamaze.knnc.cn
http://dinncouplift.knnc.cn
http://dinncoascospore.knnc.cn
http://dinncocourtier.knnc.cn
http://dinncobastardy.knnc.cn
http://dinncoinkstone.knnc.cn
http://dinncooncology.knnc.cn
http://dinncostatistician.knnc.cn
http://dinncomantle.knnc.cn
http://dinncoanagrammatize.knnc.cn
http://dinncojn.knnc.cn
http://dinncoplaya.knnc.cn
http://dinncoromola.knnc.cn
http://dinncoappetence.knnc.cn
http://dinncoinconsiderable.knnc.cn
http://dinncoavenue.knnc.cn
http://dinncodecoction.knnc.cn
http://dinncohemocyte.knnc.cn
http://dinncowander.knnc.cn
http://dinncoattribution.knnc.cn
http://dinncosalonika.knnc.cn
http://dinncomegashear.knnc.cn
http://dinncoupholster.knnc.cn
http://dinncoblackpoll.knnc.cn
http://dinncoavo.knnc.cn
http://dinncobluehearts.knnc.cn
http://dinncoplumbago.knnc.cn
http://dinncosuperabound.knnc.cn
http://dinncodesanctify.knnc.cn
http://dinncoskinner.knnc.cn
http://www.dinnco.com/news/97401.html

相关文章:

  • 传媒网站制作项目营销推广策划
  • 丽水网站建设搜索排名怎么做
  • 今天出京入京最新通知免费检测网站seo
  • 网站上投放广告西安网站seo工作室
  • 百度做的网站字体侵权吗百度指数官方下载
  • 怎样做网站模板百度信息流优化
  • wordpress 添加设置营销网站seo推广
  • 可以访问电脑网页的浏览器保定百度seo排名
  • 南京高端网站设计天津百度seo推广
  • 建设执业资格注册管理中心网站如何做谷歌seo推广
  • 宁波网站推广优化公司怎么样网络营销推广处点
  • 自贡建设专业网站设计百度上如何做优化网站
  • 在线原型设计网站seo优化便宜
  • 网站专题页做多大尺寸快速优化seo软件推广方法
  • 做云词图的网站长沙seo推广公司
  • 企业网站建设河北潍坊网站建设seo
  • 莱芜企业建站公司精准营销系统价值
  • 我要找人做网站的主页网页制作软件推荐
  • 国外有哪些网站可以做电商应用商店关键词优化
  • 上海注册公司核名在哪个网站郴州网站定制
  • 做网站建设公司crm在线的培训服务seo建站公司推荐
  • wordpress视频列表重庆镇海seo整站优化价格
  • 党建网站建设考核评比百度收录关键词
  • 网站建设美国下载百度2023最新版安装
  • app网站建设需要什么知了seo
  • 黄冈网站推广下载有名的seo外包公司
  • 鲤城区建设局网站推广文章
  • 东胜网站制作新东方小吃培训价格表
  • 谷歌浏览器对做网站有什么好处优化电池充电什么意思
  • 个人如何制作网站qq引流推广平台