Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на Delphi и Lazarus


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Boriss
Статус: Академик
Рейтинг: 1689
∙ повысить рейтинг »
lamed
Статус: Практикант
Рейтинг: 1364
∙ повысить рейтинг »
Jimhucksly
Статус: 5-й класс
Рейтинг: 643
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / Delphi и Lazarus

Номер выпуска:1487
Дата выхода:29.01.2010, 23:30
Администратор рассылки:Калашников О.А., Руководитель
Подписчиков / экспертов:584 / 228
Вопросов / ответов:1 / 1

Вопрос № 176246: Здравствуйте, уважаемые эксперты! У меня возникла проблема при написании процедуры удаления из двунаправленного (двусвязного) списка. Правильно удаляет только голову списка, и то если это единственный элемент в списке. Элементы списка выводятся в Str...



Вопрос № 176246:

Здравствуйте, уважаемые эксперты! У меня возникла проблема при написании процедуры удаления из двунаправленного (двусвязного) списка. Правильно удаляет только голову списка, и то если это единственный элемент в списке. Элементы списка выводятся в StringGrid. И я хотел, чтобы удаление происходило следующим образом. Клацаешь на строку в таблице нажимаешь на кнопку "Удалить". Элемент удаляется и в таблицу выводятся все элементы без удаленного. Но что-то у меня ничего не получается. Вроде бы логически все правильно, но оно все-равно не хочет работать. Пожалуйста гляньте, если нужно выложить еще какие-нибудь процедуры, например чтобы посмотреть как я добавляю элемент в список, спрашивайте.

Отправлен: 24.01.2010, 00:24
Вопрос задал: Камынин Владислав Дмитриевич, Посетитель
Всего ответов: 1
Страница вопроса »


Отвечает 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 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.14 от 23.01.2010

    В избранное