栈和队列(python实现)
栈
lass Stack(object): """栈""" def __init__(self): self.items = [] def is_empty(self): """判断是否为空""" return self.items == [] def push(self, item): """加入元素""" # 尾插 后进先出 self.items.append(item) def pop(self): """弹出元素""" # 弹出 从列表尾部删除 return self.items.pop() def peek(self): """返回栈顶元素""" return self.items[- 1] # python列表性质 def size(self): """返回栈的大小""" return len(self.items)
队列
# 队列 (queue): 只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 先进先出 """ class Queue(object): """队列""" def __init__(self): self.__list = [] def is_empty(self): """判断队列是否为空""" return self.__list == [] """实现出队 入队的方式有两种,根据使用队列的哪种操作频繁去决定怎么实现O(1) O(n)""" def enqueue(self, item): """进队列""" return self.__list.insert(0, item) def dequeue(self): """出队列""" return self.__list.pop() def size(self): """返回队列大小""" return len(self.__list)
双端队列
class Dueue(): def __init__(self): self.__list = [] def add_front(self, item): self.__list.insert(0,item) def add_rear(self, item): self.__list.append(item) def pop_front(self): return self.__list.pop(0) def pop_rear(self): return self.__list.pop() def is_empty(self): """判断队列是否为空""" return self.__list == [] def size(self): """返回队列大小""" return len(self.__list)