队列
队列
- 队列:先进先出
 - 应用场景:
- 我们的计算机实验室有 30 台计算机与一台打印机联网。当学生想要打印时,他们的打印任务与正在等待的所有其他打印任务“一致”。第一个进入的任务是先完成。如果你是最后一个,你必须等待你前面的所有其他任务打印
 
 - Queue() 创建一个空的新队列。 它不需要参数,并返回一个空队列。
 - enqueue(item) 将新项添加到队尾。 它需要 item 作为参数,并不返回任何内容。
 - dequeue() 从队首移除项。它不需要参数并返回 item。 队列被修改。
 - isEmpty() 查看队列是否为空。它不需要参数,并返回布尔值。
 - size() 返回队列中的项数。它不需要参数,并返回一个整数。
 
class Queue():
    def __init__(self):
        self.items = []
    def enqueue(self,item):
        self.items.insert(0,item)
    def dequeue(self):
        return self.items.pop()
    def isEmpty(self):
        return self.items == []
    def size(self):
        return len(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
- 
案例:烫手的山芋
- 烫手山芋游戏介绍:6个孩子围城一个圈,排列顺序孩子们自己指定。第一个孩子手里有一个烫手的山芋,需要在计时器计时1秒后将山芋传递给下一个孩子,依次类推。规则是,在计时器每计时7秒时,手里有山芋的孩子退出游戏。该游戏直到剩下一个孩子时结束,最后剩下的孩子获胜。请使用队列实现该游戏策略,排在第几个位置最终会获胜。
 
 - 
分析:
- 在一轮游戏中山芋会被传递6次
 - 山芋传递的次数不受孩子个数的影响
 - 山芋传递六次后一轮游戏结束,淘汰一个孩子游戏继续
 - 队列:先进先出,只可以从对头取元素,从队尾添加元素。
 - 准则:保证队头孩子手里面有山芋(谁手里有山芋谁作为队头)
- 方便删除元素。最终7秒到的时候需要将手里有山芋的孩子从队列中剔除。
 
 
 
kids = ['A','B','C','D','E','F']
queue = Queue()
#将6个孩子添加到了队列中
for kid in kids:
    queue.enqueue(kid)
while queue.size() > 1:
    #游戏开始,开始传递山芋
    #山芋传递的次数
    for i in range(6):
        #让队头的孩子出队列在入队列
        kid = queue.dequeue()
        queue.enqueue(kid)
    #当6次循环结束后,说明山芋被传递了6次,说明一轮游戏结束
    #一轮游戏结束后,将对头孩子淘汰即可
    queue.dequeue()
#当while循环结束后,游戏结束,队列中仅剩的孩子就是获胜者
print('获胜者:',queue.dequeue())
获胜者: E
山芋游戏图解

栈跟队列用列表形式表示

使用两个队列实现一个栈
class Queue():
    def __init__(self):
        self.items = []
    def enqueue(self,item):
        self.items.insert(0,item)
    def dequeue(self):
        return self.items.pop()
    def isEmpty(self):
        return self.items == []
    def size(self):
        return len(self.items)
q = Queue()
q1 = Queue()
##2个队列实现一个栈 
 思想:每次都取出,只留一个,取出来的放入第二个队列。然后再把第一个队列的元素取出。然后将两个队列互换。循环继续取所有留一个,取出来再放入交换的队列中,然后就把留下的一个取出,这是第二元素了,依次循环直到q.size没有元素
items =[1,2,3,4,5]
for i in items:
	q.enqueue(i)
while True:
	while q.size > 1:
    	item = q.dequeue()
    	q1.enqueue(item)
    print(q.dequeue)
    q,q1 =q1,q
    
    if q.size == 0:
    	break
    


                
            
        
浙公网安备 33010602011771号