18:55

Списки

There is no such thing as a stupid question, until you ask it
Вопрос относительно алгоритма создания односвязного динамического списка (очереди). Я понимаю общее построение списков, но... Относительно реализации этого в коде у меня крайние сомнения (примеры, которые я нагуглила, мне не помогают; общий смысл мне и так ясен).
Например, у меня такая задача: пользователь вводит произвольное число имен, из которых мне надо сделать список. Можете проверить ход моих размышлений?
читать дальше

@темы: C++

Комментарии
25.04.2014 в 19:17

Миру - мир. А Вам - пломбир!
Я так предполагаю, это односвязный список?

Чтобы не путаться, нужно ввести три переменных:
curr – указатель на текущего чувака, в который будет писаться имя, и указатель на который будет прилепляться к списку
begin – самый первый чувак
end – крайник чувак

Тогда добавление нового чувака (не в начало списка) будет феерично простым:

cur = new Dude;
cur->name = "Lebowsky";
end->next = cur;
end = cur;
end->next = NULL;


А у вас в последнем куске кода каша из-за того, что используете одно и то же имя переменной p и не хватает третьей переменной-"кэша".
25.04.2014 в 19:25

у списка будет три состояния: нет записей, есть одна запись, и есть много записей. все три состояния нужно учитывать внутри цикла проверками.
p->next = p; - это указатель на самого себя. в переменной next записан адрес переменной р, который не равен NULL или равен NULL, зависит от предыдущих действий над ним.

вообще, очередь не предполагает произвольного доступа к элементам. мы добавляем в конец и забираем в начале. т.е. нам нужны постоянные указатели на начало и конец очереди (которые могут указывать на один единственный элемент, либо на NULL, если элементов нет), и дополнительный указатель на текущий создаваемый элемент. Общий алгоритм добавления: создаем новый элемент, наполняем его инфой, и в конце перенаправляем на него указатель на конец очереди и указатель next бывшего последнего элемента.
25.04.2014 в 21:00

Торговец знаниями
ninelya, вы сами написали т.е. нам нужны постоянные указатели на начало и конец очереди ..., и дополнительный указатель на текущий создаваемый элемент а это как раз три переменные, о которых говорил товарищ выше.
Кстати говоря, установка указателя следующего элемента на самого себя — крайне неудачная идея. Обычно его ставят всё-таки в NULL.
25.04.2014 в 21:36

tven,
ну, коммент товарища выше я увидела после публикации своего, так что извиняюсь за тавтологию :)
02.05.2014 в 14:07

There is no such thing as a stupid question, until you ask it
Черт, забыла подписаться
Спасибо большое за ответы! Вы мне сильно помогли.