Лабораторная работа 12. Структуры данных
1. Односвязный список с итератором
Класс SinglyLinkedList
и вложенный Node(value, next)
. Реализуйте:
append(value)
remove(value)
__iter__()
и__next__()
у списка, чтобы можно было делатьfor x in my_list:
.
Односвязный список (singly linked list) — это базовая структура данных, представляющая собой цепочку элементов (узлов), где каждый узел содержит:
Значение (value)
Ссылку (pointer) на следующий узел в списке (или
None
, если узел последний).class SinglyLinkedList:
class Node:
def __init__(self, value):
self.value = value
self.next = None
def __init__(self):
self.head = None
def append(self, value):
"""Добавить в конец списка."""
# TODO: пройти до tail, присоединить новую Node
def remove(self, value):
"""Удалить первый узел со значением value."""
# TODO: следить за prev/current, пропустить нужный узел
def __iter__(self):
self._iter_node = self.head
return self
def __next__(self):
if not self._iter_node:
raise StopIteration
val = self._iter_node.value
self._iter_node = self._iter_node.next
return val
2. Priority Queue через list + сортировку
class PriorityQueue:
def __init__(self):
# хранить кортежи (priority, item)
self.data = []
def push(self, item, priority):
"""Добавить с приоритетом."""
# TODO: append((priority, item))
def pop(self):
"""Удалить и вернуть элемент с наименьшим приоритетом."""
# TODO: найти min по первому полю, удалить и вернуть item
def peek(self):
"""Просмотреть элемент с наименьшим приоритетом."""
# TODO: аналогичен pop, но без удаления
def is_empty(self):
return not self.data