def min(self): """Return but do not remove (k, v) tuple with minimum key.""" if self.is_empty(): raise Empty('Priority queue is empty') p = self._data.first() item = p.element() return (item._key, item._value)
def top(self): """Return (but do not remove) the element at the top of the stack. Raise Empty exception if the stack is empty. """ if self.is_empty(): raise Empty('Stack is empty') return self._head._element # top of stack is at head of list
def first(self): """Return (but do not remove) the element at the front of the queue. Raise Empty exception if the queue is empty. """ if self.is_empty(): raise Empty('Queue is empty') return self._head._element # front aligned with head of list
def delete_last(self): """Remove and return the element from the back of the deque. Raise Empty exception if the deque is empty. """ if self.is_empty(): raise Empty('Deque is empty') return self._delete_node(self._trailer._prev) # use inherited method
def delete_first(self): """Remove and return the element from the front of the deque. Raise Empty exception if the deque is empty. """ if self.is_empty(): raise Empty('Deque is empty') return self._delete_node(self._header._next) # use inherited method
def first(self): """Return (but do not remove) the element at the front of the queue. Raise Empty exception if the queue is empty. """ if self.is_empty(): raise Empty('Queue is empty') return self._data[self._front]
def min(self): """Return but do not remove (k, v) tuple with minimum key. Raise Empty exception if empty. """ if self.is_empty(): raise Empty('Priority queue is empty') item = self._data[0] return (item._key, item._value)
def last(self): """Return (but do not remove) the element at the back of the deque. Raise Empty exception if the deque is empty. """ if self.is_empty(): raise Empty('Deque is empty') back = (self._front + self._size - 1) % len(self._data) return self._data[back]
def first(self): """Return (but do not remove) the element at the front of the queue. Raise Empty exception if the queue is empty. """ if self.is_empty(): raise Empty('Queue is empty') head = self._tail._next return head._element
def _find_min(self): # nonpublic utility """Return Position of item with minimum key.""" if self.is_empty(): # is_empty inherited from base class raise Empty('Priority queue is empty') small = self._data.first() walk = self._data.after(small) while walk is not None: if walk.element() < small.element(): small = walk walk = self._data.after(walk) return small
def pop(self): """Remove and return the element from the top of the stack (i.e. LIFO). Raise Empty exception if the stack is empty. """ if self.is_empty(): raise Empty('Stack is empty') answer = self._head._element self._head = self._head._next # bypass the former top node self._size -= 1 return answer
def remove_min(self): """Remove and return (k, v) tuple with minimum key. Raise Empty exception if empty. """ if self.is_empty(): raise Empty('Priority queue is empty') self._swap(0, len(self._data) - 1) # put minimum item at the end item = self._data.pop() # and remove it from the list; self._downheap(0) # then fix new root return (item._key, item._value)
def dequeue(self): """Remove and return the first element of the queue (i.e. FIFO). Raise Empty exception if the queue is empty. """ if self.is_empty(): raise Empty('Queue is empty') answer = self._head._element self._head = self._head._next self._size -= 1 if self.is_empty(): # special case as queue is empty self._tail = None # removed head had been the tail return answer
def dequeue(self): """Remove and return the first element of the queue (i.e. FIFO). Raise Empty exception if the queue is empty. """ if self.is_empty(): raise Empty('Queue is empty') answer = self._data[self._front] self._data[self._front] = None # help garbage collection self._front = (self._front + 1) % len(self._data) self._size -= 1 if 0 < self._size < len(self._data) // 4: self._resize(len(self._data) // 2) return answer
def dequeue(self): """Remove and return the first element of the queue (i.e. FIFO). Raise Empty exception if the queue is empty. """ if self.is_empty(): raise Empty('Queue is empty') oldhead = self._tail._next if self._size == 1: # removing only element self._tail = None # queue becomes empty else: self._tail._next = oldhead._next # bypass the old head self._size -= 1 return oldhead._element
def delete_last(self): """Remove and return the last element of the deque. Raise Empty exception if the deque is empty. """ if self.is_empty(): raise Empty('Deque is empty') back = (self._front + self._size - 1) % len(self._data) answer = self._data[back] self._data[back] = None # help garbage collection self._size -= 1 if 0 < self._size < len(self._data) // 4: self._resize(len(self._data) // 2) return answer
def last(self): """Return (but do not remove) the element at the back of the deque.""" if self.is_empty(): raise Empty('Deque is empty') return self._trailer._prev._element # real item just before trailer
def remove_min(self): """Remove and return (k, v) tuple with minimum key.""" if self.is_empty(): raise Empty('Priority queue is empty') item = self._data.delete(self._data.first()) return (item._key, item._value)