单向队列:队列是只允许在一端进行插入操作,在另外一段进行删除操作的线性表,队列不允许在中间部位进行操作,先进先出(First In First Out)
python代码实现单向队列如下:
# coding:utf-8
class Deque(object):
"""
队列:先进先出(FIFO)
"""
def __init__(self):
self._list = []
def put(self, item):
"""
添加一个元素到队列
"""
self._list.append(item)
def get(self):
"""
从队列取出一个元素
"""
return self._list.pop(0)
def is_empty(self):
"""
判断队列是否为空
"""
return not self._list
def size(self):
"""
返回队列的大小
"""
return len(self._list)
if __name__ == '__main__':
s = Deque()
print(s.is_empty())
s.put(1)
s.put(2)
s.put(3)
print(s.size())
print(s.get())
print(s.get())
print(s.is_empty())
双向队列:双向队列中的元素可以从两端弹出,限定插入和删除操作在表的两端进行。双向队列可以在队列任意一端入队和出队,实际由左右两个栈组成。
python代码实现双向队列如下:
# coding:utf-8
class Deque(object):
"""
双向队列:队列两边都可以取放元素
实际由左右两个栈组成
"""
def __init__(self):
self._list = []
def put_left(self, item):
"""
队列左边放一个元素
"""
self._list.insert(0, item)
def put_right(self, item):
"""
队列右边放一个元素
"""
self._list.append(item)
def get_left(self):
"""
从队列左边取出一个元素
"""
return self._list.pop(0)
def get_right(self):
"""
从队列右边取出一个元素
"""
return self._list.pop()
def is_empty(self):
"""
判断队列是否为空
"""
return not self._list
def size(self):
"""
返回队列的大小
"""
return len(self._list)
if __name__ == '__main__':
s = Deque()
print(s.is_empty())
s.put_left(1)
s.put_left(2)
s.put_right(3)
s.put_right(4)
print(s.size())
print(s.get_left())
print(s.get_right())
print(s.is_empty())