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

> Прочтите прежде чем задавать вопрос!

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

 
 Ответить  Открыть новую тему 
> Не удаляется первый элемент односвязного списка.
alex457
сообщение 29.04.2012 22:06
Сообщение #1


Новичок
*

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

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


Не удаляется первый элемент односвязного списка. Немогу понять в чем проблема. Подскажите, буду очень благодарен.


procedure DeleteItem(Num:integer);
var q:list;
begin
t:=lst;
while t^.Key <> Num do t:= t^.Next;
q:=t^.Next;
t^.Next := q^.Next;
Dispose(q);
end;



Сообщение отредактировано: alex457 - 29.04.2012 22:06
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Федосеев Павел
сообщение 29.04.2012 22:12
Сообщение #2


Бывалый
***

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

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


Ты уверен, что удаляемый элемент (q) имеет ключ равный Num?
          q:=t^.Next;        <------- Вот в этом месте
t^.Next := q^.Next;
Dispose(q);
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
alex457
сообщение 29.04.2012 22:18
Сообщение #3


Новичок
*

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

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


Цитата(Федосеев Павел @ 29.04.2012 22:12) *

Ты уверен, что удаляемый элемент (q) имеет ключ равный Num?
          q:=t^.Next;        <------- Вот в этом месте
t^.Next := q^.Next;
Dispose(q);



Когда первую запись удаляешь, зацикливание идет. Какой нить пример бы мне. А то я в списках слабоват пока что
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Федосеев Павел
сообщение 29.04.2012 23:12
Сообщение #4


Бывалый
***

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

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


для начала напиши процедуру без учёта особенности первого элемента.
А затем улучши - проверь, если это 1-й элемент (т.е. lst указывает на него) - например по ключу, тогда меняй и lst.
-------------------
Я вспомнил. Есть красивая реализация. Вместо такого удаления - просто копируешь в текущий t^(который хотел удалить) все значения из следующего t^.Next (если он не NIL). А потом следующий и удаляешь. Так сохраняется целостность структуры списка. Смотри пример в нашем FAQ."http://forum.pascalnet.ru/index.php?showtopic=2706"
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
alex457
сообщение 29.04.2012 23:42
Сообщение #5


Новичок
*

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

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


Спасибо большое. Буду смотреть.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 20.07.2025 22:47
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"