Элементы двунаправленного списка имеют следующую структуру: Шифр детали Наименование Цена Вес Указатель предыдущего Указатель последующего Удалить элемент с заданным номером К от начала списка.
задание выполнил используя пример однонаправленого списка... помогите/объясните как сделать задание с двунаправлеными списками...
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.
в этом коде однонаправленый список... нужен двунаправленый по заданию...