Элементы двунаправленного списка имеют следующую структуру: Шифр детали Наименование Цена Вес Указатель предыдущего Указатель последующего Удалить элемент с заданным номером К от начала списка.
задание выполнил используя пример однонаправленого списка... помогите/объясните как сделать задание с двунаправлеными списками...
type PElem=^TElem; //Описание указателя на элемент TElem= record //Описание элемента shifr: string[5]; naim: string[10]; cena:string[2]; ves:string[3]; st:integer; sled: PElem; pred: PElem; end;
var Form1: TForm1; p, head,zad, last, nex: PElem; t,i:integer; implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin
head:=Nil; last:=Nil; nex:=Nil; t:=0; end; //добавление procedure TForm1.Button1Click(Sender: TObject); begin New(p); p^.shifr:=Edit1.Text; p^.naim:=Edit2.text; p^.cena:=Edit3.Text; p^.ves:=Edit4.Text; t:=t+1; Edit6.Clear; Edit6.Text:=inttostr(t); P^.st:=strtoint(Edit6.Text); If head=Nil Then head:=p Else last^.sled:=p; P^.sled:=Nil; Last:=p; end; //просмотр procedure TForm1.Button3Click(Sender: TObject); begin P:=Head; Label9.Caption:=''; Label10.Caption:=''; Label11.Caption:=''; Label12.Caption:=''; While P <> Nil Do Begin Label9.Caption:=Label9.Caption+chr(13)+P^.shifr; Label10.Caption:=Label10.Caption+chr(13)+P^.naim; Label11.Caption:=Label11.Caption+chr(13)+P^.cena; Label12.Caption:=Label12.Caption+chr(13)+P^.ves; P:=P^.sled; End; end;
procedure TForm1.Button4Click(Sender: TObject); begin Close; end; //удаление элемента с заданным номером procedure TForm1.Button2Click(Sender: TObject); begin i:=0; P:=Head; While P<>Nil Do Begin If StrToInt(Edit5.Text)-1=i Then Begin If P=Head Then Begin Head:=P^.sled; Dispose(P); P:=Head; End Else Begin If P^.sled=Nil Then begin Last^.sled:=Nil; end Else Begin Last^.sled:=P^.sled; End; dispose(P); P:=Last; End; End; Last:=P; P:=P^.sled; inc(i); End; end;
end.
в этом коде однонаправленый список... нужен двунаправленый по заданию...
наконец-то нашёл двунаправленое удаление элементов и двунаправленое добавление... в задании нужно по вводимому номеру удалить элемент, в коде приведённом ниже, он почему-то всё время верхний элемент удаляет...
объясните плз, что добавить/убрать, чтобы удалял элемент по номеру?
procedure TForm1.Button2Click(Sender: TObject); var d:Boolean; begin d:=false; i:=0; //счётчик // P:=Head; // Last:=nil; While (not d) {and (P<>Nil)} Do Begin if (head=nil) then begin ShowMessage('Нечего удалять'); d:=true end else begin If StrToInt(Edit5.Text)-1=i Then Begin If StrToInt(Edit5.Text)-1=i Then Begin head:=head^.sled; if head=nil then last:=nil else head^.pred:=nil; end else if p=last then begin last:=last^.pred; if last=nil then head:=nil else last^.sled:=nil; end else begin p^.pred^.sled:=p^.sled; p^.sled^.pred:=p^.pred; end; end; d:=true; dispose(p);