我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python队列的练习题有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python队列的练习题有哪些

这篇文章主要为大家展示了“Python队列的练习题有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python队列的练习题有哪些”这篇文章吧。

1. 使用两个栈实现一个队列

[问题] 给定两个栈,仅使用栈的基本操作实现一个队列。

[思路] 解决此问题的关键在于栈的反转特性,入栈的一系列元素在出栈时会以相反的顺序返回。因此,使用两个栈就可以实现元素以相同的顺序返回(反转的元素序列再次反转后就会得到原始顺序)。具体操作如下图所示:

Python队列的练习题有哪些

[算法]

 入队 enqueue
   将元素推入栈 stack_1
 出队 dequeue
   如果栈 stack_2 不为空:
     stack_2 栈顶元素出栈
   否则:
     将所有元素依次从 stack_1 弹出并压入 stack_2
     stack_2 栈顶元素出栈

[代码]

class Queue:    def __init__(self):        self.stack_1 = Stack()        self.stack_2 = Stack()    def enqueue(self, data):        self.stack_1.push(data)    def dequeue(self):        if self.stack_2.isempty():            while not self.stack_1.isempty():                self.stack_2.push(self.stack_1.pop())        return self.stack_2.pop()

[时空复杂度] 入队时间复杂度为 O(1),如果栈 stack_2 不为空,那么出队的时间复杂度为 O(1),如果栈 stack_2 为空,则需要将元素从 stack_1 转移到 stack_2,但由于 stack_2 中转移的元素数量和出队的元素数量是相等的,因此出队的摊销时间复杂度为 O(1)。

2. 使用两个队列实现一个栈

[问题] 给定两个队列,仅使用队列的基本操作实现一个栈。

[思路] 由于队列并不具备反转顺序的特性,入队顺序即为元素的出队顺序。因此想要获取最后一个入队的元素,需要首先将之前所有元素出队。因此为了使用两个队列实现栈,我们需要将其中一个队列 store_queue 用于存储元素,另一个队列 temp_queue 则用来保存为了获取最后一个元素而保存临时出队的元素。push 操作将给定元素入队到存储队列 store_queue 中;pop 操作首先把存储队列 store_queue 中除最后一个元素外的所有元素都转移到临时队列 temp_queue 中,然后存储队列 store_queue 中的最后一个元素出队并返回。具体操作如下图所示:

Python队列的练习题有哪些

[算法]

 算法运行过程需要始终保持其中一个队列为空,用作临时队列
 入栈 push:在非空队列中插入元素 data
   若队列 queue_1 为空:
     将 data 插入 队列 queue_2
   否则:
     将 data 插入 队列 queue_1
 出栈 pop:将队列中的前n−1 个元素插入另一队列,删除并返回最后一个元素
   若队列 queue_1 不为空:
     将队列 queue_1 的前n−1 个元素插入 queue_2,然后 queue_1 的最后一个元素出队并返回
   若队列 queue_2 不为空:
     将队列 queue_2 的前 n−1 个元素插入 queue_1,然后 queue_2 的最后一个元素出队并返回

[代码]

class Stack:    def __init__(self):        self.queue_1 = Queue()        self.queue_2 = Queue()    def isempty(self):        return self.queue_1.isempty() and self.queue_2.isempty()    def push(self, data):        if self.queue_2.isempty():            self.queue_1.enqueue(data)        else:            self.queue_2.enqueue(data)    def pop(self):        if self.isempty():            raise IndexError("Stack is empty")        elif self.queue_2.isempty():            while not self.queue_1.isempty():                p = self.queue_1.dequeue()                if self.queue_1.isempty():                    return p                self.queue_2.enqueue(p)        else:            while not self.queue_2.isempty():                p = self.queue_2.dequeue()                if self.queue_2.isempty():                    return p                self.queue_1.enqueue(p)

[时空复杂度] push 操作的时间复杂度为O(1),由于 pop 操作时,都需要将所有元素从一个队列转移到另一队列,因此时间复杂度O(n)。

3. 栈中元素连续性判断

[问题] 给定一栈 stack1,栈中元素均为整数,判断栈中每对连续的数字是否为连续整数(如果栈有奇数个元素,则排除栈顶元素)。例如,输入栈 [1, 2, 5, 6, -5, -4, 11, 10, 55],输入为 True,因为排除栈顶元素 55 后,(1, 2)(5, 6)(-5, -4)(11, 10) 均为连续整数。

[思路] 由于栈中可能存在奇数个元素,因此为了正确判断,首次需要将栈中元素反转,栈顶元素变为栈底,然后依次出栈,进行判断。

[算法]

 栈 stack 中所有元素依次出栈,并插入队列 queue
 队列 queue 中所有元素出队,并入栈 stack
  while 栈 stack 不为空:
   栈顶元素 e1 出栈,并插入队列 queue
   如果栈 stack 不为空:
     栈顶元素 e2 出栈,并插入队列 queue
     如果 |e1-e2|!=1
       返回 False,跳出循环
 队列 queue 中所有元素出队,并入栈 stack

[代码]

def check_stack_pair(stack):    queue = Queue()    flag = True    # 反转栈中元素    while not stack.isempty():        queue.enqueue(stack.pop())    while not queue.isempty():        stack.push(queue.dequeue())    while not stack.isempty():        e1 = stack.pop()        queue.enqueue(e1)        if not stack.isempty():            e2 = stack.pop()            queue.enqueue(e2)            if abs(e1-e2) != 1:                flag = False                break    while not queue.isempty():        stack.push(queue.dequeue())    return flag

[时空复杂度] 时间复杂度为 O(n),空间复杂度为 O(n)。

4. 重新排列队列中元素顺序

[问题] 给定一个整数队列 queue,将队列的前半部分与队列的后半部分交错来重新排列元素。例如输入队列为 [1, 2, 3, 4, 5, 6, 7, 8, 9],则输出应为 [1, 6, 2, 7, 3, 8, 4, 9, 5]

[思路] 通过获取队列的前半部分,然后利用栈的反转特性,可以实现重排操作,如下图所示:

Python队列的练习题有哪些

[算法]

 如果队列 queue 中的元素数为偶数:
   half=queue.size//2
 否则:
   half=queue.size//2+1
 1. 将队列 queue 的前半部分元素依次出队并入栈 stack
 2. 栈 stack 中元素出栈并入队 queue
 3. 将队列 queue 中在步骤 1中未出队的另一部分元素依次出队并插入队尾
 4. 将队列 queue 的前半部分元素依次出队并入栈 stack
 5. 将栈 stack 和队列 queue 中的元素交替弹出并入队
 6. 如果栈 stack 非空:
   栈 stack 中元素出栈并入队

[代码]

def queue_order(queue):    stack = Stack()    size = queue.size    if size % 2 == 0:        half = queue.size//2    else:        half = queue.size//2 + 1    res = queue.size - half    for i in range(half):        stack.push(queue.dequeue())    while not stack.isempty():        queue.enqueue(stack.pop())    for i in range(res):        queue.enqueue(queue.dequeue())    for i in range(half):        stack.push(queue.dequeue())    for i in range(res):        queue.enqueue(stack.pop())        queue.enqueue(queue.dequeue())    if not stack.isempty():        queue.enqueue(stack.pop())

[时空复杂度] 时间复杂度为O(n),空间复杂度为 O(n)。

5. 反转队列中前 m 个元素的顺序

[问题] 给定一个整数 m 和一个整数队列 queue,反转队列中前 k 个元素的顺序,而其他元素保持不变。如 m=5,队列为 [1, 2, 3, 4, 5, 6, 7, 8, 9],算法输出为 [5, 4, 3, 2, 1, 6, 7, 8, 9]

[思路] 结合 [问题4] 我们可以发现,此题就是 [问题4] 的前 3 步,如下图所示:

Python队列的练习题有哪些

[算法]

 1. 将队列 queue 的前 m 个元素依次出队并入栈 stack
 2. 栈 stack 中元素出栈并入队 queue
 3. 将队列 queue 中在步骤 1中未出队的另一部分元素依次出队并插入队尾

