Может ли указатель считаться эффективной и семантической структурой данных? Как это можно связать с связанным списком, хешем, queus, stack?Могут ли указатели быть структурой данных?
ответ
Нет, указатель - это всего лишь тип, а не структура. Существуют реализации структур, которые являются типами (std::vector
, std::map
, ...), но указатель нет.
Они обычно используются внутри в реализациях структур, которые вы перечисляете, но сами по себе указатель не является структурой.
Иногда вы можете на некоторых архитектурах упаковывать информацию в указатель, если вы осторожны. (Наверное, не стоит хлопот, но все же возможно) – Flexo
Не только на некоторых архитектурах существуют реализации двусвязных списков с одним указателем с помощью следующего и последнего указателей. Вам просто нужно поддерживать два указателя во время итерации, чтобы вы могли * декодировать * указатель в узле. http://en.wikipedia.org/wiki/XOR_linked_list –
@ DavidRodríguez-dribeas, который звучит как научно-фантастический.Но в любом случае структура данных представляет собой двойной связанный список, а не указатель. Как это реализовано, это другая проблема. –
Указатель - это данные тип, а не структура данных (хотя некоторые книги с довольно свободной терминологией будут определять такие фундаментальные типы, как указатели, как элементы большего набора структур данных, независимо от того, указатель, конечно, не является пример абстрактной структуры данных)
Более уместно, большинство C++ реализаций абстрактных структур данных, таких как связанные списки, очереди, стеки, деревьев и так далее будет использовать указатели в качестве данных члены. то есть указатели будут частью реализации; они не являются самой реализацией.
В качестве примера, если вы думаете о реализации собственного связанного списка, вы можете выбрать двусвязную версию, где каждый элемент в списке представлен узлом, содержащим указатели на предыдущий и следующий узлы:
template <typename T>
class DLList
{
public:
// Lots of things
private:
Node* _head; // Pointer to the head of the list
Node* _tail; // Pointer to the tail of the list
};
Ваш узел может затем быть реализована следующим образом:
template <typename T>
struct Node {
Node* _prev;
Node* _next;
T _data;
};
структура данных представляет собой особый способ хранения и организации данных на компьютере, так что он может быть использован эффективно. Указатель действительно очень эффективный способ хранения и организации данных и является основным способом адресации памяти в наши дни. Однако это не единственный способ. Например, регистры CPU адресуются по-разному. Поэтому ответ на первый вопрос - да.
Что касается вашего второго вопроса, вы действительно не можете сравнить указатели с структурами данных более высокого уровня, такими как хэш, очереди, стопки и другие. Это два разных уровня абстракции. Контейнеры более высокого уровня реализуются с использованием структур данных более низкого уровня, таких как указатели.
- 1. Могут ли указатели быть разных размеров?
- 2. C указатели могут быть выровнены с любым другим типом данных?
- 3. C - Могут ли глобальные указатели быть изменены различными потоками?
- 4. Могут ли «неродные» указатели повредить производительность кеша?
- 5. алгоритма с структурой и указатели
- 6. Является ли ArrayList структурой данных?
- 7. Может ли тип возврата функции быть структурой?
- 8. Является ли объект структурой данных?
- 9. Могут ли изображения быть злыми?
- 10. Могут ли параметры быть постоянными?
- 11. Могут ли это быть упрощены
- 12. Могут ли события быть межпроцессными?
- 13. Могут ли переменные быть украшены?
- 14. Должны/могут использоваться интеллектуальные указатели?
- 15. Могут ли быть удаленные подключения к MySQL?
- 16. Есть ли способ создать пользовательские настройки, которые могут быть представлены структурой JSON?
- 17. Могут ли модули VBA быть отдельными экземплярами
- 18. Могут ли типы данных UUID & uuid_t быть изменены после назначения?
- 19. Существуют ли алгоритмы сортировки данных (приблизительно?), Которые могут быть изменены?
- 20. Обратный AJAX? Могут ли изменения данных быть «PUSHED» для скрипта?
- 21. Умные указатели - случаи, когда они не могут заменить необработанные указатели
- 22. Триггеры событий и данных могут быть объединены?
- 23. могут быть разделены файлы базы данных couchdb?
- 24. Возможно ли быть намеренно строгим с табличной структурой в RedBeanPHP?
- 25. Обработка данных, которые могут быть или не быть обещанием
- 26. Могут ли выражения AngularJS ngClass быть вложенными?
- 27. Что может быть эффективной структурой данных для этого?
- 28. о функции cudaMemcpy() о том, могут ли указатели источника и адресата быть нулевыми
- 29. обход базы данных с иерархической структурой данных
- 30. определить, является ли массив структурой данных кучи
Я не знаю, как * делает * целочисленный стек до структур данных? –
Да. Нет. Может быть. Является ли США демократией или республикой? Является ли Калифорния шампанским? Ваш вопрос - это определение слова, а не код. Вы, безусловно, можете рассматривать указатели как структуры данных. Точно так же вы можете рассматривать их отдельно от структур данных. Голосование закрывается. –
@Chris: Integer состоит из бит, которые хранятся в ячейке памяти. Сама ячейка может состоять из транзисторов (например, шести транзисторов в корпусе SRAM), или это может быть некоторая комбинация защелок. Клетки сами по себе также структурированы для формирования банка памяти. Есть автобусы, межсоединения, таблицы перевода и т. Д. Итак, как целое не является структурой данных? –