Если я использую стандартное определение Абстрактного Типа данных в качестве черного ящика, который предоставляет некоторые функции для управления сбором данных, Связанный Список соответствует этому описанию:
Контейнер, который предлагает функции add (x) и get (i) (среди прочих), которые можно использовать для ведения списка объектов.
Но когда вы задаете вопрос, какова временная сложность этих операций, вы понимаете, что это зависит от того, как реализован этот контейнер:
Если вы просто внутренне поддерживаете связь с головным узлом, две вышеуказанные операции будут выполнены за O (n) раз. Если вы дополнительно поддерживаете связь с хвостовым узлом, вы получите время O (1) для обоих.
Таким образом, мой вопрос для целей обучения: считаете ли вы связанный список ADT или структурой данных?
Этот вопрос возник, когда я пытался реализовать Stack ADT из Руководства по разработке алгоритмов Skiena и читал о том, как производительность его методов put (x) и get () будет зависеть от того, какую структуру данных выбрать для реализации. Это. В книге сказано, что в этом случае не так уж важно, выбираете ли вы массив или структуру данных связанного списка для реализации этого ADT, они оба предлагают одинаковую производительность.
Но они? Разве это не зависит от того, как реализован этот список ссылок? Существует много способов реализации самого связанного списка, поэтому разве этот факт не превращает его просто в другую ADT?