Введение

В компьютерном программировании, и особенно в Lisp, ассоциативный список, часто называемый alist, — это связный список, в котором каждый элемент списка (или узел) состоит из ключа и значения. Ассоциативный список связывает значение с ключом. Для поиска значения, соответствующего заданному ключу, используется последовательный поиск: каждый элемент списка просматривается по порядку, начиная с начала, пока ключ не будет найден. Ассоциативные списки предоставляют простой способ реализации ассоциативного массива, но эффективны только при очень небольшом количестве ключей.

Операция

Ассоциативный массив — это абстрактный тип данных, который можно использовать для хранения коллекции пар «ключ-значение» и поиска значения, связанного с заданным ключом. Список ассоциаций предоставляет простой способ реализации этого типа данных. Чтобы проверить, связан ли ключ со значением в данном списке ассоциаций, необходимо выполнить поиск в списке, начиная с первого узла и продолжая до тех пор, пока не будет найден узел, содержащий ключ, или пока поиск не достигнет конца списка (в этом случае ключ отсутствует). Чтобы добавить новую пару «ключ-значение» в список ассоциаций, создайте новый узел для этой пары, установите ссылку узла на предыдущий первый элемент списка ассоциаций и замените первый элемент списка ассоциаций новым узлом. Хотя некоторые реализации списков ассоциаций запрещают наличие нескольких узлов с одинаковыми ключами, такие дубликаты не являются проблемой для данного алгоритма поиска: дублирующиеся ключи, встречающиеся позже в списке, игнорируются. Также можно удалить ключ из списка ассоциаций, просматривая список для поиска каждого вхождения ключа и удаляя узлы, содержащие этот ключ. Для больших списков это может быть значительно медленнее, чем время, необходимое для представления ассоциативного массива в виде двоичного дерева поиска или хеш-таблицы. Кроме того, если список регулярно не очищается от элементов с дублирующимися ключами, множественные значения, связанные с одним и тем же ключом, увеличат размер списка и, следовательно, время поиска, не давая никаких преимуществ взамен. Одним из преимуществ списков ассоциаций является возможность добавления нового элемента за постоянное время. Кроме того, когда количество ключей очень мало, поиск в списке ассоциаций может быть более эффективным, чем поиск в двоичном дереве поиска или хеш-таблице, благодаря большей простоте их реализации.