| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Вставка узла в список по индексу |
| Автор: knut 16.1.2007, 11:03 | ||
| Добрый день. У меня такой вопрос. Как вставить узел в список по индексу?
|
| Автор: _hunter 16.1.2007, 11:16 |
| нихт не понял. вставить куда? что это за функция? проблема в чем? |
| Автор: Daevaorn 16.1.2007, 11:17 |
| Пробегать от начала списка и считать элементы, когда встретишь нужный номер - вставляй новый |
| Автор: knut 16.1.2007, 11:23 | ||
вставить надо в список. |
| Автор: zkv 16.1.2007, 11:25 |
| по крайней мере надо знать что такое cList |
| Автор: knut 16.1.2007, 11:31 | ||
не понял а что это значит? |
| Автор: zkv 16.1.2007, 11:36 |
но чтобы ее реализовать, надо знать что из себя представляет cList |
| Автор: _hunter 16.1.2007, 11:38 |
что это за список (его организация) это значит что нужно знать что такое cList (судя по названию это самоклепный класс). так же это значит что кроме автора класса (и возможно справки) этого никто не знает: например в моем самоклепном классе bList вставка узла по индексу осуществляется функцией Delete(void). и я так и не понял проблемы: функцию для втавки ты знаеш, ее параметры тоже. что мешает ее использовать? |
| Автор: knut 16.1.2007, 11:52 | ||
Add_Begin(cList var) and Add_End(cList var) писать не буду (не кого не удевлю я этим) а вот теперь как собственно реализовать Add(int position,cList var) т.е вставка в список по индексу |
| Автор: _hunter 16.1.2007, 12:35 |
| ааа... т.е. тебя алгоритм интересует? -- так бы сразу и говорил... делается это очень легко -- проходиш последовательно по всем елементам (начиная с первого) и увеличиваеш счетчик. когда он == индексу (или индексу+-1 (зависит от реализации)) делаеш: -- запоминаеш куда-нить следующий елемент -- перекидываеш его (текущего елемента) *next на вставляемый елемент -- вставляемому ставиш *prev на текущий елемент -- запомненому "следующему" ставиш *prev на вставляемый елемент -- вставляемому елементу ставиш *next на запомненый "следующий" все... |
| Автор: knut 18.1.2007, 15:46 | ||
что за проблемма не пойму делаю так вдоди все должно работать
|
| Автор: knut 18.1.2007, 18:52 |
| zkv, а что не так в коде? |
| Автор: zkv 18.1.2007, 20:01 | ||||||||||
ну давайте посмотрим, судя по этой строчке: root->next->prev = Add_object; я понял, что вы хотите вставить Add_object в список после root объект с адресом root условно назовем A, Add_object - B, а root->next - С. требуется выстроить их в цепочку A-B-C. Что имеем сейчас (состояние объектов на 11 строке вашего кода):
после строки root->next->prev = Add_object; (root->next соответствует C, помните мы договорились
далее строка Add_object->prev = temp->prev; Так, здесь была моя ладья temp == root (судя по 11 строке вашего кода) что в свою очередь соответствует A, Add_object соответствует B получаем:
ну и завершаем выстраивание строкой Add_object->next = temp; те B.next указывает на A. Смотрим:
а хотелось бы получить:
Видите разницу, приведенный мною код я уж не буду комментировать, посмотрите сами, что происходит. Удачи! |