Вот задание: добавить элемент в двусвязный список (в начало, середину и конец) и упорядочить в порядке возрастания.
Код программы в Паскале:
Код
program dvipLIST;
uses crt;
type sar=^el;
el=record
data:integer;
next:sar;
back:sar;
end;
procedure makeNew (var first:sar);
var x:integer;
g,temp:sar;
begin
writeln('Insert integer numbner. To finish press 0');
readln(x);
while x<>0 do
begin
if first=nil then
begin
new(g);
g^.data:=x;
g^.next:=nil;
g^.back:=nil;
first:=g;
end
else begin
new(temp);
g^.next:=temp;
temp^.back:=g;
g:=temp;
g^.data:=x;
end;
readln(x);
end;
writeln('LIST is done');
end;
procedure addbefore(var first:sar; x:integer);
var elem:sar;
begin
new(elem);
elem^.data:=x;
elem^.next:=first;
first^.back:=elem;
elem^.back:=nil;
first:=elem;
end;
procedure addlast(first:sar; data1:integer);
var elem:sar;
begin
elem:=first;
while(elem^.next<>nil)do
elem:=elem^.next;
new(elem^.next);
elem^.next^.back:=elem;
elem:=elem^.next;
elem^.data:=data1;
elem^.next:=nil;
end;
procedure addtocenter(first:sar; data1:integer);
var el,elk:sar;
begin
el:=first;
elk:=el^.next;
new(el^.next);
el^.next^.back:=el;
elk^.back:=el^.next;
el:=el^.next;
el^.next:=elk;
el^.data:=data1;
end;
procedure delete(var first:sar);
var s:sar;
begin
while(first<>nil)do
begin
s:=first;
first:=first^.next;
dispose(s);
end;
end;
procedure print(first:sar);
begin
writeln('Spausdiname: ');
while first<>nil do
begin
write(first^.data,' ');
first:=first^.next;
end;
writeln();
end;
procedure sort (var first:sar);
var s1,s2:sar;
nonsort:boolean;
begin
nonsort:=true;
while((nonsort)and(first<>nil))do
begin
s1:=first;
s2:=s1^.next;
nonsort:=false;
while(s2<>nil)do
begin
if(s1^.data>s2^.data)
then
begin
s1^.next:=s1^.next^.next;
if(s1^.next<>nil)then
s1^.next^.back:=s1;
s2^.next:=s1;
s2^.back:=s1^.back;
if(s2^.back<>nil)then
s2^.back^.next:=s2;
s1^.back:=s2;
nonsort:=true;
s2:=s1^.next;
end
else
begin
s1:=s1^.next;
s2:=s2^.next;
end;
end;
while(s1^.back<>nil)do
begin
s1:=s1^.back;
first:=s1;
end;
end;
end;
var LIST:sar;
selection:integer;
data:integer;
begin
makeNew(LIST);
writeln('1)Insert element to the beginning');
writeln('2)Insert to center ');
writeln('3))Insert to the end.');
writeln;
write('Where to insert? - ');
readln(selection);
writeln;
case selection of
1: begin
writeln('insert the value');
readln(data);
addbefore(LIST,data);
end;
2:begin
writeln('insert the value');
readln(data);
addtocenter(LIST,data);
end;
3:begin
writeln('insert the value');
readln(data);
addlast(LIST,data);
end;
end;
sort(LIST);
print(LIST);
delete(LIST);
end.