Элементы двунаправленного списка имеют следующую структуру:
Шифр детали
Наименование
Цена
Вес
Указатель предыдущего
Указатель последующего
Удалить элемент с заданным номером К от начала списка.
задание выполнил используя пример однонаправленого списка...
помогите/объясните как сделать задание с двунаправлеными списками...
вот код
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
GroupBox2: TGroupBox;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
GroupBox1: TGroupBox;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
Label4: TLabel;
Edit3: TEdit;
Edit4: TEdit;
GroupBox3: TGroupBox;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
GroupBox4: TGroupBox;
Label13: TLabel;
Edit5: TEdit;
Edit6: TEdit;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
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.
в этом коде однонаправленый список... нужен двунаправленый по заданию...
в прикреплёном архиве все файлы проекта...