IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

> Как добавить новую запись в динамический список?
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Мужской
Реальное имя: alex

Репутация: -  0  +


Существует односвязный линейный список. Информация читается из файла в список. Вопрос состоит в том, как добавить новый элемент в уже существующий список? Заранее, очень благодарен.

Создание списка:

Assign(Data,Path);
Reset(Data);
l:=nil;
i:=0;
while not eof(Data) do
begin
inc(i);
Seek(Data,i);
Read(Data, Symbol);
new(t);
t^.key := i;
t^.row := Symbol;
t^.next := l;
l:=t;
end;
CountRecords := i;
Close(Data);




Вывод всех записей:

while ( t <> nil) do
begin

write(t^.row.SurName);
write(t^.row.Name);
write(t^.row.FullName);
write(t^.row.BhirtDay);
writeln(t^.row.Identity);
t:=t^.Next;
end;
end;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 180
Пол: Мужской

Репутация: -  2  +


1. благодаря Seek файл будет загружаться со 2-го элемента, а не с начала... и в некоторых случаях может быть ошибка чтения
2. в загрузке поле next указывает на предыдущий элемент, а не на следующий, поэтому при работе второго блока все выведется задом наперед, с конца
3. после вывода переменная t будет nil, поэтому начало списка надо хранить где-то... чтоб потом корректно удалить хотя бы

а по вопросу:
сначала надо найти нужный элемент (пройтись по ссылкам с начала списка) - допустим в переменную t1
потом вставить (это если порядок будет прямой, а не обратный, как сейчас):
new(t);
t.data:=....;
t.next:=t1.next;
t1.next:=t;

Сообщение отредактировано: P@sh@ -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 14.05.2024 20:53
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name