|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.04.2011, 17:01 | #1 |
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
Здравствуйте.
Мне уже должно быть стыдно задавать такие вопросы, тем не менее, разобраться я с этим не могу. Я прошу помочь мне разобраться динамическим однонаправленным (односвязным) списком. Я буду использовать его в своей программе. (на самом деле, неплохо было бы списку быть двунаправленным, но с этим я постараюсь разобраться самостоятельно, а если не получится – буду тоже просить о помощи). Пишу программу на Delphi 7.0, однако решил список отлаживать на Turbo Pascal 7.0. По идее программы, список должен хранить в качестве информационной части записи, поля которых имеют различные типы, но, опять-таки, для тренировки над списком я решил просто хранить в нём числа типа byte. Наработки (если их так можно назвать) у меня, конечно, есть, я их опубликую, но прежде - несколько слов ходе реализации этой структуры. Существует несколько способов реализации списков (например, с использованием средств ООП), однако я решил не заморачиваться и реализовал свой список через простые записи: Код:
Далее, создаётся сам список, что происходит простым созданием его головы: Код:
Код:
Для того чтобы убедиться, что у меня всё правильно, я ввёл в свою программу процедуру для вывода всего списка на экран: Код:
Код:
Запускаю программу на исполнение, ввожу число (например, 5). Процедура Add благополучно его принимает, далее вызывается процедура ShowList. Но на экран ничего не выводится. Методом пошаговой трассировки (F7) мною было установлено, что проблемы возникают из-за двух противоречий в коде программы: В процедуре добавления элементов: Код:
А в процедуре вывода элементов на экран написано: Код:
Цикл у нас будет выполняться, пока ссылочная часть очередного элемента не будет пустой, а поскольку в проедуре добавления элементов ссылочная часть головы была занулена, а в процедуре вывода curr стал эквивалентен голове списка, цикл не выполняется ни разу, а сразу идёт переход в конец процедуры. Но как тогда поступать иначе, ведь ссылочная часть последнего добавленного элемента в спике должна указывать в nil, верно? Да и строка curr:=(curr^.next)^; мне не очень симпатична... Итак, я прошу помощи в реализации списка, не могли бы хорошо так меня проконсультировать, чтобы я более-менее понял и разобрался с этим. Спасибо большое заранее. Последний раз редактировалось Вадим Мошев; 10.12.2018 в 13:13. |
18.04.2011, 18:26 | #2 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
Итак, по порядку.
1) Код:
2) Код:
3) Код:
4) Код:
5) Код:
Код:
После вывода значения на экран нужно написать Код:
Код:
Последний раз редактировалось Son Of Pain; 18.04.2011 в 18:30. |
18.04.2011, 19:37 | #3 |
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
Большое спасибо тебе. Я ещё не всё проанализировал, но тем не менее, очень благодарен.
Да, действительно были вещи элементарные, которые я не углядел (видать, сильно утомился) но также есть и то, что мне следует подучить/запомнить/выучить |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[РЕШЕНО]: Вращение шестиугольника. Делфи 7 | Наталочка12 | Помощь студентам | 3 | 16.11.2016 13:57 |
Проверка кода Делфи. Динамический кольцевой список | agrestid | Помощь студентам | 30 | 30.11.2015 15:50 |
Динамический список Паскаль | andrew_ryaba | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 30.12.2013 09:26 |
Опять! однонаправленный список Паскаль, Делфи, Бейсик | pionerka | Помощь студентам | 0 | 13.12.2012 18:41 |
однонаправленный список Паскаль, Делфи, Бейсик | pionerka | Помощь студентам | 3 | 09.12.2012 17:22 |