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.mzph.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)。字符串的一个子序列是原始字符串删除一些(也可…