1 / 1 / 0
Регистрация: 22.11.2010
Сообщений: 32
|
||||||
1 | ||||||
Двусвязные списки, не могу добавить узел с конца22.03.2011, 10:51. Показов 2069. Ответов 16
Метки нет (Все метки)
Делаю лабу по динамическим структурам данным, написал функцию добавления с начала и с конца.
Но, добавление с конца не работает, я не могу найти ошибки или недочета в алгоритме, не могу отследить причину того, что при добавлении узла с конца происходит постоянное перезаписывние вида ввод: 56 ->56 ввод: 4 ->4 А должно в итоге быть как ->56->4
0
|
22.03.2011, 10:51 | |
Ответы с готовыми решениями:
16
Двусвязные списки Двусвязные списки двусвязные списки Двусвязные списки в с++ |
291 / 151 / 34
Регистрация: 13.10.2009
Сообщений: 164
|
|||||||||||||||||||||
22.03.2011, 11:24 | 2 | ||||||||||||||||||||
Ошибка простая:
В коде:
Замените
1
|
1 / 1 / 0
Регистрация: 22.11.2010
Сообщений: 32
|
||||||
22.03.2011, 13:08 [ТС] | 3 | |||||
Декстер, спасибо тебе огромное!!!
Добавлено через 1 час 15 минут Появилась проблема - как добавить узел в заданную позицию? Какие вообще шаги нужно предпринять для этого?
0
|
291 / 151 / 34
Регистрация: 13.10.2009
Сообщений: 164
|
||||||
22.03.2011, 13:40 | 4 | |||||
1)смотрим пустой список или нет, если пустой то делаем наш элемент головой 2)Пытаемся дойти до нужной позиции, a)если позиция оказывается больше чем наше количество элементов, то добавляем его в конец б)если позиция внутри, то вставляем узел в нужное место, для этого определяем prev и next элементы нашего узла, prev следующего и next предыдущего Выше показано как можно такое сделать. (первый элемент, естественно 0-ой)
1
|
1 / 1 / 0
Регистрация: 22.11.2010
Сообщений: 32
|
|
22.03.2011, 13:59 [ТС] | 5 |
Спасибо большое!
0
|
65 / 53 / 4
Регистрация: 06.09.2010
Сообщений: 254
|
|
22.03.2011, 16:10 | 6 |
Я конечно не специалист, но разве в STL нет готового решения? Почему бы вам его не использовать?
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
22.03.2011, 16:47 | 7 |
afiskon, слышали об изобретении велосипедов в учебной практике?
0
|
1 / 1 / 0
Регистрация: 22.11.2010
Сообщений: 32
|
|
22.03.2011, 17:14 [ТС] | 8 |
Да, что поделаешь, такие у нас задания.
Добавлено через 16 минут Как теперь из этого списка можно удалить текущий узел? Как удалить заданный узел (по номеру или по значению)? Это все,что мне непонятно на данный момент
0
|
291 / 151 / 34
Регистрация: 13.10.2009
Сообщений: 164
|
||||||||||||||||
22.03.2011, 18:26 | 9 | |||||||||||||||
Помогу с удалением)
Наверное перемудрил, но делал бы что-то типа такого, чтобы было похоже на предыдущее:
1
|
1 / 1 / 0
Регистрация: 22.11.2010
Сообщений: 32
|
|
22.03.2011, 19:35 [ТС] | 10 |
Декстер, спасибо огромное, буду изучать
А вот вопрос в том - как удалить текущий узел?? Ведь в первых двух функция - добавлении с конца и сначала, я нигде не юзал - текущий узел То есть как бы не понятно стало - удалить текущий узел
0
|
291 / 151 / 34
Регистрация: 13.10.2009
Сообщений: 164
|
|
23.03.2011, 10:17 | 11 |
Обычно "текущим" называют тот, который используется в данный момент (просматривается, редактируется и тд.). Но у вас на данный момент работа со всем списком, а не с какими-то отдельными узлами. Возможно имеется ввиду - удаление узла с которым вы последним работали (который добавили куда-то) но как-то не смотрится, только добавили, сразу его удалять. В общем, вам лучше знать как оно должно выглядеть Если сможете объяснить, то мы тут уже поможем)
0
|
1 / 1 / 0
Регистрация: 22.11.2010
Сообщений: 32
|
|
23.03.2011, 10:36 [ТС] | 12 |
Совершенно верно, имеется в виду - удаление текущего узла списка, то есть узла, который только,что добавили, н-р в конце списка. Я так понимаю - нужно сделать указатель current, который будет хранить адрес последнего добавленного узла в списке.
Ладно, а как тогда его удалить, этот текущий узел в отдельной функции для удаления текущего узла н-р remove?
0
|
291 / 151 / 34
Регистрация: 13.10.2009
Сообщений: 164
|
||||||
23.03.2011, 12:10 | 13 | |||||
Ну как и писал, просто выдергивается часть кода, где само удаление:
1
|
1 / 1 / 0
Регистрация: 22.11.2010
Сообщений: 32
|
||||||||||||||||
24.03.2011, 13:23 [ТС] | 14 | |||||||||||||||
Переписал функцию удаления текущего узла
ptr->prev->next = ptr->next; Указатели в отладчике все NULL! вызываю функцию так
Весь код
0
|
291 / 151 / 34
Регистрация: 13.10.2009
Сообщений: 164
|
||||||
24.03.2011, 13:40 | 15 | |||||
1
|
1 / 1 / 0
Регистрация: 22.11.2010
Сообщений: 32
|
|||||||||||
26.03.2011, 12:27 [ТС] | 16 | ||||||||||
Декстер, спасибо тебе огромное за твою помощь!!!
Я смог доделать лабу по спискам, стекам и очередям. Только,вот в программе не работают вот эти четыре маленькие функции *** Функции перемещения по списку***: next – возвращает указатель на следующий узел и делает его текущим узлом; prev – возвращает указатель на предыдущий узел и делает его текущим узлом; last – возвращает указатель на последний узел и делает его текущим узлом; first – возвращает указатель на первый узел и делает его текущим Вот весь код. Указанные выше функции почему то работают неправильно
Добавлено через 1 час 31 минуту Я что-то не понимаю Если мы делаем текущим узлом н-р следующий узел, то почему значение расположенное по адресу текущего узла не меняется? Добавлено через 59 минут При вызове пункта меню функции перемещения по списку - работа программы прекращается и отладчик указывает что здесь данные NULL!
вроде должно работать, но увы Добавлено через 19 часов 2 минуты Не смог найти ошибку, подскажите, ребят пожалуйста - в какую сторону копать?
0
|
1 / 1 / 0
Регистрация: 22.11.2010
Сообщений: 32
|
|
02.04.2011, 12:40 [ТС] | 17 |
Да блин, снова вернулся к этому коду.
Не работают эти 4 функции, я уже изрядно устал искать ошибку
0
|
02.04.2011, 12:40 | |
02.04.2011, 12:40 | |
Помогаю со студенческими работами здесь
17
Двусвязные списки Шаблонные двусвязные списки. Линейные двусвязные списки Задача на двусвязные списки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |