Вопрос № 176246: Здравствуйте, уважаемые эксперты! У меня возникла проблема при написании процедуры удаления из двунаправленного (двусвязного) списка. Правильно удаляет только голову списка, и то если это единственный элемент в списке. Элементы списка выводятся в Str...
Вопрос № 176246:
Здравствуйте, уважаемые эксперты! У меня возникла проблема при написании процедуры удаления из двунаправленного (двусвязного) списка. Правильно удаляет только голову списка, и то если это единственный элемент в списке. Элементы списка выводятся в StringGrid. И я хотел, чтобы удаление происходило следующим образом. Клацаешь на строку в таблице нажимаешь на кнопку "Удалить". Элемент удаляется и в таблицу выводятся все элементы без удаленного. Но что-то у меня ничего не получается. Вроде бы логически
все правильно, но оно все-равно не хочет работать. Пожалуйста гляньте, если нужно выложить еще какие-нибудь процедуры, например чтобы посмотреть как я добавляю элемент в список, спрашивайте.
Отвечает star9491, 3-й класс :
Здравствуйте, Камынин Владислав Дмитриевич.
Ваш код не соответствует Вашим обозначениям lr и rr. Поэтому я привелу работу с двусвязным списком в других обозначениях. Пусть указатель на следующий элемент - это Next, а на предыдущий - Prev. Так как Вы используете указатели t и l на начало и конец списка, то проще всего помечать первый элемент как имеющий Prev=nil, а последний - как имеющий Next=nil. Тогда процедура удаления будет совсем простой: procedure DeleteElement(elem:rlist); begin
if elem=nil then Exit; if elem.Prev=nil then First:=elem.Next else elem.Prev.Next:=elem.Next; if elem.Next=nil then Last:=elem.Prev else elem.Next:=elem.Prev; Dispose(elem); end;
Ответ отправил: star9491, 3-й класс
Ответ отправлен: 24.01.2010, 11:21
Номер ответа: 258899
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 258899
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.