Давайте подумаем немного. У нас есть две основные дисциплины хранения. Смежные и раздробленные.
прилежащей.
Стек ограничен порядком. Последний в первом вышел. Вложенные контексты вызовов функций требуют этого.
Мы можем легко инвертировать этот шаблон, чтобы определить Очередь . Первым прибыл, первым обслужен.
Мы можем добавить границу в очередь, чтобы создать Круговую очередь . Обработка ввода-вывода требует этого.
Мы можем объединить оба ограничения в Dequeue .
Мы можем добавить ключ и порядок в очередь для создания Приоритетная очередь . Планировщик ОС требует этого.
Итак. Это куча вариантов смежных структур, ограниченных порядком входа. И есть несколько реализаций этого.
Вы можете иметь непрерывное хранилище без ограничений по порядку ввода: Массив и Хеш . Массив индексируется по «позиции», хеш индексируется с помощью хэш-функции ключа.
Fragmented:
Голая «куча» - это фрагментированное хранилище без каких-либо связей. Это обычный подход.
У вас может быть кучное хранилище с помощью дескрипторов, чтобы разрешить перемещение. Для этого использовалась старая Mac OS.
У вас может быть фрагментированное хранилище со связями - списками, деревьями и т. П.
Связанные списки . Односвязные и двусвязные списки являются вариантами реализации.
Двоичные деревья имеют 0, 1 или 2 детей.
Деревья высшего порядка. Пытается и тому подобное.
Что мы делаем? Дюжина?
Вы также можете рассматривать это как «коллекции», которые существуют независимо от хранилища. В этом случае вы смешиваете дисциплину хранения (heapish или array-ish)
Сумки: неупорядоченные коллекции с разрешенными дубликатами. У вас может быть сумка, построенная на нескольких дисциплинах хранения: LinkedBag, TreeBag, ArrayBag, HashBag. Ссылка и дерево используют фрагментированное хранилище, массив и хэш используют непрерывное хранилище.
Наборы: неупорядоченные коллекции без дубликатов. Нет индексации. Опять же: LinkedSet, TreeSet, ArraySet, HashSet.
Списки: заказанные коллекции. Индексируется по позиции. Опять же: LinkedList, TreeList, ArrayList, HashList.
Отображение: коллекции ассоциаций ключ-значение. Индексируется по ключу. LinkedMap, TreeMap, ArrayMap, HashMap.