Массивы и связанные списки: что лучше?

Массивы и связанные списки: что лучше?

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

Заключение

В заключение отметим, что выбор между использованием массива или связанного списка зависит от конкретных требований вашего приложения. Массивы лучше всего подходят для ситуаций, когда размер коллекции известен заранее и когда необходимо быстро получить доступ к элементам или управлять ими.

Связанные списки являются более гибкими и адаптируемыми и лучше всего подходят для ситуаций, когда размер коллекции неизвестен.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE