编程笔试题(五)队列

乙醇 创建于 8 months 之前

最后更新: less than a minute 之前

阅读数: 566

编程笔试题(五)队列

队列也是是常用的数据结构。尽管一般的面试里不会让你直接写一个队列的实现,不过了解队列是必须的。

定义

队列在现实生活中非常常见。

比如去一些餐厅吃饭是需要排队的,先来的先吃,这就是一个等待的队列。

队列是先到先出的,FIFO(first in, first out)。队列有下面一些主要操作。

  • enqueue: 将元素加入队列
  • dequeue: 将排在最前面的元素推出队列

下面的图演示了这两个过程。

使用python deque来实现队列

python内置了deque(发音是deck)实现。

所谓的deque实际上就是double end queue的意思。

普通的queue只能在尾部推入元素,从头部移除元素,而deque可以从任意方向推入和移除元素。

在命令行里使用pydoc collections.deque可以查看deque类的内置方法。

比较重要的一些方法有

|  append(...)
|      Add an element to the right side of the deque.
|
|  appendleft(...)
|      Add an element to the left side of the deque.
|  extend(...)
|      Extend the right side of the deque with elements from the iterable
|
|  extendleft(...)
|      Extend the left side of the deque with elements from the iterable
|
|  pop(...)
|      Remove and return the rightmost element.
|
|  popleft(...)
|      Remove and return the leftmost element.
|
|  remove(...)
|      D.remove(value) -- remove first occurrence of value.
|
|  reverse(...)
|      D.reverse() -- reverse *IN PLACE*
|
|  rotate(...)
|      Rotate the deque n steps to the right (default n=1).  If n is negative, rotates left.

下面是queue的具体实现


from collections import deque

class Queue():

    def __init__(self):
        self.data = deque()

    def enqueue(self, elm):
        self.data.append(elm)

    def dequeue(self):
        return self.data.popleft()

    def is_empty(self):
        return len(self.data) == 0

    def size(self):
        return len(self.data)


import unittest

class QueueTestCase(unittest.TestCase):

    def test_enqueue_and_dequeue(self):
        q = Queue()
        self.assertTrue(q.is_empty())
        q.enqueue(1)
        self.assertFalse(q.is_empty())
        self.assertEqual(q.size(), 1)

        q.enqueue(2)
        q.enqueue(3)
        self.assertFalse(q.is_empty())
        self.assertEqual(q.size(), 3)

        self.assertEqual(1, q.dequeue())
        self.assertEqual(2, q.dequeue())
        self.assertEqual(3, q.dequeue())


if __name__ == '__main__':
    unittest.main()

思考

我们所知道的cpu中进程的等待队列,消息队列等都是队列的具体应用。

0

相关课程

mockito简明教程
图文
mockito简明教程

课程分类: 测试工具

mock工具

  • 已完结
  • 已更新7集
  • 最后更新时间: 2024-03-18 12:50:29

免费

查看详情
requests从入门到精通
图文
requests从入门到精通

课程分类: 测试工具 接口测试

python接口测试必会

  • 已完结
  • 已更新16集
  • 最后更新时间: 2024-03-18 12:54:40

免费

查看详情
Locust实用教程
图文
Locust实用教程

课程分类: 性能测试 测试工具

python语言实现的非常出色性能测试工具

  • 已完结
  • 已更新9集
  • 最后更新时间: 2024-03-18 12:24:59

免费

查看详情
TDD测试驱动开发教程
图文
TDD测试驱动开发教程

课程分类: 测试框架 软件测试基础

TDD其实并不神秘

  • 已完结
  • 已更新7集
  • 最后更新时间: 2024-03-18 11:53:22

免费

查看详情
软件测试基础教程
图文
软件测试基础教程

课程分类: 软件测试基础

转码和转行必备

  • 已完结
  • 已更新9集
  • 最后更新时间: 2024-03-18 11:40:05

免费

查看详情
软件测试入门教程
图文
软件测试入门教程

课程分类: 软件测试基础

新人如何转码到软件测试

  • 已完结
  • 已更新9集
  • 最后更新时间: 2024-03-17 11:07:23

免费

查看详情