Список фундаментальных структур данных - что я пропускаю? [закрытый]

Haskell:

let x = x
print x
10
задан casperOne 20 September 2012 в 19:34
поделиться

18 ответов

Наборы

В принципе, я никогда не говорю "попробуйте [anySearhEngine]", но вы можете проверить этот список: http://en.wikipedia.org/wiki/List_of_data_structures

10
ответ дан 3 December 2019 в 13:40
поделиться

Вы можете рассмотреть объединение / поиск структур данных . Они являются фундаментальными для некоторых алгоритмов графов.

0
ответ дан 3 December 2019 в 13:40
поделиться

Матрицы , поскольку они служат основой для моделирования таких проблем, как:

  • Графы
  • Аффинные преобразования
  • Решение линейных систем
  • Цепи Маркова
  • и т. Д.
0
ответ дан 3 December 2019 в 13:40
поделиться

Для получения справки прочтите документацию по коллекциям Java. Они разбивают вещи на абстрактный уровень (Set, List и Map) и уровень реализации (ArraySet, HashSet, ArrayList, LinkedList, TreeMap, HashMap).

Для получения справки прочтите документацию по коллекциям Python. Они разбивают вещи на абстрактные базовые классы, такие как Set, Sequence и Map, которые построены из функций mixin коллекции.

0
ответ дан 3 December 2019 в 13:40
поделиться

Я бы добавил карты, если вы не хотите считать, что они находятся под наборами.

0
ответ дан 3 December 2019 в 13:40
поделиться

некоторые могут считаться менее фундаментальными, чем другие:

  • математические векторы / матрицы
  • графики, списки / матрицы смежности
  • пробует деревья префиксов / суффиксов
  • пространственное индексирование - деревья квадратов / деревья kd r-деревья
  • потоки / последовательности строки с завершающим нулем / большие целые числа
1
ответ дан 3 December 2019 в 13:40
поделиться

Кортежи .

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

1
ответ дан 3 December 2019 в 13:40
поделиться

Ассоциативный массив - это общий способ обозначения словарей, карт и т. Д. Вы можете найти это почти в любой структуре.

http://en.wikipedia.org/wiki/Associative_array

1
ответ дан 3 December 2019 в 13:40
поделиться

Битовый массив не является фундаментальным, но он очень удобен и может быть эффективно представлен с использованием целых чисел (и побитовых операторов)

1
ответ дан 3 December 2019 в 13:40
поделиться

Контрольная ячейка. С его помощью вы можете создать несколько других структур данных (списки, деревья и т. Д.)

http://en.wikipedia.org/wiki/Cons

2
ответ дан 3 December 2019 в 13:40
поделиться

Quadtree s, как наиболее простой вид пространственного индекса.

2
ответ дан 3 December 2019 в 13:40
поделиться

Вы забыли основные: struct , object ] и перечисляет .

0
ответ дан 3 December 2019 в 13:40
поделиться
2
ответ дан 3 December 2019 в 13:40
поделиться

строки, хотя они могут быть реализованы как массивы под капотом (как и несколько других структур данных).

Любая программа, которая взаимодействует с пользователем, будет использовать строки. Важно знать, как управлять строками.

4
ответ дан 3 December 2019 в 13:40
поделиться

B-деревья и другие мультидеревья

4
ответ дан 3 December 2019 в 13:40
поделиться

Также фундаментальной является структура данных Graph .

10
ответ дан 3 December 2019 в 13:40
поделиться

Думаю, ваш вопрос неясен, потому что вы смешиваете реализацию и цель ...

следующие типы описывают реализацию:

  • связанный список
  • двусвязный список
  • список пропусков
  • array
  • динамический массив
  • хеш-таблица
  • (двоичное) дерево
  • «управляемые» (двоичные) деревья (кучи, выровненные деревья и т. д., т.е. является ли значение элементом набора или нет. каждое значение, которое является элементом набора, должно встречаться ровно один раз во время итерации. набор может быть изменяемым или нет (может позволять добавлять или удалять элементы). могут быть предусмотрены процедуры пересечения, объединения, различия (например, как методы в ООП). когда дело доходит до реализации, существует ряд возможностей)

ну, я считаю, что стоит упомянуть еще одну вещь: алгебраические типы данных ... в зависимости от языка они либо существуют изначально, или вам придется их подражать ... Haxe и C # (насколько я слышал) - это два императивных языка, предлагающих их, просто разрешая параметры для перечислений ... их можно использовать для реализации списков, деревьев и многих других приятных вещей ... например,

5
ответ дан 3 December 2019 в 13:40
поделиться

"Объект функции", "указатель функции" или "закрытие" не могут быть реализованы в некоторых ограничивающих языках, в которых есть массивы, связанные списки и т.д.. Но, возможно, они ближе к типам данных, чем к структурам данных.

Реализация "веревки" (реализованная в библиотеке "cord") - моя любимая реализация абстрактной структуры данных "string", но, возможно, она не совсем "фундаментальная".

0
ответ дан 3 December 2019 в 13:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: