Лабораторная работа 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 = valueself.next = Nonedef __init__(self):self.head = Nonedef append(self, value):"""Добавить в конец списка."""# TODO: пройти до tail, присоединить новую Nodedef remove(self, value):"""Удалить первый узел со значением value."""# TODO: следить за prev/current, пропустить нужный узелdef __iter__(self):self._iter_node = self.headreturn selfdef __next__(self):if not self._iter_node:raise StopIterationval = self._iter_node.valueself._iter_node = self._iter_node.nextreturn 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