There is no such thing as a stupid question, until you ask it
Вопрос относительно алгоритма создания односвязного динамического списка (очереди). Я понимаю общее построение списков, но... Относительно реализации этого в коде у меня крайние сомнения (примеры, которые я нагуглила, мне не помогают; общий смысл мне и так ясен).
Например, у меня такая задача: пользователь вводит произвольное число имен, из которых мне надо сделать список. Можете проверить ход моих размышлений?
читать дальше
Например, у меня такая задача: пользователь вводит произвольное число имен, из которых мне надо сделать список. Можете проверить ход моих размышлений?
читать дальше
Чтобы не путаться, нужно ввести три переменных:
curr – указатель на текущего чувака, в который будет писаться имя, и указатель на который будет прилепляться к списку
begin – самый первый чувак
end – крайник чувак
Тогда добавление нового чувака (не в начало списка) будет феерично простым:
cur = new Dude;
cur->name = "Lebowsky";
end->next = cur;
end = cur;
end->next = NULL;
А у вас в последнем куске кода каша из-за того, что используете одно и то же имя переменной p и не хватает третьей переменной-"кэша".
p->next = p; - это указатель на самого себя. в переменной next записан адрес переменной р, который не равен NULL или равен NULL, зависит от предыдущих действий над ним.
вообще, очередь не предполагает произвольного доступа к элементам. мы добавляем в конец и забираем в начале. т.е. нам нужны постоянные указатели на начало и конец очереди (которые могут указывать на один единственный элемент, либо на NULL, если элементов нет), и дополнительный указатель на текущий создаваемый элемент. Общий алгоритм добавления: создаем новый элемент, наполняем его инфой, и в конце перенаправляем на него указатель на конец очереди и указатель next бывшего последнего элемента.
Кстати говоря, установка указателя следующего элемента на самого себя — крайне неудачная идея. Обычно его ставят всё-таки в NULL.
ну, коммент товарища выше я увидела после публикации своего, так что извиняюсь за тавтологию
Спасибо большое за ответы! Вы мне сильно помогли.