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()#出错

 

转载于:https://www.cnblogs.com/BASE64/p/10956768.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值