Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.02.2013, 01:41   #1
Unique_Maks
Пользователь
 
Регистрация: 07.06.2010
Сообщений: 89
По умолчанию удаление элемента из двунаправленного списка

Здравствуйте!

Подскажите пожалуйста что делаю не так при реализации процедуры удаления элемента из двунаправленного списка

PHP код:
Type
   tp
=^el;

   
el=record
      value 
integer;
      
next tp;
      
prev tp;
   
end;

var
   
firstlast tp;
   
delete_value integer;

...

procedure tpDeletestarttpdel_value integer);
  var 
elementRight_elemLeft_elem tp;
begin
  
if start nil then writeln('List not init')
  else
    while (
start <> nil) do
    
begin
      
if(start^.value del_valuethen
      begin
      element 
:= start;
      
Right_elem := element^.next;
      
Left_elem := element^.prev;
      
dispose(element);
      
//element := nil;
      
start^.next := Right_elem;
      
start^.prev := Left_elem;
      
end else
      
start := start^.next;
    
end;
end;
....

//тело программы
begin
...
   
WriteLn('--- input delete value ---'); 
   
readln(delete_value); // ввод элемента для последующего удаления
   
tpDelete(first,delete_value); // передача первого и удаляемого элементов 
....
end
с тэгом php более читабельно
Unique_Maks вне форума Ответить с цитированием
Старый 02.02.2013, 01:58   #2
DmitriB
Пользователь
 
Регистрация: 31.01.2013
Сообщений: 12
По умолчанию

Вместо строчек
PHP код:
start^.next := Right_elem
start^.prev := Left_elem
Следует использовать
PHP код:
Right_elem^.prev := Left_elem;
Left_elem^.next := Right_elem
Так как вам нужно изменить поля соседних элементов, а вы меняете next и prev в найденном элементе, который, наоборот, надо удалить.
Плюс, надо будет еще добавить проверку, если этот элемент не является первым или последним, в случае чего обработка должна быть чуть по другому, так как нет одного следующего или предыдущего элемента.
DmitriB вне форума Ответить с цитированием
Старый 02.02.2013, 03:20   #3
Unique_Maks
Пользователь
 
Регистрация: 07.06.2010
Сообщений: 89
По умолчанию

DmitriB, спасибо большое) насчет проверок первого и последнего элемента думал сделать после того как отладится работа основного алгоритма)
Unique_Maks вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление элемента списка igoldyrev Помощь студентам 2 06.03.2011 14:24
Удаление элемента из списка bpystep Помощь студентам 4 09.07.2010 14:55
Удаление элемента из списка Ghost_gg Паскаль, Turbo Pascal, PascalABC.NET 2 30.05.2010 20:43
Удаление последнего элемента из списка и реверс этого списка. Goose Общие вопросы C/C++ 8 16.05.2010 16:12
удаление элемента из списка yagluboko Помощь студентам 1 10.04.2010 14:54