赞
踩
队列,就像现实中的排队一样,这样的数据结构,一说很多人都熟悉。
队列,就是像我们排队一样,有2个操作,入队,出队;先进先出;现实中也是一样的。不过,毕竟是数据结构,我们学过数组,链表,从这边分,又衍生出顺序队列,链式队列。接下来看看具体的。
操作有2种,入队和出队。
队列,对数据的操作有2种,入队,出队;时间复杂度都是O(1)。简单看下吧。
入队就是往队列尾部中插入一个数据。
入队操作,就是插入一个元素。队列这种数据结构,只能是尾部插入。想想我们排队,肯定都是排在尾部的,相对于那个队列来说。参考对象别选错了。很重要。
出队就是把队列中的头元素删除掉。
队列是先进先出的。前边说过,出队,肯定也是头部元素先出去的。这个还好理解吧,实在不理解可以画个图看看。
前边说过,从我们学过的最基础的数组和链表的角度看,队列可以分为顺序队列和链式队列。先看看顺序队列,数组的话,支持随机访问下标,插入,删除效率低,涉及到其他元素的位移,插入还涉及到扩容。来看看代码实现。
class ArrayQueue:
def __init__(self, capacity: int):
self._items = []
self._capacity = capacity
self._head = 0
self._tail = 0
def enqueue(self, item: str) -> bool:
if self._tail == self._capacity:
if self._head == 0:
return False
else:
for i in range(0, self._tail - self._head):
self._items[i] = self._items[i + self._head]
self._tail = self._tail - self._head
self._head = 0
self._items.insert(self._tail, item)
self._tail += 1
return True
def dequeue(self) -> Optional[str]:
if self._head != self._tail:
item = self._items[self._head]
self._head += 1
return item
else:
return None
链式队列是基于链表实现的。
链式队列,这个是基于链表实现的;链表的特点,插入,删除效率高,查找效率低。这些都知道了。来看看代码实现。
class Node:
def __init__(self, data: str, next=None):
self.data = data
self._next = next
class LinkedQueue:
def __init__(self):
self._head: Optional[Node] = None
self._tail: Optional[Node] = None
def enqueue(self, value: str):
new_node = Node(value)
if self._tail:
self._tail._next = new_node
else:
self._head = new_node
self._tail = new_node
def dequeue(self) -> Optional[str]:
if self._head:
value = self._head.data
self._head = self._head._next
if not self._head:
self._tail = None
return value
队列,一种常见的数据结构。
对列,一种常见的数据结构;我们都很熟悉,毕竟经常见到。当然,数据结构中又基于数组的顺序队列,基于链表的链式队列;还有一些其他的,像环式队列等等。这里不在一一列举。其实,还是最基础的特点,先进先出,入队,出队;然后基于不同的其他数据结构实现的,看看特点,时间复杂度。就这么多了。翻篇。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。