关闭页面特效

数据结构之栈和队列

 


1|0栈和队列


1|1


特性:先进后出的数据结构 应用:每个web浏览器都有一个返回按钮,当你浏览网页时,这些网页被放置在一个栈中(网页的网址)。你现在查看网页的地址存储在栈的顶部,你第一个查看网页的地址存储在栈的底部。如果按"返回"按钮,将按相反的顺序浏览刚才的页面。

栈的方法

Stack() 创建一个空的新栈。他不需要参数,返回创建的新栈 push(item)将一个新数据添加到栈的顶部,他需要item参数,并且不返回任何内容 pop() 从栈中删除顶部项,他不需要参数并返回item。栈被修改 peek() 从栈返回顶部项,但不会删除它,不需要参数,不修改栈 isEmpty() 测试栈是否为空。不需要参数,返回布尔值 size() 返回栈中item数量。不需要参数,并返回一个整数

python第三方库栈的实现

from pythonds.basic.stack import Stack s=Stack() #实例化创建一个栈 s.push("11") #向栈顶部放入数据 s.push("22") s.push("33") s.push("44") print(s.size()) #查看栈中有多少个元素 print(s.pop()) #取出栈顶部第一个元素 print(s.peek()) #返回栈顶第一个元素 print(s.isEmpty())#判断栈是否为空

自定义栈的实现

class Stack(): def __init__(self): #使用列表实现栈 self.li=[] def push(self,item): #向栈顶部放入数据 self.li.append(item) def pop(self): #取出栈顶部第一个元素 ret=self.li.pop() return ret def peek(self): #返回栈顶第一个元素 ret=self.li[-1] return ret def size(self): #查看栈中有多少个元素 ret=len(self.li) return ret def isEmpty(self): #判断栈是否为空 return self.li==[] s=Stack() s.push(1) s.push("11") #向栈顶部放入数据 s.push("111") s.push("33") s.push("44") print(s.size()) #查看栈中有多少个元素 print(s.pop()) #取出栈顶部第一个元素 print(s.peek()) #返回栈顶第一个元素 print(s.isEmpty())#判断栈是否为空

1|2队列


队列:先进先出 应用场景:我们的计算机实验室有 30 台计算机与一台打印机联网。当学生想要打印时,他们的打印任务与正在等待的所有其他打印任务“一致”。第一个进入的任务是先完成。如果你是最后一个,你必须等待你前面的所有其他任务打印

队列的方法

Queue() 创建一个空的新队列。 它不需要参数,并返回一个空队列。 put(item) 将新项添加到队尾。 它需要 item 作为参数,并不返回任何内容。 get() 从队首移除项。它不需要参数并返回 item。 队列被修改。 empty() 查看队列是否为空。它不需要参数,并返回布尔值。 qsize() 返回队列中的项数。它不需要参数,并返回一个整数。

python第三方库中的队列方法

from queue import Queue q=Queue() #实例化一个队列 q.put("sss") #向队列里放入一个元素 q.put("aaa") q.put("ddd") print(q.get()) #从队列取出第一个元素 print(q.empty()) #判断队列是否为空 print(q.qsize()) #查看队列的长度

自定义队列

class Queue(): def __init__(self): #使用列表完成队列的实现 self.li=[] def put(self,item): #向队列里放入一个元素 self.li.append(item) def get(self): #从队列取出第一个元素 return self.li.pop(0) def empty(self): #判断队列是否为空 return self.li==[] def qsize(self): #查看队列的长度 return len(self.li) q=Queue() #实例化一个队列 q.put('11') q.put('22') q.put('33') print(q.get()) #从队列取出第一个元素 print(q.empty()) #判断队列是否为空 print(q.qsize()) #查看队列的长度

1|3双端队列


同队列相比,有两个头部和尾部。可以在双端进行数据的插入和删除,提供了单数据结构中栈和队列的特性

双端队列的方法

append() 在双端队列队尾添加一个元素 appendleft() 在双端队列队首添加一个元素 pop() 删除双端队列队尾的元素 popleft() 删除双端队列队首的元素 reverse() 将双端队列反转(无返回值) clear() 清空双端队列(无返回值)

python第三方库中的双端队列

from collections import deque dq=deque(['1','2','3']) #实例化一个双端队列 print(dq) #查看双端队列 dq.append("aa") #在双端队列队尾添加一个元素 print(dq) dq.appendleft("bb") #在双端队列队首添加一个元素 print(dq) print(dq.pop()) #删除双端队列队尾的元素 print(dq.popleft()) #删除双端队列队首的元素 dq.reverse() #将双端队列反转(无返回值) dq.clear() #清空双端队列(无返回值) print(dq)

自定义双端队列

class Dequeue(): def __init__(self,*args,**kwargs): if args: #方便用户通过实例化时传值直接创建双端队列 self.li=list(args) else: self.li=list(kwargs) def __str__(self): #打印队列时,返回字符串形式的队列 return str(self.li) def append(self,item): #在双端队列队尾添加一个元素 self.li.append(item) def appendleft(self,item): #在双端队列队首添加一个元素 self.li.insert(0,item) def pop(self): #删除双端队列队尾的元素 return self.li.pop() def popleft(self): #删除双端队列队首的元素 return self.li.pop(0) def reverse(self): #将双端队列反转(无返回值) self.li.reverse() def clear(self): #清空双端队列(无返回值) self.li=[] dq=Dequeue() dq.append("11") #在双端队列队尾添加一个元素 dq.append("22") dq.append("33") print(dq) #查看双端队列 dq.append("aa") dq.appendleft("bb") #在双端队列队首添加一个元素 print(dq.pop()) #删除双端队列队尾的元素 print(dq.popleft()) #删除双端队列队首的元素 dq.reverse() #将双端队列反转(无返回值) print(dq) dq.clear() #清空双端队列(无返回值) print(dq)

1|4优先级队列


import heapq #利用heapq实现一个简答的优先级队列 class PriorityQueue: def __init__(self): self._queue=[] self._index=0 def push(self,item,priority): heapq.heappush(self._queue,(-priority,self._index,item)) self._index+=1 def pop(self): return heapq.heappop(self._queue)[-1] class Item: def __init__(self,name): self.name=name def __repr__(self): return 'Item({!r})'.format(self.name) if __name__ == '__main__': q=PriorityQueue() q.push(Item('foo'),1) q.push(Item('bar'),5) q.push(Item('spam'),4) q.push(Item('grok'),1) print(q.pop()) print(q.pop()) #具有相同优先级的两个元素,返回的顺序同它们插入到队列时的顺序相同 print(q.pop()) print(q.pop())

1|5线程安全的栈


from queue import LifoQueue #LIFO队列 lifoQueue = LifoQueue() lifoQueue.put(1) lifoQueue.put(2) lifoQueue.put(3) print('LIFO队列',lifoQueue.queue) lifoQueue.get() #返回并删除队列尾部元素 lifoQueue.get() print(lifoQueue.queue)

__EOF__

作  者LuYi
出  处https://www.cnblogs.com/luyi84895838/p/11750804.html
关于博主:编程路上的小学生,热爱技术,喜欢专研。评论和私信会在第一时间回复。或者直接私信我。
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!

posted @   路一  阅读(201)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
1
0
关注
跳至底部
点击右上角即可分享
微信分享提示