zoukankan      html  css  js  c++  java
  • python学习之堆、栈、队列

    一、堆

    #首先导入heapq库
    help(heapq)#首先学会使用帮助文档 import heapq import random #堆中的元素是存储在列表里面的 #创建堆有两种方法 #建堆方法一:逐个创建 data = list(range(10)) #随机选取一个列表中的元素 print(random.choice(data)) #随机打乱顺序 print(random.shuffle(data)) #建堆 aheap = [] for i in data: heapq.heappush(aheap,n) #原则:入堆自动重建,出堆自动重建 heapq.heappush(aheap,0.5) heapq.heappop(aheap,0) #建堆方法二: myheap = [1,2,3,4,5,6,7,8,9] heapq.heapify(myheap) #弹出最小元素,同时插入新元素 heapq.replace(myheap,6) #返回前n个最大的元素 heapq.nlargest(n,myheap) #返回前n个最小的元素 heapq.nsmallest(n,myheaq)

    二、队列

    #python提供了4种队列
    
    
    #可以用列表来模拟队列结构
    x = [1,2,3,4]
    x.append(5)#向队尾即列表尾部添加元素
    x.pop(0)#删除队头即列表头部元素,若队列为空则会抛出异常
    
    
    #队列种类1:先进先出LILO
    from queue import Queue
    q = Queue()#创建队列对象
    q.put(0)
    q.put(1)#在队列尾部插入元素
    q.get()#返回并删除队列头部元素
    print(q.queue)#查看队列中所有元素,注意,这里的方法后面没有括号
    #输出:deque([0, 1, 2, 3, 4, 5, 6])
    
    
    #队列种类2:后进先出LIFO
    from queue import LifoQueue
    q = LifoQueue()#创建队列对象
    q.put(0)
    q.put(1)#在队列尾部插入元素
    q.get()#返回并删除队列尾部元素,如果对空队列调用,会阻碍当前的线程
    print(q.queue)#查看队列中所有元素,注意,这里的方法后面没有括号
    
    
    #队列种类3:优先级队列
    from queue import PriorityQueue
    q = PriorityQueue()#创建优先级队列对象
    q.put(0) 
    q.put(1)#插入元素
    q.get()#返回并删除优先级最低的元素
    q.put(1)#插入元素,自动调整优先队列,可以多执行几次并观察返回的数据
    print(q.queue)#查看队列中所有元素
    
    #队列种类4:双端队列
    from collections import deque
    q = deque(maxlen=5)#创建一个长度为5的双端队列
    for item in [3,5,7,9,11]:#添加元素
        q.append(item)
    q.append(34)#队列满,左侧溢出
    q.appendleft(45)#从左侧添加元素,从右边溢出
    #注意,这里没有从右侧添加元素,从左边溢出q.appenright(44)的方法
    q.pop()#相当于q.popleft()从左侧移除元素
    

    三、栈

    #栈是一种“后进先出(LIFO)”或者“先进后出(FILO)”的数据结构
    #列表对象的append()方法是在列表尾部追加元素,pop()方法是弹出并返回列表最后一个元素,这跟入栈出栈很像,但是直接用列表来实现栈不是最完美的
    myStack = []
    myStack.append(3)#[3,]
    myStack.append(5)#[3,5]
    myStack.pop()#[3,]
    myStack.pop()#[]
    myStack.pop()#出错
    
  • 相关阅读:
    Convolution_model_Application_v1a
    MBSE基于模型的系统工程
    Convolution_model_Step_by_Step_v2a
    深度学习精炼图笔记总结
    TensorFlow_Tutorial_v3b——improving NN performance测验
    maven之安装jar包之本地仓库
    linux之rpm管理
    linux之防火墙
    linux之ntp服务
    linux之chkconfig
  • 原文地址:https://www.cnblogs.com/BASE64/p/10956768.html
Copyright © 2011-2022 走看看