python数据结构栈03队列
一、队列
队列是什么呢?
- 队列就是一种有次序的数据集合,是有次序,并非是排序。
- 特点和栈有些不同,队列的数据添加总发生在一端,移除数据则在另外一端。意味着队列只有一个进口和一个出口。
- 队列遵循先进先出的原则,与栈的先进后出相反
举个例子:
-
我们都知道一个火爆的店铺往往外边都是大排长龙,所谓的排队就是队列啦,当然作为新时代的好青年,当然是杜绝插队这种行为啦。
-
或者当你打字的时候,不知道你们有没有感觉,就是当你的电脑有点卡,不能够及时反馈的时候,你打的字还没显示的时候它是怎么处理的呢,就是存在队列啦,还有就是打印机,不是也有打印队列滴吗
二、实现队列
class Queue:
def __init__(self):
self.items = []
def isEmpty(self):
return self.items == []
def push(self,item):
self.items.insert(0,item)
def pop(self):
self.items.pop()
def size(self):
return len(self.items)
左端添加,右端删除
insert(0,item) 复杂度是O(n),但是删除是O(1)
如果你想从右端添加,左端删除,那就是反过来的,
append(item)复杂度O(1)----------pop(0)复杂度O(N)
三、升一下级“双端队列”
1.简单解释双端队列
什么是双端队列,既然是双端,那就意味着他的每一端都具有着队列的性质,既可以从一端出,也可以一端进。
某种意义上说,这就是栈和队列的集合体。
2.有啥用
其实没啥用。啊哈哈。
双端队列可以用了,那不是双指针就上了,emmm,到也不能这么说,还得看具体情况把。
拿一道leetcode题看看把:
代码:
class Solution:
def isPalindrome(self, x: int) -> bool:
def dequeue(x):
deque = list()
for i in str(x):
deque.append(i)
if len(deque) == 1:
return True
equal = True
while len(deque)>1 and equal:
first = deque.pop(0)
last = deque.pop()
if first != last:
equal = False
return equal
return dequeue(x)
还有一个偷懒好方法
class Solution:
def isPalindrome(self, x: int) -> bool:
x = str(x)
if x==x[::-1]:
return True
else:
return False
真就干啥啥不行,干饭第一名,睡觉咯