def insert(self, index, value): """Insert item by index. Args: index (int): index for insert value : value for insert Raises: CollectionIsEmptyExeption: if list is empty IndexError: if index is not valid """ if self.is_empty: raise CollectionIsEmptyExeption(list_is_empty()) if not self.index_valid(index): raise IndexError(index_out_of_range()) if index == 0: self.push_front(value) return else: node = Node(value) previously = self._find_by(index - 1) node.next = previously.next previously.next = node self._size += 1
def dequeue(self): """Extract item from queue. Returns: item: top item from queue Raises: CollectionIsEmptyExeption: if queue is empty """ if self._queue.is_empty: raise CollectionIsEmptyExeption(queue_is_empty()) return self._queue.extract()
def pop(self): """Extract item from stack. Returns: item: top item from stack Raises: CollectionIsEmptyExeption: if stack is empty """ if self.is_empty: raise CollectionIsEmptyExeption(stack_is_empty()) return self._stack.extract()
def front(self): """Return (not extract) first item from list. Returns: item: first item from list Raises: CollectionIsEmptyExeption: if list is empty """ if self.is_empty: raise CollectionIsEmptyExeption(list_is_empty()) return self._head.data
def pop(stack): """Extract item from stack. Args: stack: stack data structure (created by function make_stack()) Returns: item: top item from stack Raises: CollectionIsEmptyExeption: if stack is empty """ if is_empty(stack): raise CollectionIsEmptyExeption(stack_is_empty()) return _extract(stack)
def dequeue(self): """Extract item from queue. Returns: item: top item from queue Raises: CollectionIsEmptyExeption: if queue is empty """ if self._extract_stack.is_empty: while not self._put_stack.is_empty: self._extract_stack.push(self._put_stack.pop()) if self._extract_stack.is_empty: raise CollectionIsEmptyExeption(queue_is_empty()) return self._extract_stack.pop()
def pop_back(self): """Return (and extract) last item from list. Returns: last_item: last item from list Raises: CollectionIsEmptyExeption: if list is empty """ if self.is_empty: raise CollectionIsEmptyExeption(list_is_empty()) penultimate = self._find_by(self._size - 2) last = penultimate.next penultimate.next = None self._size -= 1 return last.data
def pop_front(self): """Return (and extract) first item from list. Returns: first_element_data: first item from list Raises: CollectionIsEmptyExeption: if list is empty """ if self.is_empty: raise CollectionIsEmptyExeption(list_is_empty()) return_value = self._head.data self._head = self._head.next self._size -= 1 return return_value
def value_at(self, index): """Return (not extract) item by index. Returns: item: item from list by index Args: index (int): index return item Raises: CollectionIsEmptyExeption: if list is empty IndexError: if index is not valid """ if self.is_empty: raise CollectionIsEmptyExeption(list_is_empty()) if not self.index_valid(index): raise IndexError(index_out_of_range()) finded = self._find_by(index) return finded.data
def erase(self, index): """Remove element by index from list. Args: index (int): index of element for delete Raises: CollectionIsEmptyExeption: if list is empty """ if self.is_empty: raise CollectionIsEmptyExeption(self._error_message) if index == 0: self.pop_front() return if index == self._size - 1: self.pop_back() return previous = self._find_by(index - 1) deleted = previous.next previous.next = deleted.next deleted.next = None self._size -= 1