python實現隊列_Python學習教程:用隊列實現棧

接著上一期跟大家說的用棧實現隊列,這期的

Python學習教程

跟大家講

用隊列實現棧

題目:

使用隊列實現棧的下列操作:

push(x) – 元素 x 入棧

pop() – 移除棧頂元素

top() – 獲取棧頂元素

empty() – 返回棧是否為空

Implement the following operations of a stack using queues.

push(x) – Push element x onto stack.

pop() – Removes the element on top of the stack.

top() – Get the top element.

empty() – Return whether the stack is empty.

示例:

MyStack?stack?=?new?MyStack();

stack.push(1);

stack.push(2);

stack.top();?//?返回?2

stack.pop();?//?返回?2

stack.empty();?//?返回?false

注意:

你只能使用隊列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 這些操作是合法的。

你所使用的語言也許不支持隊列。 你可以使用 list 或者 deque(雙端隊列)來模擬一個隊列 , 只要是標準的隊列操作即可。

你可以假設所有操作都是有效的(例如, 對一個空的棧不會調用 pop 或者 top 操作)

Notes:

You must use only standard operations of a queue – which means only push to back, peek/pop from front, size, and is empty operations are valid.

Depending on your language, queue may not be supported natively. You may simulate a queue by using a list or deque (double-ended queue), as long as you use only standard operations of a queue.

You may assume that all operations are valid (for example, no pop or top operations will be called on an empty stack).

解題思路:

方法一(兩個隊列):

隊列先進后出,棧后進先出。用隊列實現棧,可以用兩個隊列完成題解:入棧時用 queue1 來存入節點;出棧時queue1 內節點順序出隊列并入隊列到 queue2,直到queue1剩最后一個元素時即為棧頂元素,彈出即可;用一個 top 指針一直指向棧頂元素,top() 方法查詢棧頂元素時直接返回 top 指針即可。

方法二(一個隊列):

只用一個隊列,只需要在入棧時反轉隊列即可:

入棧存入到隊列queue

節點1入棧:queue:1

反轉隊列0次:queue:1

節點2入棧queue:1->2

反轉隊列1次:

queue:1->2?-->?queue:2->1

節點2入棧queue:2->1->3

反轉隊列2次:

queue:2->1->3?--->?queue:1->3->2?--->?queue:3->2->1

......

這樣不管什么時候出隊順序都是按照出棧的順序。

Java:

方法一

class?MyStack?{

Queue?queue1;

Queue?queue2;

private?int?top;//指向棧頂元素

public?MyStack()?{

queue1?=?new?LinkedList<>();

queue2?=?new?LinkedList<>();

}

public?void?push(int?x)?{

queue1.offer(x);

top?=?x;//新加入元素為棧頂元素

}

public?int?pop()?{

while?(queue1.size()?>?1)?{//條件為隊列1的元素個數大于一

top?=?queue1.poll();//用top暫存元素,當循環結束時,top剛好是棧頂元素

queue2.add(top);

}

//隊列1與隊列2交換

Queue?tmp?=?queue2;

queue2?=?queue1;

queue1?=?tmp;

return?queue2.poll();//返回隊列2的隊列頭元素,隊列2也只有一個元素

}

public?int?top()?{

return?top;

}

public?boolean?empty()?{

return?queue1.isEmpty();//隊列1決定了棧是否為空

}

}

方法二:

每次入隊時反轉隊列即可,只有入棧需要特殊操作,出棧、取棧頂元素、是否空都按照隊列正常出隊列、取隊列頭元素、是否空方法操作。下面是入棧時代碼:

Queue?queue?=?new?LinkedList<>();

public?void?push(int?x)?{

queue.add(x);

int?sz?=?queue.size();//獲得隊列長度

while?(sz?>?1)?{//反轉次數為隊列長度減一

queue.add(queue.remove());//反轉

sz--;

}

}

Python:

Python語言沒有棧和隊列數據結構,只能用數組 List 或雙端隊列 deque 實現。

這類編程語言就壓根不需要 用隊列實現棧或用棧實現隊列這種問題,因為棧和隊列本身就必須借助List、deque實現。

所以這道題在這種語言中這就非常簡單了,可以說是作弊。

class?MyStack:

def?__init__(self):

self.stack?=?[]

def?push(self,?x:?int)?->?None:

self.stack.append(x)

def?pop(self)?->?int:

return?self.stack.pop(-1)

def?top(self)?->?int:

