Вообщем такое дело. Имеется какая то структура. Имеется двусвязный список. Вопрос: как нужно организовать список по правильному: так, чтобы он хранил адрес моей структуры, или полную ее копию?
очень просто создаешь указатель HEAD - он всегда указывает на начало списка. Каждое звено структуры в списке - должно иметь указатели на следующие звено списка, и на предыдущее звено списка. Для хранения структуры, должен быть указатель на твою структуру, которому выделена память.
нет, мне нужно понять ЧТО ИМЕННО должен хранить список: копию структуры ИЛИ адрес структуры, которую я в него добавил?
смотри, а *next нужно обязательно выделять память, или можно просто присвоить ему адрес какой нибудь структуры извне? т.е возможно два случая: 1) список будет как бы стеком (я копирую в него информацию из источника, и дальнейшее изменение источника на список не влияет) 2)либо вместо выделения памяти я присваиваю *next адрес какой нибудь структуры и теперь каждое изменение источника будет затрагивать список. какой вариант верный?
Ты должен указателю присвоить адрес на структуру при том структура должна быть типа INFO а где и как ты выделищь память - наплевать
созадешь указатель struct INFO *tmp; выделяем память tmp = new struct INFO ; Инициализируешь данные и кидяешь в список
Правильный ответ тот, что тебе нужно читать читать и читать про структуры и указатели. В двух словах(далее имеется ввиду 32-х битная архитектура) - переменная указатель в памяти занимает 4 байта, указывает на какое либо место в памяти. Возьмем структуру составленную rudi, один ее "экземпляр" в памяти будет занимать 140 байт(ну тут смотря еще какое выравнивание в менеджере памяти, но речь не об этом). Полезной информации в данном случае она несет поля Name и Age, далее идут два указателя(вообще можно и одним указателем обойтись - только на след. элемент, но тут смотря какое использование, часто требуется и два, как указанно). Идея в чем, полную копию как ты выразился указать не выйдет(можно конечно, но это бред). Для добавления в список(к примеру в конец) - выделяешь память под новую такую структуру и имеешь на нее указатель, по нему ее изменяешь и т.д. А конечному элементу списка в поле next пишешь указхатель на ту структуру которую выделил(ей собсна в поле prev пишешь укзаатель на тот последний элемент), таким образом у тебя та выделенная новая структура встает в конец списка. При удалении нужные указатели ставишь в NULL и все(не забудь освободить память от того экземпляра структуры которую удалил из списка).