можете помочь с задачкой.
нужно создать двусвязный список с явной навигацией..
что бы можно было перемещаться на один элемент вправо или влево...и удалить текущий элемент...вот что есть у меня
Код:
unit Unit1;
interface
type
Tinf=integer;
List=^TList;
TList=record
data:TInf;
next,
prev:List;
end;
Procedure FreeStek(stek1:List);
procedure AddElem(var nach,ends:List;znach1:TInf);
procedure Print(spis1:List);
Function SearchElemZnach(spis1:List;znach1:TInf):List;
implementation
Procedure FreeStek(stek1:List);
var
tmp:List;
begin
while stek1<>nil do {пока stek1 не станет указывать в "пустоту" делать}
begin
tmp:=stek1;
stek1:=stek1^.next;
FreeMem(tmp,SizeOf(Tlist));
end;
end;
procedure AddElem(var nach,ends:List;znach1:TInf);
begin
if nach=nil then
begin
Getmem(nach,SizeOf(TList)); {создаём элемент, указатель nach уже будет иметь адрес}
nach^.next:=nil;
nach^.prev:=nil;
ends:=nach;
end
else
begin
GetMem(ends^.next,SizeOf(Tlist)); {создаём новый элемент}
ends^.next^.prev:=ends; {связь нового элемента с последним элементом списка}
ends:=ends^.next;
ends^.next:=nil;
end;
ends^.data:=znach1; {заносим данные}
end;
procedure Print(spis1:List);
begin
if spis1=nil then
begin
writeln('list is empty.');
exit;
end;
while spis1<>nil do
begin
Write(spis1^.data, ' ');
spis1:=spis1^.next
end;
end;
Function SearchElemZnach(spis1:List;znach1:TInf):List;
begin
if spis1<>nil then
while (Spis1<>nil) and (znach1<>spis1^.data) do
spis1:=spis1^.next;
SearchElemZnach:=spis1;
end;
end.
Program project1;
uses crt,Unit1;
var
SpisNach,
SpisEnd,
tmpl:List;
znach,a,b:integer;
ch:char;
begin
SpisNach:=nil;
SpisEnd:=nil;
repeat
clrscr;
Write('Programm for working whith ');
TextColor(4);
Writeln('bidirectional list.');
TextColor(7);
Writeln('Choose the action:');
Writeln('1) Create the list.');
Writeln('2) output the list.');
Writeln('3) Searching the element.');
Writeln('6) Exit.');
writeln;
ch:=readkey;
case ch of
'1':begin
write('Input the elements ');
readln(znach);
AddElem(SpisNach,SpisEnd,znach);
{AddElem(SpisNach,SpisEnd,znach);}
end;
'2':begin
clrscr;
Print(SpisNach);
readkey;
end;
'3':begin
write('What element you whant to find ');
readln(znach);
tmpl:=SearchElemZnach(SpisNach,znach);
if tmpl=nil then
write('this element is not exsist in list ')
else
begin
write('ќ«Ґ¬Ґ*в ');
TextColor(4);
Write(tmpl^.data);
TextColor(7);
Write(' **©¤Ґ*');
end;
readkey;
end;
end;
until ch='6';
FreeStek(SpisNach);
end.