算法与数据结构 -- 栈与队列(三)
程序员文章站
2022-06-07 08:20:56
...
栈与队列定义了数据的操作
一、栈
栈是一种先入先出的数据结构。可以用顺序表实现,也可以用链表实现
栈操作
- 判断是否为空
- 压栈、入栈push
- 出栈 pop
- 返回栈顶元素 peek
- 栈的元素个数
# coding:utf-8
'''
用python中的列表实现栈
栈是后入先出
在这里,将列表的尾部看成活动的
入栈和出栈都在列表尾部实现
列表尾部也是栈顶
'''
class Stack():
def __init__(self):
self.__list = []
def is_empty(self):
'''
判断栈是否为空
:return:
'''
return self.__list==[]
def push(self,item):
'''
入栈.
:param item:压入元素
:return:
'''
self.__list.append(item)
def pop(self):
'''
出栈
:return: 列表弹出的栈顶元素
'''
if self.is_empty():
print('栈已空')
else:
return self.__list.pop()
def peek(self):
'''
读取栈顶元素,不改变原列表
:return: 栈顶元素
'''
return self.__list[-1]
二、队列
用python中的列表实现队列
队列是先入先出
在这里,在列表的头部出列,列表尾部入列.这里的定义的方向也可以反过来
队列操作
- 栈的元素个数
- 判断是否为空
- 入列
- 出列
- 列表长度
class Queue():
def __init__(self):
self.__list = []
def is_empty(self):
'''
判断栈是否为空
:return:
'''
return self.__list==[]
def en_queue(self,item):
'''
入列
:param item:
:return:
'''
self.__list.append(item)
def de_queue(self):
'''
出列
:return:列表头部数据
'''
if self.is_empty():
print('队列已空')
else:
return self.__list.pop(0)
def size(self):
'''
:return:栈里面元素个数
'''
return len(self.__list)
三、双向队列
用python中的列表实现双向队列
双向队列两端均可进列、出列
在这里,将列表的头部看成队列的头部,列表尾看成队列的尾部.这里的定义的方向也可以反过来
双向队列操作
- 判断是否为空
- 头部入列
- 尾部入列
- 头部出列
- 尾部出列
- 列表长度
class Queue():
def __init__(self):
self.__list = []
def is_empty(self):
'''
判断栈是否为空
:return:
'''
return self.__list==[]
def en_front(self,item):
'''
头部入列
:param item:
:return:
'''
self.__list.insert(0,item)
def en_rear(self,item):
'''
尾部入列
:param item:
:return:
'''
self.__list.append(item)
def de_front(self):
'''
头部出列
:return:列表头部数据
'''
if self.is_empty():
print('队列已空')
else:
return self.__list.pop(0)
def de_rear(self):
'''
尾部部出列
:return:列表尾部数据
'''
if self.is_empty():
print('队列已空')
else:
return self.__list.pop()
def size(self):
'''
:return:栈里面元素个数
'''
return len(self.__list)