def dequeue(self): if self.is_empty(): raise Empty('Queue empty') oldhead = self._tail._next if self._size == 1: self._tail = None else: self._tail._next = oldhead._next self._size -= 1 return oldhead._data
def delete_last(self): """Remove and return the rear 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) item = self._data[back] self._data[back] = None self._size -= 1 if 0 < self._size < len(self._data) // 4: self._resize(len(self._data) // 2) return item
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') item = self._data[self._front] self._data[self._front] = None 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 item
def last(self): if self.is_empty(): raise Empty('Deque is empty') back = (self._front + self._size - 1) % len(self._data) return self._data[back]
def delete_first(self): if self.is_empty(): raise Empty('Deque is empty') return super().dequeue()
def first(self): if self.is_empty(): raise Empty('Queue empty') head = self._tail._next return head._data
def _transfer(self): while not self._push_stack.is_empty(): item = self._push_stack.pop() self._pop_stack.push(item) if self._pop_stack.is_empty(): raise Empty('Queue is empty')
def first(self): if self.is_empty(): raise Empty('Queue is empty') return self._data[self._front]
def pop(self): if self.is_empty(): raise Empty('Stack is empty') return self._data.pop()
def top(self): if self.is_empty(): raise Empty('Stack is empty') return self._data.head.data