标签:color 顺序 位置 sdn ems 上海 创建 注意 ESS
特性:先进后出
栈顶,栈底
应用:每个 web 浏览器都有一个返回按钮。当你浏览网页时,这些网页被放置在一个栈中(实际是网页的网址)。你现在查看的网页在顶部,你第一个查看的网页在底部。如果按‘返回’按钮,将按相反的顺序浏览刚才的页面。
模型:
class Stack(object):
def __init__(self):
"""由上图可以看出,栈底部就是列表头部,栈顶部就是列表尾部"""
self.items = []
def size(self):
return len(self.items)
def isEmpty(self):
return self.items == []
def push(self,item):
"""添加时从顶部添加,即添加到列表末尾"""
self.items.append(item)
def pop(self):
"""删除顶部的,即列表末尾的"""
return self.items.pop()
def peek(self):
"""返回栈顶部元素的索引"""
return len(self.items) - 1
ss = Stack()
ss.push(1)
ss.push(2)
ss.push(3)
print(‘-----‘)
print(ss.size())
print(ss.isEmpty())
print(ss.peek())
print(‘-----‘)
print(ss.pop())
print(ss.pop())
print(ss.pop()) # 结果正确,先进后出
-----
3
False
2
-----
3
2
1
import json
class Queue(object):
def __init__(self):
self.items = []
def size(self):
return len(self.items)
def isEmpty(self):
return self.items == []
def enqueue(self,item):
self.items.append(item)
def dequeue(self):
return self.items.pop(0)
def __str__(self):
return json.dumps(self.items)
q = Queue()
q.enqueue(1)
q.enqueue(2)
q.enqueue(3)
print(q.dequeue())
print(q.dequeue())
print(q.dequeue())
1
2
3
规则:
分析:
q = Queue() # 还是上面队列的定义
kids = [‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘]
# 将6个孩子添加到了队列中
for kid in kids:
q.enqueue(kid)
while q.size() >= 2:
for num in range(6):
item = q.dequeue()
q.enqueue(item)
q.dequeue()
print(‘玩家情况:‘,q)
玩家情况: ["B", "C", "D", "E", "F"]
玩家情况: ["D", "E", "F", "B"]
玩家情况: ["B", "D", "E"]
玩家情况: ["D", "E"]
玩家情况: ["E"]
特性:
双端队列需要实现的方法:
双端队列应用案例:回文检查
import json
class Deque(object):
def __init__(self):
self.items = []
def addFront(self,item):
self.items.insert(0,item)
def addRear(self,item):
self.items.append(item)
def removeFront(self):
return self.items.pop(0)
def removeRear(self):
return self.items.pop()
def isEmpty(self):
return self.items == []
def size(self):
return len(self.items)
def __str__(self):
return json.dumps(self.items)
dq = Deque()
dq.addFront(1)
dq.addFront(2)
dq.addFront(3) # [3,2,1]
dq.addRear(4)
dq.addRear(5)
dq.addRear(6) # [3,2,1,4,5,6]
print(‘---‘)
print(dq.isEmpty())
print(dq.size())
print(‘---‘)
print(dq.removeRear())
print(dq.removeFront())
print(dq.removeRear())
print(dq.removeFront())
print(dq.removeRear())
print(dq.removeFront()) # 6,3,5,2,4,1
---
False
6
---
6
3
5
2
4
1
ss = ‘上海自来水来自海上‘ # 长度为9,上1=0,上2=8
for i in list(ss):
dq.addRear(i)
for i in range(dq.size()//2):
if dq.removeFront() != dq.removeRear():
print(ss,‘不是回文‘)
break
else:
print(ss,‘是回文‘)
上海自来水来自海上 是回文
class Stack(object):
"""栈"""
def __init__(self):
"""由上图可以看出,栈底部就是列表头部,栈顶部就是列表尾部"""
self.items = []
def size(self):
return len(self.items)
def isEmpty(self):
return self.items == []
def push(self,item):
"""添加时从顶部添加,即添加到列表末尾"""
self.items.append(item)
def pop(self):
"""删除顶部的,即列表末尾的"""
return self.items.pop()
def peek(self):
"""返回栈顶部元素的索引"""
return len(self.items) - 1
import json
class Queue(object): # 自己写的
"""队列"""
def __init__(self):
self.items = []
def size(self):
return len(self.items)
def isEmpty(self):
return self.items == []
def enqueue(self,item):
self.items.append(item)
def dequeue(self):
return self.items.pop(0)
def __str__(self):
return json.dumps(self.items)
q1 = Queue()
q2 = Queue()
lis = [1,2,3,4,5,6]
for i in lis:
q1.enqueue(i) # 先赋值,[1,2,3,4,5,6]
while q1.size() > 1:
item = q1.dequeue()
q2.enqueue(item) # 将值在两个队列中来回倒置,逐步取出末尾元素
if q1.size() == 1:
print(q1.dequeue())
q1,q2 = q2,q1
print(q1.dequeue()) # 实现了栈特性:先进后出
6
5
4
3
2
1
s1 = Stack()
s2 = Stack()
lis = [1,2,3,4,5,6]
for i in lis:
s1.push(i) # 先赋值,[1,2,3,4,5,6]
for i in range(s1.size()):
item = s1.pop()
s2.push(item) # 迭代删除s1中的末尾元素,并将返回的元素添加到s2中,[6,5,4,3,2,1]
while s2.size():
print(s2.pop()) # 循环删除s2中的末尾元素。结果实现了队列特性:先进先出
1
2
3
4
5
6
q = []
q.append(None)
q.append(None)
q
[None, None]
if q:
print(1)
1
标签:color 顺序 位置 sdn ems 上海 创建 注意 ESS
原文地址:https://www.cnblogs.com/Guoxing-Z/p/12670247.html