return?self.stack[-1]

def?empty(self)?->?bool:

return?not?self.stack

更多的

Python學習教程

也會在下期繼續為大家更新!

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

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

相關文章

vue 點擊li 中的img 怎么不冒泡_Vue全解

一.Vue實例內存圖&#xff1a;1.把Vue的實例命名為vm&#xff0c;vm對象封裝了對視圖的所有操作包括數據讀寫、事件綁定、DOM更新2.vm的構造函數是Vue&#xff0c;按照ES6的說法vm所屬的類是Vue3.options是new Vue的參數一般稱為選項或構造選項1.options里面有什么英文文檔搜op…

python布局管理_Python基礎=== Tkinter Grid布局管理器詳解

本文轉自&#xff1a;https://www.cnblogs.com/ruo-li-suo-yi/p/7425307.html 箬笠蓑衣Grid(網格)布局管理器會將控件放置到一個二維的表格里。主控件被分割成一系列的行和列&#xff0c;表格中的每個單元(cell)都可以放置一個控件。注意&#xff1a;不要試圖在一個主…

python面向對象類_python面向對象-類和對象

一. 類的定義class類名():代碼#定義類classWasher():defwash(self):print("洗衣服")注意&#xff1a;類名要滿足標識符命名規則&#xff0c;同時遵循大駝峰命名習慣。二. 創建對象對象名 類名()#創建對象w Washer()#調用方法w.wash() #洗衣服三. selfself指的是調用…

vant部署_vant ui rem配置流程

參考地址 https://www.cnblogs.com/WQLong/p/7798822.html1.下載lib-flexible使用的是vue-cliwebpack&#xff0c;通過npm來安裝的npm i lib-flexible --save2.引入lib-flexible在main.js中引入lib-flexibleimport ‘lib-flexible/flexible‘3.設置meta標簽通過meta標簽&#…

terminal services 找不到_電腦局域網中查看不到其他計算機或無法連接的解決辦法...

在辦公環境中&#xff0c;電腦經常需要打開網絡&#xff0c;進行一些文件共享的操作&#xff0c;但是有時會出現很多無法共享的情況&#xff0c;之前有一篇文章講過解決辦法&#xff0c;今天再來將一下具體無法共享的錯誤提示和相對應的處理方法&#xff0c;主要有以下幾種情況…

如何避免mysql回表查詢_mysql如何避免回表查詢

《迅猛定位低效SQL&#xff1f;》留了一個尾巴&#xff1a;select id,name where name‘shenjian‘select id,name,sexwhere name‘shenjian‘多查詢了一個屬性&#xff0c;為何檢索過程完全不同&#xff1f;什么是回表查詢&#xff1f;什么是索引覆蓋&#xff1f;如何實現索引…

python爬蟲開發數據庫設計入門經典_Python3實現的爬蟲爬取數據并存入mysql數據庫操作示例...

本文實例講述了Python3實現的爬蟲爬取數據并存入mysql數據庫操作。分享給大家供大家參考&#xff0c;具體如下&#xff1a;爬一個電腦客戶端的訂單。羅總推薦&#xff0c;抓包工具用的是HttpAnalyzerStdV7&#xff0c;與chrome自帶的F12類似。客戶端有接單大廳&#xff0c;羅列…

python中multiply函數_python中numpy庫內multiply()、dot()和 * 三種乘法運算的區別小計...

首先&#xff0c;導入函數包&#xff1a;import numpy as np1.np.multiply()函數:數組&#xff1a;(點對點)對應位置元素相乘矩陣&#xff1a;對應位置元素相乘示例&#xff1a;A np.array([[1,2],[3,4]])B np.array([[1,3],[2,4]])A_mat np.mat(A)B_mat np.mat(B)A_B_mult…

安裝python3.6.1_如何安裝python3.6.1/

如何在win7下安裝Python及配置1、首先&#xff0c;從搜索python官載適合自己電腦python版本。2標右擊桌面“計算機”擇打開菜單欄中的性”。3、WindowsXP時&#xff0c;在新彈出的屬性窗口&#xff0c;選擇“高級”->“環境變量”。Windows7是&#xff0c;在新彈出的屬性窗口…

編程入門python java和c語言_學習編程適不適合從Python入門?哪種語言更適合入門?...

