|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Помогите с линейными списками ?
Помогите решить проблему, вот есть список в котором я просто беру любой элемент и он от туда удаляется, но удаляется все здорово когда я начинаю удалять все с начала списка, а когда начинаю удалять с конца то самый последний элемент не хочет удаляться ! Я просто даже брал адрес последнего элемента и 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 .. : ..); |