1、简介
特点:
- 队列也是一种线性数据结构
- 队列只能从一端(队尾)添加元素,从另一端(队首)取出元素
- 队列是一种先进先出(
First In First Out
)的数据结构
队列的操作:
enqueue
:入队dequeue
:出队get_front
:查看队首元素的值get_size
:获取队列长度is_empty
:判断队列是否为空
2、实现
(1)使用 Python list
实现 queue
# -*- coding: utf-8 -*-
"""
Description: 队列的实现
"""
class Queue(object):
"""基于 list 实现队列"""
def __init__(self):
self._q_list = list()
def is_empty(self):
return len(self._q_list) == 0
def __len__(self):
return len(self._q_list)
def enqueue(self, data):
self._q_list.append(data)
def dequeue(self):
assert not self.is_empty()
return self._q_list.pop(0)
def rotate(self, rotation):
for i in range(rotation):
self.enqueue(self.dequeue())
def size(self):
return len(self._q_list)
(2)使用链表实现 queue
# -*- coding: utf-8 -*-
"""
Description: 基于链表的队列
"""
from typing import Any, Optional
class Node(object):
def __init__(self, data: Any, next: Optional["Node"] = None):
self.data: Any = data
self.next: Optional["Node"] = next
class LinkedQueue(object):
def __init__(self) -> None:
self.front: Optional[Node] = None
self.rear: Optional[Node] = None
self.size = 0
def is_empty(self) -> bool:
return self.front is None
def __len__(self):
return self.size
def enqueue(self, data: Any) -> None:
node: Node = Node(data)
if self.is_empty():
self.front = node
self.rear = node
else:
assert isinstance(self.rear, Node)
self.rear.next = node
self.rear = node
self.size += 1
def dequeue(self) -> Any:
if self.is_empty():
raise IndexError("get from empty queue")
else:
assert isinstance(self.front, Node)
node: Node = self.front
self.front = node.next
if self.front is None:
self.rear = None
self.size -= 1
return node.data