赞
踩
后进者先出,先进者后出,这就是典型的“栈”结构。
class stack(object): def __init__(self): self.item = [] def is_empty(self): '''判断栈是否为空''' return self.item == [] def push(self, item): '''入栈''' self.item.append(item) def travel(self): '''遍历栈元素并打印''' print(self.item) def pop(self): '''出栈''' return self.item.pop() def peek(self): '''返回栈顶元素''' if self.is_empty(): return None else: return self.item[-1] def size(self): '''打印栈元素的个数''' print(len(self.item)) s = stack() print(s.is_empty()) s.push(0) s.push(2) s.push(5) s.push(1) s.pop() s.travel() print(s.peek()) s.size() # True # [0, 2, 5] # 5 # 3
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jk7StrTo-1574007113175)(02500A0353B34FEDAF6680D5AC40C2B8)]
浏览器的前进、后退功能,我想你肯定很熟悉吧?
当你依次访问完一串页面 a-b-c 之后,点击浏览器的后退按钮,就可以查看之前浏览过的页面 b 和 a。当你后退到页面 a,点击前进按钮,就可以重新查看页面 b 和 c。但是,如果你后退到页面 b 后,点击了新的页面 d,那就无法再通过前进、后退功能查看页面 c 了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZMreDaYd-1574007113176)(76320119DF1B47DAAAADFBDD1F12ED0D)]
作为一种非常基础的数据结构,队列的应用也非常广泛,特别是一些具有某些额外特性的队列,比如循环队列、阻塞队列、并发队列。它们在很多偏底层系统、框架、中间件的开发中,起着关键性的作用。
class MyQueue(object): def __init__(self): self.item = [] def EnQueun(self, item): return self.item.append(item) def DeQueue(self): return self.item.pop(0) def is_empty(self): return self.item == [] def size(self): print(len(self.item)) def travel(self): for i in self.item: print(i, end=' ') if __name__ == '__main__': q = MyQueue() print(q.is_empty()) q.EnQueun(1) q.EnQueun(5) q.EnQueun(2) q.EnQueun(0) q.DeQueue() q.travel()
双端队列(dequeue,double-ended queue),是一种具有队列和栈的性质的数据结构
双端队列中的元素可以从两端弹出,其限定入队和出队的操作在两端进行。双端队里可以在任意一端入队和出队。
操作
Deque() 创建一个空的双端队列
class QueueOpertion(object): def __init__(self): self.item = [] def EnQueue(self, item): return self.item.append(item) def DeQueue(self): return self.item.pop(0) def is_empty(self): return self.item == [] def size(self): return len(self.item) def travel(self): for i in self.item: print(i, end=' ') class DoubleQ(QueueOpertion): def add_front(self, item): self.item.insert(0, item) def remove_rear(self): self.item.pop() if __name__ == '__main__': d = DoubleQ() print(d.is_empty()) d.EnQueue(6) d.EnQueue(9) d.EnQueue(7) d.add_front("r") d.add_front("y") d.add_front("h") d.DeQueue() d.remove_rear() print(d.size()) d.travel()
阻塞队列实在队列的基础上加了阻塞操作。如果队列为空或是不满的情况下,从头部提取数据会被阻塞,因为此时没有数据可取,直到队列满了,才能返回。相同,当队列满的时候,入队时会被阻塞,直到队列中有空闲的位置时才能入队,然后返回。
阻塞有两种处理方式:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。