Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.09.2008, 16:20
asked86 asked86 вне форума
Прохожий
 
Регистрация: 07.09.2008
Сообщения: 1
Репутация: 10
По умолчанию Помогите с линейными списками ?

Помогите решить проблему, вот есть список в котором я просто беру любой элемент и он от туда удаляется, но удаляется все здорово когда я начинаю удалять все с начала списка, а когда начинаю удалять с конца то самый последний элемент не хочет удаляться ! Я просто даже брал адрес последнего элемента и dispose(..) не хотит гад ! Как решить ?

Заранее благодарен !

PBus=^TBus; // Структура
TBus=record
n_autobus : integer;
n_marshrut:integer;
family : string;
name : string;
otch : string;
next : PBus;
end; // TBus



// Сама подпрограмма

procedure delete_n_bus_in_park(var p : PBus; var nomer_bus : integer; var avtobus : PBus);
var pp : PBus;
f : Boolean;
begin
pp:=p;
f:=false;

while pp<>nil do
begin
if (nomer_bus=pp^.n_autobus)and(pp^.next<>nil) then // Удаление заданного элемента между 1 и последним
begin
new(avtobus);
avtobus^.n_autobus:=pp^.n_autobus;
avtobus^.n_marshrut:=pp^.n_marshrut;
avtobus^.family:=pp^.family;
avtobus^.name:=pp^.name;
avtobus^.otch:=pp^.otch;

q:=pp^.next;

pp^.n_autobus:=q^.n_autobus; // на место удаляемого элемента присвоим следующий
pp^.n_marshrut:=q^.n_marshrut; // как бы удалив заданный (удаляемый) элемент
pp^.family:=q^.family;
pp^.name:=q^.name;
pp^.otch:=q^.otch;
pp^.next:=q^.next;

dispose(q);
end;

if (nomer_bus=pp^.n_autobus)and(pp^.next=nil) then
begin
new(avtobus);
avtobus^.n_autobus:=pp^.n_autobus;
avtobus^.n_marshrut:=pp^.n_marshrut;
avtobus^.family:=pp^.family;
avtobus^.name:=pp^.name;
avtobus^.otch:=pp^.otch;
p:=pp;
f:=true; // если остается один элемент то мы берем его адрес и ставим метку в истину
end; // if (nomer_bus=p
pp:=pp^.next;
end; // while (pp<>nil) do

if f then
begin
p:=nil; // если метка истина то этому адресу присвоим неопределенность а его значения перенесем на маршрут
end; // if f then

end; // delete_n_bus_in_park(var .. : ..);
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:58.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter