| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Инициализация указателя (класс графа) |
| Автор: Firex 23.4.2012, 11:45 | ||||||
Достопочтенные форумчане, подскажите по коду. Есть класс графа:
и методы:
Вопроса: куда "указывают" указатели Head и Tail при инициализации конструктором? Или так, куда "указывает" указатель переменной h в методе SearchGraph при первом обращении к нему? |
| Автор: baldina 23.4.2012, 11:57 |
т.е. на выделенную область памяти. поскольку конструктора HNode нет, то в этой памяти мусор. поэтому вот это при первом обращении будет работать неправильно |
| Автор: Firex 23.4.2012, 12:04 |
| У меня такие же сомнения, но код взят отсюда: http://khpi-iip.mipk.kharkiv.edu/library/datastr/book_sod/kgsu/din_0085.html, компилируется и работает правильно... |
| Автор: baldina 23.4.2012, 13:02 | ||
оно работает правильно потому что
а Tail == Head после инициализации. в первый раз я невнимательно посмотрел. но код ужасный, какая то смесь C и C++. Добавлено через 3 минуты и 49 секунд поглядел Вирта. действительно, у него tail всегда указывает на новый (выделенный) узел, который еще не используется |
| Автор: Firex 23.4.2012, 13:17 |
| Спасибо, вроде бы дошло. Хотя всё равно, после инициализации Head==Tail и указатели содерджат мусор, а (*Tail).Key=w происходит уже после h=Head. Т.е. в h мусор? |
| Автор: baldina 23.4.2012, 15:26 |
| h=Head=Tail => h->key == Head->key == Tail->key == w |
| Автор: Firex 23.4.2012, 16:13 |
| Вот теперь ясно, спасибо! |
| Автор: baldina 23.4.2012, 16:20 |
| Firex, возможно, Вам интересно будет сравнить разные варианты: однонаправленный список реализуется очень просто, псевдоэлементов не требуется http://codepad.org/hoYgZQLg двунаправленный список без последнего ограничивающего элемента http://codepad.org/d8bPn5JN двунаправленный список с ограничивающим элементом http://codepad.org/f6rN0fol сравните последние две версии: при наличии ограничивающего элемента добавление становится проще. проход по списку теперь ограничивается этим элементом, а не 0 для краткости освобождение памяти я опустил если вставки очень частые, разница будет в пользу второго варианта если списки часто создаются, но часто пустые - в пользу первого хотя во всех случаях разница очень невелика с точки зрения понимания и применения - вопрос вкуса |
| Автор: Firex 23.4.2012, 16:52 |
| baldina, благодарю, полезно. |