[代码]

def reverse_m_element(queue, m):    stack = Stack()    size = queue.size    if queue.isempty() or m>size:        return    for i in range(m):        stack.push(queue.dequeue())    while not stack.isempty():        queue.enqueue(stack.pop())    for i in range(size-m):        queue.enqueue(queue.dequeue())

[时空复杂度] 时间复杂度为O(n),空间复杂度为 O(n)。

以上是“Python队列的练习题有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python队列的练习题有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python队列的练习题有哪些

这篇文章主要为大家展示了“Python队列的练习题有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python队列的练习题有哪些”这篇文章吧。1. 使用两个栈实现一个队列[问题] 给定两个栈
2023-06-29

Python有哪些练习题

这篇文章主要介绍了Python有哪些练习题的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python有哪些练习题文章都会有所收获,下面我们一起来看看吧。实例051:按位与题目:学习使用按位与 & 。程序分析:0
2023-06-28

基础Python练习题有哪些

本篇内容主要讲解“基础Python练习题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基础Python练习题有哪些”吧!1. 输入一个百分制成绩,要求输出成绩等级A、B、C、D、E,其中9
2023-06-25

Python装饰器的练习题有哪些

这篇文章主要讲解了“Python装饰器的练习题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python装饰器的练习题有哪些”吧!1.请实现一个装饰器,把函数的返回值+100然后返回d
2023-06-25

python的while循环练习题有哪些

这篇文章主要介绍“python的while循环练习题有哪些”,在日常操作中,相信很多人在python的while循环练习题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python的while循环练习题
2023-06-21

Python基础练习题目有哪些

这篇文章主要讲解了“Python基础练习题目有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python基础练习题目有哪些”吧!1 、题目:有5个数字:1、2、3、4,5能组成多少个互不
2023-06-02

Java练习题有哪些

这篇文章给大家分享的是有关Java练习题有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、在异常处理中,如释放资源,关闭数据库、关闭文件应由( )语句来完成。正确答案: C try子句catch子句fina
2023-06-20

Java笔试练习题有哪些

本篇内容介绍了“Java笔试练习题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、下列属于合法标识符的是__________。A)&
2023-06-17

Java日常练习题有哪些

这篇文章将为大家详细讲解有关Java日常练习题有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、下列类在多重catch中同时出现时,哪一个异常类应最后一个列出()正确答案: C Arithmetic
2023-06-20

C++链表练习题有哪些

这篇文章主要为大家展示了“C++链表练习题有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C++链表练习题有哪些”这篇文章吧。反转单链表题目1:给你单链表的头节点 head ,请你反转链表,
2023-06-29

python基本数据类型练习题有哪些

这篇文章主要为大家展示了“python基本数据类型练习题有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python基本数据类型练习题有哪些”这篇文章吧。题目[1]:格式输出练习。在交互式状
2023-06-28

Python实战项目代码练习题有哪些

这篇文章主要介绍“Python实战项目代码练习题有哪些”,在日常操作中,相信很多人在Python实战项目代码练习题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python实战项目代码练习题有哪些”的疑
2023-06-29

web前端javascript练习题有哪些

这篇文章主要讲解了“web前端javascript练习题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“web前端javascript练习题有哪些”吧!1.编写任意个数字的求和、差、积、
2023-06-05

java常见递归练习题有哪些

小编给大家分享一下java常见递归练习题有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2. 面向对象;3. 分布性,Java是面
2023-06-14

C语言中函数练习题有哪些

小编给大家分享一下C语言中函数练习题有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!第壹题 :字符串逆序(递归实现)方法一,非递归实现main主体部分数组名是
2023-06-29

c++队列的用法有哪些

C++中队列的用法有以下几种:声明队列:使用std::queue模板类声明队列对象。#include std::queue myQueue; // 声明一个整型队列入队操作:使用push()函数将元素入队。my
c++队列的用法有哪些
2024-02-29

Java算法中二叉树的练习题有哪些

小编给大家分享一下Java算法中二叉树的练习题有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!题目一 解法/** * Definition for a bin
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录