数据结构 | 队列(Queue)
队列先进先出
1.队列的链接表实现
只需要使用带尾结点的单链表即可,尾端插入数据,尾端删除数据和访问栈顶数据。
class QueueUnderFlow(ValueError): pass
class LQueue: def __init__(self): self.head = None self.rear = None def is_empty(self): return self.head == None def enqueue(self,elem): if self.head is None: self.head = LNode(elem,None) self.rear = self.head else: self.rear.next = LNode(elem,None) self.rear = self.rear.next def dequeue(self): if self.head is None: raise QueueUnderFlow("in pop") e = self.head.elem self.head = self.head.next return e def peek(self): if self.head is None: raise QueueUnderFlow("in pop") return self.head.elem
2. 队列的顺序表实现
采用的是循环顺序表
尾端入队enqueue:
(self.rear+1)/q.len
首端出队dequeue
(self.head+1)/q.len
3.队列的list实现
class SQueue: def __init__(self,init_len=8): self._len = init_len self._elems = [0] * init_len self._head = 0 self._num = 0 def is_empty(self): return self._num == 0 def enqueue(self,elem): self._elems[self._head+self._num] = elem self._num += 1 def dequeue(self): if self.is_empty(): raise QueueUnderFlow("in dequeue") e = self._elems[self._head] self._head = self._elems[self._head+1]/self._len self._num -= 1 return e def peek(self): if self.is_empty(): raise QueueUnderFlow("in dequeue") return self._elems[self._head] def _extend(self): old_len = self._len self._len *= 2 new_elems = [0] * self._len for i in range(old_len): new_elems[i] = self._elems[(self._head+i)/self._len] self._elems = new_elems self._head = 0

浙公网安备 33010602011771号