7 月12日學習打卡--棧和隊列的相互轉換

hello大家好呀,本博客目的在于記錄暑假學習打卡,后續會整理成一個專欄,主要打算在暑假學習完數據結構,因此會發一些相關的數據結構實現的博客和一些刷的題,個人學習使用,也希望大家多多支持,有不足之處也請指出,謝謝大家。

前言

為了更深入理解棧和隊列,本篇博客我將介紹力扣上兩道棧和隊列的轉化問題。

一,力扣225,用隊列實現棧

. - 力扣(LeetCode)

我們知道棧的特點是先進后出,隊列是先進先出,因此,我們需要兩個隊列才能實現一個棧,通過隊列中元素的轉移來獲取我們想要刪除的元素,下面逐一介紹各個方法

1:push

根據后面的pop()方法和我們需要實現棧的特性可知,我們每次需要在兩個隊列中非空的隊列中插入元素(插入元素肯定是插在一個隊列中),如果都為空,則指定一個隊列插入

public void push(int x) {if (!q2.isEmpty()) {q2.offer(x);} else if (!q1.isEmpty()) {q1.offer(x);} else {q1.offer(x);}

2.empty

我們先看empty,因為后面方法需要用到,顯然,兩個隊列均為空則模擬棧空

 public boolean empty() {return q1.isEmpty()&&q2.isEmpty();}

3.pop

pop方法我們的思路是如果哪個隊列不空,則把隊列中的size-1個元素移動到另一個隊列,剩下的便是不需要的數(雖然看起來代碼多但是else里的只需要把if里的改下就行)

public int pop() {if (empty()){return -1;}if(!q2.isEmpty()){int size=q2.size();for (int i = 0; i < size-1; i++) {q1.offer(q2.poll());}return q2.poll();}else {int size=q1.size();for (int i = 0; i < size-1; i++){q2.offer(q1.poll());}return q1.poll();}}

4.empty

與pop類似,只是我們不需要刪除元素,而且需要一個整形紀錄棧頂元素

public int top() {if (empty()){return -1;}if(!q2.isEmpty()){int size=q2.size();int val=0;for (int i = 0; i < size; i++) {val=q2.poll();q1.offer(val);}return val;}else {int size=q1.size();int val=0;for (int i = 0; i < size; i++) {val=q1.poll();q2.offer(val);}return val;}}

完整代碼

class MyStack {Queue<Integer> q1;Queue<Integer> q2;public MyStack() {q1=new LinkedList();q2=new LinkedList();}public void push(int x) {if (!q2.isEmpty()) {q2.offer(x);} else if (!q1.isEmpty()) {q1.offer(x);} else {q1.offer(x);}}public int pop() {if (empty()){return -1;}if(!q2.isEmpty()){int size=q2.size();for (int i = 0; i < size-1; i++) {q1.offer(q2.poll());}return q2.poll();}else {int size=q1.size();for (int i = 0; i < size-1; i++){q2.offer(q1.poll());}return q1.poll();}}public int top() {if (empty()){return -1;}if(!q2.isEmpty()){int size=q2.size();int val=0;for (int i = 0; i < size; i++) {val=q2.poll();q1.offer(val);}return val;}else {int size=q1.size();int val=0;for (int i = 0; i < size; i++) {val=q1.poll();q2.offer(val);}return val;}}public boolean empty() {return q1.isEmpty()&&q2.isEmpty();}
}/*** Your MyStack object will be instantiated and called as such:* MyStack obj = new MyStack();* obj.push(x);* int param_2 = obj.pop();* int param_3 = obj.top();* boolean param_4 = obj.empty();*/

二,力扣232,用棧實現隊列

. - 力扣(LeetCode)

思路:和上面類似,不過這里push方法都是放到第一個棧,出隊操作分兩步:

1.判斷第二個棧是不是空的?如果是,則把第一個棧中所有元素都放到第二個棧里,取出第二個棧當中的棧頂元素。

2.如果不是空的,直接取出第二個棧中的棧頂元素

代碼:

class MyQueue {Stack<Integer> s1;Stack<Integer> s2;public MyQueue() {s1 = new Stack<>();s2 = new Stack<>();}public void push(int x) {s1.push(x);}public int pop() {if (empty())return -1;if (s2.isEmpty()) {int size = s1.size();for (int i = 0; i < size; i++) {s2.push(s1.pop());}return s2.pop();} else {return s2.pop();}}public int peek() {if (empty())return -1;if (s2.isEmpty()) {int size = s1.size();for (int i = 0; i < size; i++) {s2.push(s1.pop());}return s2.peek();} else {return s2.peek();}}public boolean empty() {return s1.isEmpty() && s2.isEmpty();}
}/*** Your MyQueue object will be instantiated and called as such:* MyQueue obj = new MyQueue();* obj.push(x);* int param_2 = obj.pop();* int param_3 = obj.peek();* boolean param_4 = obj.empty();*/

好了,今天練車耽誤了一下,今天就到這里吧,謝謝大家

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/44634.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44634.shtml
英文地址,請注明出處:http://en.pswp.cn/web/44634.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

什么是STM32?嵌入式和STM32簡單介紹

1、嵌入式和STM32 1.1.什么是嵌入式 除了桌面PC之外&#xff0c;所有的控制類設備都是嵌入式 嵌入式系統的定義&#xff1a;“用于控制、監視或者輔助操作機器和設備的裝置”。 嵌入式系統是一個控制程序存儲在ROM中的嵌入式處理器控制板&#xff0c;是一種專用的計算機系統。…

初階數據結構速成

本篇文章算是對初階數據結構的總結&#xff0c;內容較多&#xff0c;請耐心觀看 基礎概念部分 順序表 線性表&#xff08; linear list &#xff09;是n個具有相同特性的數據元素的有限序列。 線性表是?種在實際中?泛使 ?的數據結構&#xff0c;常?的線性表&#xff1a;…

C語言 錯題本

C語言 錯題本 文章目錄 C語言 錯題本77月11號整數求逆--掌握 7月12號求符合給定條件的整數集水仙花數打印九九口訣表--掌握統計素數并求和--掌握 7月13號湊硬幣前n項和(一加一減)最大公約數 7月14號正序整數分解 7月17號簡單計算器 217月26號求符合給定條件的整數集水仙花數 旨…

【安全設備】上網行為管理

一、什么是上網行為管理 上網行為管理是對企業內部員工使用互聯網行為的監視和管理&#xff0c;旨在規范網絡使用者的上網行為&#xff0c;提高網絡安全性&#xff0c;保護企業信息安全&#xff0c;同時提高員工的工作效率。上網行為管理通過對員工的上網行為進行監控、記錄和…

機器學習——關于極大似然估計法的一些個人思考(通俗易懂極簡版)

最近在回顧機器學習的一些相關理論知識&#xff0c;回顧到極大似然法時&#xff0c;對于極大似然法中的一些公式有些迷糊了&#xff0c;所以本文主要想記錄并分享一下個人關于極大似然估計法的一些思考&#xff0c;如果有誤&#xff0c;請見諒&#xff0c;歡迎一起前來探討。當…

單元測試實施最佳方案(背景、實施、覆蓋率統計)

1. 什么是單元測試&#xff1f; 對于很多開發人員來說&#xff0c;單元測試一定不陌生 單元測試是白盒測試的一種形式&#xff0c;它的目標是測試軟件的最小單元——函數、方法或類。單元測試的主要目的是驗證代碼的正確性&#xff0c;以確保每個單元按照預期執行。單元測試通…

合肥高校大學智能制造實驗室數字孿生可視化系統平臺建設項目驗收

合肥高校大學智能制造實驗室近日迎來了一項重要時刻&#xff0c;數字孿生可視化系統平臺建設項目順利通過了驗收。這一項目的成功實施&#xff0c;不僅標志著合肥高校在智能制造領域取得新的突破&#xff0c;為我國智能制造技術的發展注入新活力。 合肥高校智能制造實驗室作為…

T972 切換至pdm 聲音輸入的方法

1.在hardware/amlogic/audio/audio_hal/audio_hw.c下&#xff0c;直接切換 在 static unsigned int select_port_by_device(struct aml_audio_device *adev) 中先強制切換為pdm 2.在device mk 配置文件中 #add fof fix the mic bug by jason 20230621 PRODUCT_PROPERTY_OVE…

MySQL 數據庫基礎概念

一、什么是數據庫&#xff1f; 數據庫&#xff08;Database&#xff09;是按照數據結構來組織、存儲和管理數據的倉庫。 每個數據庫都有一個或多個不同的 API 用于創建&#xff0c;訪問&#xff0c;管理&#xff0c;搜索和復制所保存的數據。 我們也可以將數據存儲在文件中&…

淺析Kafka Streams中KTable.aggregate()方法的使用

KTable.aggregate() 方法是 Apache Kafka Streams API 中用于對流數據進行狀態化聚合的核心方法之一。這個方法允許你根據一個鍵值&#xff08;通常是<K,V>類型&#xff09;的流數據&#xff0c;應用一個初始值和一個聚合函數&#xff0c;來累積和更新一個狀態&#xff0…

MSPM0G3507(三十六)——超聲波PID控制小車固定距離

效果圖&#xff1a; 波形圖軟件是VOFA&#xff0c;B站有教程 &#xff0c;雖然有缺點但是非常簡單。 視頻效果&#xff1a; PID控制距離 之前發過只有超聲波測距的代碼&#xff0c;MSPM0G3507&#xff08;三十二&#xff09;——超聲波模塊移植代碼-CSDN博客 SYSCFG配置&#…

Ubuntu下如何設置程序include搜索路徑及鏈接路徑

添加庫的include及lib路徑 linux下系統默認路徑為 /usr/include, /usr/local/include, gcc在編譯程序時會按照當前目錄路徑->系統默認路徑->系統環境變量的路徑方式去查找&#xff0c;所以當我們想調用的庫未安裝在系統默認路徑時&#xff0c;我們可以通過手動添加環境變…

數據壓縮的藝術:Kylin Cube設計中的自動壓縮特性

數據壓縮的藝術&#xff1a;Kylin Cube設計中的自動壓縮特性 在大數據的浩瀚宇宙中&#xff0c;Apache Kylin以其卓越的數據立方體&#xff08;Cube&#xff09;技術&#xff0c;為企業提供快速的多維數據分析能力。隨著數據量的不斷增長&#xff0c;存儲效率成為了一個關鍵問…

用友NC Cloud blobRefClassSearch FastJson反序列化RCE漏洞復現

0x01 產品簡介 用友 NC Cloud 是一種商業級的企業資源規劃云平臺,為企業提供全面的管理解決方案,包括財務管理、采購管理、銷售管理、人力資源管理等功能,實現企業的數字化轉型和業務流程優化。 0x02 漏洞概述 用友 NC Cloud blobRefClassSearch 接口處存在FastJson反序列…

開源PHP論壇HadSky本地部署與配置公網地址實現遠程訪問

文章目錄 前言1. 網站搭建1.1 網頁下載和安裝1.2 網頁測試1.3 cpolar的安裝和注冊 2. 本地網頁發布2.1 Cpolar臨時數據隧道2.2 Cpolar穩定隧道&#xff08;云端設置&#xff09;2.3 Cpolar穩定隧道&#xff08;本地設置&#xff09;2.4 公網訪問測試 總結 前言 今天和大家分享…

idea啟動ssm項目詳細教程

前言 今天碰到一個ssm的上古項目&#xff0c;項目沒有使用內置的tomcat作為服務器容器&#xff0c;這個時候就需要自己單獨設置tomcat容器。這讓我想起了我剛入行時被外置tomcat配置支配的恐懼。現在我打算記錄一下配置的過程&#xff0c;希望對后面的小伙伴有所幫助吧。 要求…

什么是計算機數據結構的字典

字典數據結構在計算機編程領域中是一個非常重要且常用的數據結構。它也被稱為關聯數組、哈希表或映射&#xff08;Map&#xff09;&#xff0c;在不同編程語言中有不同的實現和稱呼&#xff0c;但其核心概念和用途大致相同。 字典數據結構是一種鍵值對&#xff08;key-value p…

Linux 軟件工具安裝

Linux 軟件包管理器 yum 什么是軟件包 在Linux下安裝軟件&#xff0c; 一個通常的辦法是下載到程序的源代碼&#xff0c; 并進行編譯&#xff0c;得到可執行程序。 但是這樣太麻煩了&#xff0c; 于是有些人把一些常用的軟件提前編譯好&#xff0c;做成軟件包(可以理解成wind…

動態路由的基本概念

動態路由的基本概念 什么是動態路由&#xff1f; 網絡中的路由器彼此之間相互通信&#xff0c;傳遞各自的路由信息&#xff0c;利用收到的路由信息來更新和維護自己的路由表的過程。 基于某種路由協議實現&#xff08;6大協議&#xff09;。 動態路由的特點&#xff1a; 減…

SpringBoot3.3.0升級方案

本文介紹了由SpringBoot2升級到SpringBoot3.3.0升級方案&#xff0c;新版本的升級可以解決舊版本存在的部分漏洞問題。 一、jdk17下載安裝 1、下載 官網下載地址 Java Archive Downloads - Java SE 17 Jdk17下載后&#xff0c;可不設置系統變量java_home&#xff0c;僅在id…