美文网首页
Python list列表实现栈和队列

Python list列表实现栈和队列

作者: 卓尔不群的雅典 | 来源:发表于2020-06-02 23:09 被阅读0次

    队列和栈是两种数据结构,其内部都是按照固定顺序来存放变量的,二者的区别在于对数据的存取顺序:

    • 队列是,先存入的数据最先取出,即“先进先出”。
    • 栈是,最后存入的数据最先取出,即“后进先出”。

    考虑到 list 类型数据本身的存放就是有顺序的,而且内部元素又可以是各不相同的类型,非常适合用于队列和栈的实现。本节将演示如何使用 list 类型变量来实现队列和栈。

    Python list实现队列

    使用 list 列表模拟队列功能的实现方法是,定义一个 list 变量,存入数据时使用 insert() 方法,设置其第一个参数为 0,即表示每次都从最前面插入数据;读取数据时,使用 pop() 方法,即将队列的最后一个元素弹出。

    如此 list 列表中数据的存取顺序就符合“先进先出”的特点。实现代码如下:

    1.  #定义一个空列表,当做队列
    2.  queue = []
    3.  #向列表中插入元素
    4.  queue.insert(0,1)
    5.  queue.insert(0,2)
    6.  queue.insert(0,"hello")
    7.  print(queue)
    8.  print("取一个元素:",queue.pop())
    9.  print("取一个元素:",queue.pop())
    10.  print("取一个元素:",queue.pop())
    

    运行结果为:

    ['hello', 2, 1]
    取一个元素: 1
    取一个元素: 2
    取一个元素: hello
    

    Python list实现栈

    使用 list 列表模拟栈功能的实现方法是,使用 append() 方法存入数据;使用 pop() 方法读取数据。

    append() 方法向 list 中存入数据时,每次都在最后面添加数据,这和前面程序中的 insert() 方法正好相反。

    举个例子:

    1.  #定义一个空 list 当做栈
    2.  stack = []
    3.  stack.append(1)
    4.  stack.append(2)
    5.  stack.append("hello")
    6.  print(stack)
    7.  print("取一个元素:",stack.pop())
    8.  print("取一个元素:",stack.pop())
    9.  print("取一个元素:",stack.pop())
    

    输出结果为:

    [1, 2, 'hello']
    取一个元素: hello
    取一个元素: 2
    取一个元素: 1
    

    collections模块实现栈和队列

    前面使用 list 实现队列的例子中,插入数据的部分是通过 insert() 方法实现的,这种方法效率并不高,因为每次从列表的开头插入一个数据,列表中所有元素都得向后移动一个位置。

    这里介绍一个相对更高效的方法,即使用标准库的 collections 模块中的 deque 结构体,它被设计成在两端存入和读取都很快的特殊 list,可以用来实现栈和队列的功能。

    举个例子:

    1.  queueAndStack = deque()
    2.  queueAndStack.append(1)
    3.  queueAndStack.append(2)
    4.  queueAndStack.append("hello")
    5.  print(list(queueAndStack))
    
    7.  #实现队列功能,从队列中取一个元素,根据先进先出原则,这里应输出 1
    8.  print(queueAndStack.popleft())
    9.  #实现栈功能,从栈里取一个元素,根据后进先出原则,这里应输出 hello
    10.  print(queueAndStack.pop())
    11.  #再次打印列表
    12.  print(list(queueAndStack))
    

    输出结果为:

    [1, 2, 'hello']
    1
    hello
    [2]
    

    笔记来源C语言中文网 http://c.biancheng.net/view/4186.html

    相关文章

      网友评论

          本文标题:Python list列表实现栈和队列

          本文链接:https://www.haomeiwen.com/subject/wajmzhtx.html