self.значение
).self.добавить_элемент()
).Node
) хранит данные и ссылку на следующий узел. Класс списка (LinkedList
) управляет узлами.TreeNode
) хранит данные и ссылки на дочерние узлы.Vertex
) и ребер (Edge
) определяют структуру графа, а методы реализуют операции, такие как поиск кратчайшего пути.Классы в Python предоставляют мощный механизм для создания сложных структур данных, позволяя объединять данные (атрибуты) и поведение (методы) в единое целое. Вместо работы с разрозненными переменными и функциями, мы можем моделировать абстрактные сущности и их взаимосвязи, делая код более организованным, читаемым и поддерживаемым.
Основные способы использования классов для реализации сложных структур данных:
Node
для представления узла в связанном списке или дереве. Атрибуты класса будут хранить значение узла, указатели на другие узлы (родительский, дочерние) и, возможно, другую мета-информацию.
class Node:
def __init__(self, data):
self.data = data
self.next = None # Для связанного списка
def __str__(self):
return str(self.data)
Stack
, который скрывает реализацию хранения элементов (например, с помощью списка), предоставляя только методы push
, pop
и peek
.
class Stack:
def __init__(self):
self._items = [] # Используем список для хранения
def push(self, item):
self._items.append(item)
def pop(self):
if not self.is_empty():
return self._items.pop()
else:
return None
def peek(self):
if not self.is_empty():
return self._items[-1]
else:
return None
def is_empty(self):
return len(self._items) == 0
Tree
, а затем классы BinaryTree
, BST
(Binary Search Tree) и т.д., наследующие от него общую функциональность и добавляющие специфическую. Это способствует повторному использованию кода и уменьшает дублирование.
class Tree:
def __init__(self, root):
self.root = root
def traverse(self):
# Базовая логика обхода дерева
pass
class BinaryTree(Tree):
def insert_left(self, node, new_node):
# Специфичная логика для двоичного дерева
pass
def insert_right(self, node, new_node):
# Специфичная логика для двоичного дерева
pass
Graph
, который содержит словарь, где ключи - это вершины (представленные классами Vertex
), а значения - списки смежных вершин.
class Vertex:
def __init__(self, key):
self.id = key
self.connectedTo = {}
def addNeighbor(self, neighbor, weight=0):
self.connectedTo[neighbor] = weight
class Graph:
def __init__(self):
self.vertList = {}
self.numVertices = 0
def addVertex(self, key):
self.numVertices = self.numVertices + 1
newVertex = Vertex(key)
self.vertList[key] = newVertex
return newVertex
Примеры сложных структур данных, которые часто реализуются с помощью классов:
В заключение, классы являются фундаментальным инструментом для создания сложных структур данных в Python. Они позволяют моделировать сложные сущности, инкапсулировать данные, использовать наследование и композицию, а также реализовывать абстрактные типы данных, делая код более организованным, модульным и повторно используемым.