首页 > 编程语言 >算法-栈和队列

算法-栈和队列

时间:2024-03-04 11:01:05浏览次数:27  
标签:队列 stackin pop int 算法 stackout empty

1. 用栈实现队列(LeetCode 232)

题目:请你仅使用两个栈实现队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):
实现 MyQueue 类:

  • void push(int x) 将元素 x 推到队列的末尾
  • int pop() 从队列的开头移除并返回元素
  • int peek() 返回队列开头的元素
  • boolean empty() 如果队列为空,返回 true ;否则,返回 false
    思路
  • 用stackin和stackout两个栈模拟队列
  • 在dumpstackin时,需要先确认stackout是否为空;只有stackout为空时才能将stackin中的内容压入

java

  • Stack常用函数:push(), pop(), empty(), peek()(返回栈顶元素,但不删除)
class MyQueue {
    // 用两个栈模拟队列
    Stack<Integer> stackin;
    Stack<Integer> stackout;

    public MyQueue() {
        stackin = new Stack<>();
        stackout = new Stack<>();
    }
    
    public void push(int x) {
        stackin.push(x);
    }
    
    // 将stackin中的元素全部放到stackout中
    private void dumpstackin(){
        //stackout清空后才能继续压入,否则顺序会出现问题
        if(!stackout.empty())   return;
        while (!stackin.empty()){
            stackout.push(stackin.pop());
        }
    }

    //移除并返回队列开头元素
    public int pop() {
        dumpstackin();
        return stackout.pop();
    }
    
    //返回队列开头元素
    public int peek() {
        dumpstackin();
        return stackout.peek();
    }
    
    public boolean empty() {
        return stackin.empty() && stackout.empty();
    }
}

标签:队列,stackin,pop,int,算法,stackout,empty
From: https://www.cnblogs.com/hifrank/p/18051395

相关文章

  • 文心一言 VS 讯飞星火 VS chatgpt (207)-- 算法导论15.4 4题
    四、说明如何只使用表c中2*min(m,n)个表项及O(1)的额外空间来计算LCS的长度。然后说明如何只用min(m,n)个表项及O(1)的额外空间完成相同的工作。要写代码的时候,请用go语言。文心一言:在只使用2*min(m,n)个表项和O(1)额外空间来计算LCS(LongestCommonSubsequence)的长......
  • 第二节:栈相关(二叉树展开为链表、逆波兰表达式、两栈实现队列结构)
    一.        二.        三.         !作       者:Yaopengfei(姚鹏飞)博客地址:http://www.cnblogs.com/yaopengfei/声     明1:如有错误,欢迎讨论,请勿谩骂^_^。声     明2:原创博客请在转载......
  • 复习:基础算法
    前段时间一直懒得更新,这两天更新一下顺带复习一下二分啥的其实也应该放进这里面,不过既然已经写过了就算了前缀和一维前缀和若原序列存储在a数组中,则在它的前缀和数组中当下标为i时sum[i]储存的是(a[1]+a[2]+.....+a[i]),即i之前(包括i)的所有元素的和,代码表示为sum[i]=sum[i-1]+a......
  • 动手学强化学习(五):时序差分算法代码
    一、单步sarsaimportmatplotlib.pyplotaspltimportnumpyasnpfromtqdmimporttqdm#tqdm是显示循环进度条的库classCliffWalkingEnv:def__init__(self,ncol,nrow):self.nrow=nrow#4self.ncol=ncol#12self.x=0#记录......
  • 利用单例模式与阻塞队列实现异步的日志系统,记录服务器运行状态
    目录类结构概述主要特性总结Log类是一个用于日志记录的C++类,其设计具有以下特点和功能:类结构概述类成员变量:path_:日志文件存储路径。suffix_:日志文件后缀名。MAX_LINES_:每个日志文件允许的最大行数。lineCount_:当前日志文件已写的行数。toDay_:当前日志文......
  • 【基础算法】前缀和
    前缀和为什么要学前缀和?例题:一维前缀和暴力解法#include<bits/stdc++.h>usingnamespacestd;constintN=100010;intn,m;inta[N];intmain(){ cin>>n>>m; for(inti=1;i<=n;i++)cin>>a[i]; while(m--) { intl,r; cin>&......
  • 【基础算法】离散化
    离散化//每日一题#include<bits/stdc++.h>usingnamespacestd;constintN=1000010;intn,m;inta[N],d[N],s[N],t[N];longlongb[N];boolcheck(intx){ memset(b,0,sizeofb); for(inti=1;i<=x;i++) { b[s[i]]+=d[i]; b[t[i]+1]......
  • 【基础算法】差分
    差分//每日一题#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;constintN=200010;intn;inta[N],s[N];intmain(){ cin>>n; for(inti=1;i<=n;i++) { cin>>a[i]; s[i]=s[i-1]+a[i];//前缀和 } L......
  • 【基础算法】二分查找
    二分查找什么是二分?将问题分成两个部分。猜数游戏计算机给你一个范围内的随机数,你要输入一个数,计算机给你反馈是太大了还是太小了,直到你输出正确的答案。怎么设计这个程序呢?#include<iostream>#include<ctime>usingnamespacestd;intmain(){srand(time(NULL));......
  • 【基础算法】二分答案
    二分答案什么是二分答案?将答案区间进行二分,不断缩小答案区间,直到区间缩小到符合题意的答案。我们又该怎么书写呢?常用的二分模版://不断缩小答案区间while(l<=r){intmid=l+r>>1;if(check(mid))r=mid-1;elsel=mid+1;}模版的含义\(......