本文對比了C語言和Python語言&#xff0c;分析它們作為編程入門語言各自的利弊&#xff0c;并給出了我推薦的編程學習道路。我本身已經入門了Python腳本語言&#xff0c;在進階C語言和JAVA語言后&#xff0c;Python重學就輕松很多&#xff0c;幾個小時就拾起了忘記的語法&#…

mysql 備份 一張表_mysql 備份表的一個方法

#--- start# 新建表create table sp2_match_comment_tmp like sp2_match_comment; # 這種方式 外鍵索引&#xff0c;觸發器不會在新表中有&#xff0c;要自己添加LOCK TABLES sp2_match_comment write, sp2_match_comment AS smc2 read, sp2_match_comment_tmp write;# 導出最新…

springmvc的工作原理_SpringMVC工作原理

1 簡介SpringMVC框架是以請求為驅動&#xff0c;圍繞Servlet設計&#xff0c;將請求發給控制器&#xff0c;然后通過模型對象&#xff0c;分派器來展示請求結果視圖。其中核心類是DispatcherServlet&#xff0c;它是一個Servlet&#xff0c;頂層是實現的Servlet接口。2 運行原理…

java邏輯運算符_Java邏輯運算符

Java邏輯運算符Java邏輯運算符包含下面6中符號&#xff1a;&& 與 &#xff1b;&& 與 前后兩個操作數必須都是true才返回true,否則返回false& 不短路與 &#xff1b; & 不短路與 表達式都會執行到|| 或&#xff1b; || 或 只要兩個操作數中有一個是tru…

跨站點請求偽造_十大常見web漏洞——跨站點請求偽造(CSRF)

CSRF介紹什么是CSRF呢&#xff1f;我們直接看例子。https://mp.toutiao.com/profile_v3/graphic/preview?dodelete&pgc_id6829574701128352260這個URL是頭條刪除pgc_id為6829574701128352260的一篇文章的連接&#xff0c;通過執行這個URL用戶就可以刪除這篇文章。首先攻擊…

java多線程隊列_java多線程消費者生產者模式(BlockingQueue 通過阻塞隊列實現)

import java.util.concurrent.BlockingQueue;import java.util.concurrent.LinkedBlockingQueue;/*** Created with IntelliJ IDEA.* User: csx* Date: 4/24/14* Time: 9:56 AM* To change this template use File | Settings | File Templates.** 生產者與消費者模型中&#x…

unique函數_C++核心準則C.35:基類的析構函數必須滿足的條件

C.35: A base class destructor should be either public and virtual, or protected and nonvirtual基類的析構函數要么是公開的虛函數&#xff0c;要么是保護的非虛函數Reason(原因)To prevent undefined behavior. If the destructor is public, then calling code can atte…

java jta 例子_Java事務處理全解析(八)——分布式事務入門例子(Spring+JTA+Atomikos+Hibernate+JMS)...

在本系列先前的文章中&#xff0c;我們主要講解了JDBC對本地事務的處理&#xff0c;本篇文章將講到一個分布式事務的例子。請通過以下方式下載github源代碼&#xff1a;本地事務和分布式事務的區別在于&#xff1a;本地事務只用于處理單一數據源事務(比如單個數據庫)&#xff0…

python連接redis哨兵_Python redis.sentinel方法代碼示例

本文整理匯總了Python中redis.sentinel方法的典型用法代碼示例。如果您正苦于以下問題&#xff1a;Python redis.sentinel方法的具體用法&#xff1f;Python redis.sentinel怎么用&#xff1f;Python redis.sentinel使用的例子&#xff1f;那么恭喜您, 這里精選的方法代碼示例或…

交換兩個數組 差最小 java_如何交換兩個等長整形數組使其數組和的差最小(C和java實現)...

1 importjava.util.Arrays;23 /**4 *5 *authorAdministrator6 *7 */8 public classTestUtil {9 private int[] arrysMin null;1011 private int[] arrysMax null;1213 private int matchNum 0;1415 private boolean hasMatched false;1617 /**18 * 返回數組的所有元素的總和…

python 判斷子序列_Leetcode練習(Python):第392題:判斷子序列:給定字符串 s 和 t ,判斷 s 是否為 t 的子序列。...

題目&#xff1a;判斷子序列&#xff1a;給定字符串 s 和 t &#xff0c;判斷 s 是否為 t 的子序列。你可以認為 s 和 t 中僅包含英文小寫字母。字符串 t 可能會很長(長度 ~ 500,000)&#xff0c;而 s 是個短字符串(長度 <100)。字符串的一個子序列是原始字符串刪除一些(也可…