栈(stack)
栈是一种容器,是一种逻辑数据结构;可存入数据元素,访问数据元素,删除数据元素;栈最主要的特点就是先进后出,即First In Last Out(FILO),栈只能在一端进行操作。(栈顶栈底)
栈的两种基本操作为:
- push:入栈
- pop:出栈
可用顺序表或链表来实现
栈的python实现
代码实现的基本操作:
Stack()创建一个空栈
push(item)添加一个元素到栈顶
pop()从栈顶弹出一个元素
peek()返回栈顶元素
is_empty()判断栈是否为空
size()返回栈的元素个数
代码如下:
class Stack(object):
"""栈:使用列表list来实现,栈顶为列表尾部"""
def __init__(self):
self.__list = []
def push(self, item):
"""
添加一个元素到栈顶
:param item:
:return:
"""
self.__list.append(item)
def pop(self):
"""
从栈顶弹出一个元素
:return:
"""
return self.__list.pop()
def peek(self):
"""
返回栈顶元素
:return:
"""
if self.__list is None:
return None
return self.__list[-1]
def is_empty(self):
"""
判断栈是否为空
:return:
"""
return self.__list == []
# return not self.__list
def size(self):
"""
返回栈的元素个数
:return:
"""
return len(self.__list)
队列(queue)
队列(queue)与栈一样,是一种逻辑数据结构,可以由顺序表或链表实现,特点为: 只允许在一端进行插入操作,在另一端进行删除操作的逻辑数据结构,即先进先出,First In First Out(FIFO)
队列的python实现
基本操作:
- enqueue(item):往队列添加一个item元素
- dequeue():从队列头部中删除一元素
- is_empty():判断队列是否为空
- size():返回队列的元素个数
class Queue(object):
"""队列"""
def __init__(self):
self.__list = list()
def enqueue(self, item):
"""
向队列添加一个元素item
:param item:
:return:
"""
self.__list.append(item)
def dequeue(self):
"""
从队列头部删除一个元素
:return:
"""
return self.__list.pop(0)
def is_empty(self):
"""
判断队列是否为空
:return:
"""
return not self.__list
def size(self):
"""返回队列的元素个数"""
return len(self.__list)
双端队列(deque)
双端队列是队列的一种的扩展,时的队列两端都可同时实现删除和添加的操作
双端队列的python实现
基本操作:
- add_front(item):从头部添加item元素
- add_rear(item):从尾部添加item元素
- pop_front():从头部弹出元素
- pop_rear():从尾部弹出元素
- is_empty():判断队列是否为空
- size():返回队列的元素个数
class Deque(object):
"""双端队列"""
def __init__(self):
self.__list = list()
def add_front(self, item):
"""从头部添加item元素"""
self.__list.insert(0, item)
def add_rear(self, item):
"""从尾部添加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 not self.__list
def size(self):
"""返回队列的元素个数"""
return len(self.__list)
当然,python标准库queue有包含的几种队列,可以参考:https://blog.csdn.net/weixin_44013214/article/details/103348877
或者官方文档