Массивы и связанные списки: что лучше?
21 февраля 2023 г.Просто вступление
Массивы и связанные списки — две самые фундаментальные структуры данных в компьютерных науках. Они оба имеют свои преимущества и недостатки, и знание того, когда использовать один над другим, может иметь большое значение для эффективности вашего кода.
В этой статье мы рассмотрим некоторые распространенные варианты использования как массивов, так и связанных списков, а также то, как они применяются в реальном мире.
Массивы: быстрые и В ярости
Массивы — одна из самых простых и наиболее широко используемых структур данных в программировании. По сути, они представляют собой набор элементов, которые хранятся в смежных ячейках памяти. Это делает доступ к отдельным элементам массива и управление ими очень быстрым и эффективным.
Массивы также имеют фиксированный размер, что означает, что они идеально подходят для хранения известного количества элементов. Стоит отметить, что в некоторых языках, таких как python, у нас есть динамические массивы, поэтому размер не всегда фиксирован.
Одним из наиболее распространенных вариантов использования массивов является хранение и обработка больших объемов данных.
Например, если вы создаете приложение прогноза погоды для города в Африке, вы можете использовать массив для хранения ежедневных значений температуры за последний год. Это позволит вам быстро получить доступ к отдельным значениям температуры для определенного дня или диапазона дней и управлять ими.
Другой пример того, где массивы могут быть полезны в Африке, — это сортировка больших объемов данных. Если бы вы создавали логистическое приложение для отслеживания перемещения товаров по континенту, вы могли бы использовать массив для хранения местоположения и статуса каждой поставки.
Это позволит вам быстро сортировать и фильтровать отправления по их текущему статусу, например "в пути" или "доставлено".
Массивы также очень эффективны, когда речь идет о добавлении или удалении элементов в конце коллекции, что известно как операция добавления. Это связано с тем, что добавление к массиву просто включает обновление размера массива и копирование нового элемента в конец.
Однако добавление или удаление элементов в середине массива может быть намного медленнее, так как требует сдвига всех последующих элементов на одну позицию.
Связанные списки: гибкие и адаптируемые
Связанные списки представляют собой более сложную структуру данных, которую можно использовать в ситуациях, когда размер коллекции заранее неизвестен или когда элементы необходимо часто добавлять или удалять.
Связный список состоит из последовательности узлов, каждый из которых содержит значение и указатель на следующий узел в списке.
Это делает связанные списки более гибкими, чем массивы, поскольку их можно легко изменять и изменять без необходимости перемещать большие объемы данных.
Одним из примеров того, где могут быть полезны связанные списки, является управление медицинскими записями в крупной больнице или клинике. Пациентов может потребоваться добавить или удалить из системы в любое время, а их историю болезни и информацию о лечении, возможно, потребуется часто обновлять.
Связанный список позволит поставщикам медицинских услуг легко добавлять или удалять записи о пациентах и изменять их медицинскую информацию по мере необходимости.
Еще один пример того, где могут быть полезны связанные списки, — это создание социальной сети или приложения для обмена сообщениями.
В приложениях такого типа может потребоваться добавление или удаление пользователей из системы в любое время, а также добавление или удаление сообщений из их бесед.
Связанный список позволит вам легко добавлять или удалять пользователей и сообщения, а также отслеживать порядок их добавления.
Связанные списки также имеют некоторые преимущества перед массивами, когда речь идет об использовании памяти. Поскольку связанные списки выделяют память только для используемых в данный момент узлов, они могут быть более эффективными с точки зрения использования памяти, чем массивы для коллекций, которые не всегда полностью заполнены.
class Node:
def __init__(self, data=None):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def append(self, data):
new_node = Node(data)
if self.head is None:
self.head = new_node
return
current_node = self.head
while current_node.next is not None:
current_node = current_node.next
current_node.next = new_node
def insert(self, data, position):
new_node = Node(data)
if position == 0:
new_node.next = self.head
self.head = new_node
return
current_node = self.head
current_position = 0
while current_node.next is not None and current_position < position - 1:
current_node = current_node.next
current_position += 1
new_node.next = current_node.next
current_node.next = new_node
def delete(self, data):
if self.head is None:
return
if self.head.data == data:
self.head = self.head.next
return
current_node = self.head
while current_node.next is not None and current_node.next.data != data:
current_node = current_node.next
if current_node.next is not None:
current_node.next = current_node.next.next
def print_list(self):
current_node = self.head
while current_node is not None:
print(current_node.data)
current_node = current_node.next
Заключение
В заключение отметим, что выбор между использованием массива или связанного списка зависит от конкретных требований вашего приложения. Массивы лучше всего подходят для ситуаций, когда размер коллекции известен заранее и когда необходимо быстро получить доступ к элементам или управлять ими.
Связанные списки являются более гибкими и адаптируемыми и лучше всего подходят для ситуаций, когда размер коллекции неизвестен.
Оригинал