![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Stelz |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 31.7.2007 Репутация: нет Всего: нет |
Есть структура book и структура deck. Способ реализации - связанный двунаправленный линейный список. Необходимо осуществить добавление элемента справа и добавление элемента слева.
Функцию add_next взял из работы с односвязным списком... Осуществить вставку справа и слева с двусвязным списком не получается, ибо плохо разбираюсь с указателями, необходима помощь. Заранее благодарен. |
|||
|
||||
| bsa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Лучше ввести еще одну служебную структуру, по которой и будет производиться работа (это намного удобней и быстрей в общем случае, чем работа напрямую со списком, определяемым указателем на первый элемент):
Это сообщение отредактировал(а) bsa - 1.12.2007, 11:43 |
||||
|
|||||
| Stelz |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 31.7.2007 Репутация: нет Всего: нет |
t->next = lst->first ; E2288 Pointer to structure required on left side of -> or ->*
t->prev = lst->last; E2288 Pointer to structure required on left side of -> or ->* for(element *t1 = lst.first, t2; t1; t1 = t2) { E2034 Cannot convert 'element' to 'element *' t2 = t1->next; [C++ Error] Unit1.cpp(75): E2034 Cannot convert 'element *' to 'element' [C++ Warning] Unit1.cpp(77): W8004 't2' is assigned a value that is never used Простите, если глупые вопросы, но в СИ я плохо пока соображаю. Если последние 2 ошибки подозреваю исправляются простановкой * перед t2, то как исправить первые, непонятно. Если можно еще поясните, на примере, как мне из main() добавить запись слева и справа и потом вывести все записи, теперь как я понял в параметрах при вызове функции указывается уже не deck... И еще, нужны ли прототипы для данных функций и, если да, то как их объявить правильно. Заранее благодарю за ответ. |
|||
|
||||
| 0lmer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 3.12.2006 Репутация: нет Всего: -1 |
Шаблон класса двусвязного списка, то что отмечено "+" работает правильно
Смотри, мож пригодится...
|
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 1 Всего: 11 |
Указатель -- это просто адрес. То есть, число, представляющее собой порядковый номер ячейки памяти. В смысле, так можно думать.
Ну вот, исправляю и вставляю комментарии
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Stelz, я действительно в 3-х местах опечатался. В частности, все "lst->" надо заменить на "lst." и перед t2 поставить звездочку.
Как с этим работать:
|
|||
|
||||
| Stelz |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 31.7.2007 Репутация: нет Всего: нет |
Не работает add_next. Так же не совсем понял как при insert_before и insert_after установить указатель на последний элемент к примеру. И правильно ли я функцию принт сделал? |
|||
|
||||
| bsa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Stelz, а на что тебе отладчик?
На самом деле и add_next, add_prev работают одинакого неправильно. чтобы они работали правильно надо в них добавить следующие строки перед return t;: в add_next():
|
||||
|
|||||
| Stelz |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 31.7.2007 Репутация: нет Всего: нет |
Все ранво add_next() не добавляет записи. Добавляю адд_превом3 записи, вывожу на принт, добавились, после добавляю некстом, вывожу на принт, никаких изменений(
|
|||
|
||||
| bsa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Stelz, проверь, ты туда ли поместил указанные мной строчки.
Кстати, print() логичнее сделать так:
Добавлено через 11 минут и 12 секунд Точно. есть такая ошибка - забыл обновлять поля существующего элемента:
|
||||
|
|||||
| Stelz |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 31.7.2007 Репутация: нет Всего: нет |
Штука такая, что если добавить add_next()ом первый элемент, то он его добавит и дальше этой функцией уже ничего не добавляется, а add_prev()ом нормально добавлятся всё... Если же первый элемент добавить add_prev() то add_next() далее уже ничего не добавляет. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Stelz, читай выше
|
|||
|
||||
| Stelz |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 31.7.2007 Репутация: нет Всего: нет |
Огромное спасибо. Последний небольшой вопрос, как осуществить удаление только последнего элемента списка?
Пытаюсь сделать по аналогии с clear_list(), но толи указатель неправильно сдвигаю, толи еще что-то, ибо вместо удаления, элемент выводится с данными в виде крякозябр) |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Stelz, ты должен сделать примерно это:
|
|||
|
||||
| Stelz |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 31.7.2007 Репутация: нет Всего: нет |
Огромное спасибо
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |