Название: Проблемы с двухсвязным списком[РЕШЕНО] Отправлено: Larry от Январь 08, 2012, 15:48 Доброе утро, форумчане! Помогите решить проблему. Есть функция добавления элементов в двухсвязный список
Код: void add_link(char *name, link *item, link *parent) Код: link* add_link(char *name, link *item, link *parent) Название: Re: Проблемы с двухсвязным списком Отправлено: Igors от Январь 08, 2012, 16:34 Если Вы сказали что список двухсвязный, то должны быть его "голова" и "хвост"
Код Лучше упаковать в класс (head и tail явно members) Название: Re: Проблемы с двухсвязным списком Отправлено: Larry от Январь 08, 2012, 22:23 Извините, но не смог ответить раньше. Спасибо, но в класс оборачивать не буду, т.к. это под микроконтроллер меню. Это даже не двухсвязный, а четырех:)..А обязательно иметь и голову и хвост? Можно ведь иметь только голову и дальше по указателям прыгать...
Название: Re: Проблемы с двухсвязным списком Отправлено: andrew.k от Январь 08, 2012, 22:42 Извините, но не смог ответить раньше. Спасибо, но в класс оборачивать не буду, т.к. это под микроконтроллер меню. Это даже не двухсвязный, а четырех:)..А обязательно иметь и голову и хвост? Можно ведь иметь только голову и дальше по указателям прыгать... Тогда это не будет двусвзязный список)Название: Re: Проблемы с двухсвязным списком Отправлено: BRE от Январь 08, 2012, 22:47 Тогда это не будет двусвзязный список) Почему?Двусвязный означает что каждый элемент знает предыдущий и следующий элемент. Название: Re: Проблемы с двухсвязным списком Отправлено: Larry от Январь 08, 2012, 22:55 Тогда это не будет двусвзязный список) Почему?Двусвязный означает что каждый элемент знает предыдущий и следующий элемент. Название: Re: Проблемы с двухсвязным списком Отправлено: mutineer от Январь 09, 2012, 00:33 Пардон, может я что не вкурил, но
1) с какими парметрами вызов функции происходит? 2) как void функция может возвращать пустой указатель? Название: Re: Проблемы с двухсвязным списком Отправлено: Larry от Январь 09, 2012, 00:41 это я обшибся при написании сообщения...в данном случае я передаю указатель link *item, где и хранится список. Но после вызова ф-ции он пустой...
Название: Re: Проблемы с двухсвязным списком Отправлено: mutineer от Январь 09, 2012, 00:47 Есть как минимум одна ошибка - отсутствует last->next = menu;
Как я понимаю список передается не пустой в item? Название: Re: Проблемы с двухсвязным списком Отправлено: Larry от Январь 09, 2012, 01:16 Есть как минимум одна ошибка - отсутствует last->next = menu; перед тем, как прочитал ваше сообщение ее и нашел ;D...оказалось три ошибки ;DКак я понимаю список передается не пустой в item? Рабочая функция выглядит так: Код: void add_link(char *name, link **item, link *parent) Название: Re: Проблемы с двухсвязным списком Отправлено: andrew.k от Январь 09, 2012, 01:18 Тогда это не будет двусвзязный список) Почему?Двусвязный означает что каждый элемент знает предыдущий и следующий элемент. Каждый элемент знает следующий и предыдущий, какой смысл делать исключение для крайних? Об этом речь? Название: Re: Проблемы с двухсвязным списком Отправлено: andrew.k от Январь 09, 2012, 01:22 Спасибо за ответы...Подскажите пожалуйста почему при передаче указателя на структуру link *item функция не работает, а при передаче указателя на указатель link **item все нормально...чего-то не могу сообразить? Потому что в одном случае ты передаешь указатель по значению и присваиваешь его внутри функции и наружу значение не попадает. Во втором ты передаешь указатель на указатель, поэтому можешь менять значение указателя и получать результат.Можешь передавать указатель по ссылке (link * &item). Мне, например, так больше нравится) Хотя наверное это не распространенная конструкция и закаленные сишники будут возражать) Название: Re: Проблемы с двухсвязным списком[РЕШЕНО] Отправлено: Larry от Январь 09, 2012, 02:00 Спасибо большое за ответы, очень помогли...
Название: Re: Проблемы с двухсвязным списком Отправлено: Igors от Январь 09, 2012, 14:05 Рабочая функция выглядит так: Если parent != NULL, то созданный menu просто уплывет, будет утерян. Не видно зачем вообще подавать параметр parent Код: void add_link(char *name, link **item, link *parent) У Вас есть previous, но Вы добавляете в хвост пробегаясь до него (как обычно делают для односвязного списка). Тогда лучше смотрится так Код
Название: Re: Проблемы с двухсвязным списком[РЕШЕНО] Отправлено: KontAr от Март 24, 2012, 12:30 случайно забрел, но если нужен 4-связный список для контроллера, то может вот это может помочь: http://easyelectronics.ru/organizaciya-drevovidnogo-menyu.html#more-316
|