zoukankan      html  css  js  c++  java
  • Python 栈、队列的实现

    在python中,列表既可以作为栈使用,又可以作为队列使用。

    把列表作为栈使用

    栈:后进先出

    stack=[1,2,3]
    stack.append(4)  #入栈,以列表尾部为栈顶
    print(stack.pop())  #出栈  4
    print(stack)  #[1, 2, 3]

    把列表作为队列使用

    队列:先进先出

    from collections import deque
    list=[1,2,3]
    queue=deque(list)  #将列表转换为队列
    queue.append(0)  #入队,添加到队列尾部
    print(queue.popleft())  #出队,弹出并返回队首元素
    print(queue)  #deque([2, 3, 0])
    
    #把列表作为队列使用,效率不高,因为出队时要移动后面所有的元素。

    deque

    deque 是双边队列,同时具有栈和队列的性质,可进行栈、队列相关的操作。并且还在在 list 的基础上增加了移动、旋转和增删等操作。

    from collections import deque  #需要导入模块
    list=[1,2,3]
    deque=deque(list)  #将列表转换为deque
    
    deque.append(4)  #添加到尾部
    print(deque)  #deque([1, 2, 3, 0])
    
    deque.appendleft(0)  #添加到首部
    print(deque)  #deque([0, 1, 2, 3, 4])
    
    print(deque.pop())   #弹出并返回最后一个元素  4
    print(deque)  #deque([0, 1, 2, 3])
    
    print(deque.popleft())  #弹出并返回左边第一个元素  0
    print(deque)  #deque([1, 2, 3])

    deque实现栈:

    from collections import deque  #需要导入模块
    list=[1,2,3]
    deque=deque(list)  #将列表转换为deque
    
    #作为栈使用:方式一
    deque.append(4)  #入栈
    print(deque)  #deque([1, 2, 3, 4])
    print(deque.pop())  #出栈  4
    print(deque)  #deque([1, 2, 3])
    
    #作为栈使用:方式二
    deque.appendleft(0)  #入栈
    print(deque)  #deque([0,1, 2, 3])
    print(deque.pop())  #出栈  3
    print(deque)  #deque([0, 1, 2])
    
    #只要实现后进先出即可

    deque实现队列:

    from collections import deque  #需要导入模块
    list=[1,2,3]
    deque=deque(list)  #将列表转换为deque
    
    #作为队列使用:方式一
    deque.append(4)  #入队
    print(deque)  #deque([1, 2, 3, 4])
    print(deque.popleft())  #出队  1
    print(deque)  #deque([2, 3, 4])
    from collections import deque  #需要导入模块
    list=[]  #空列表
    deque=deque(list)
    
    #作为队列使用:方式二
    deque.appendleft(1)  #入队
    deque.appendleft(2)  
    print(deque)  #deque([2, 1])
    print(deque.pop())  #出队  1
    print(deque)  #deque([2])
    
    #这种方式需要list是空的
    
    #只要实现先进先出即可

    实现栈、队列时,一般是使用空列表[]。

  • 相关阅读:
    汇编中寄存器及其用处
    直接打印则需要调用PrintDocumnt.Print()方可打印,否按在对话框中点【打印】但不会有反应
    操作另一窗体的变量事件
    System.Windows.Forms.ListControl.SelectedValue.get 返回 null
    combox的selectedValue初始值注意事项
    vs2017中EF6.4无法导入到PM中,应使用EF6.2或6.1.1
    去除 Datetime的字段会自动赋默认值0001-1-1 0:00:00
    EF使用问题备忘
    EF中自定义连接字符串
    C#如何改变DataTable中的数据?
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/11296906.html
Copyright © 2011-2022 走看看