можете помочь нужно чтобы повторяющие элементы списке были рядом - вопрос №3955305

//Бондаренко
type
man=record
name:string;
age:integer;
end;
p_list=^element;
element=record
inf:man;
next:p_list;
end;
procedure Init(var h,t: p_list);
begin
h:=nil;
t:=nil;
end; procedure Print( h,t: p_list);
var cur:p_list;
begin
if h=nil then
writeln ('Список пуст') else
begin
cur:=h;
while cur<>nil do begin
write(cur^.inf.name,' ',cur^.inf.age,' ' );
cur:=cur^.next;
end; end;
writeln;
end; function Size(h,t: p_list): word;
var k:integer;
cur:p_list;
begin
k:=0;
cur:=h;
while cur<>nil do begin
k:=k+1;
cur:=cur^.next;
end;
size:=k;
end; procedure add(a:man;var h,t:p_list);
var cur,cur_new:p_list;
begin
new(cur_new);
cur_new^.inf:=a;
if h=nil then
begin
h:=cur_new;
t:=cur_new;
t^.next:=nil;
end
else begin
if a.age<=H^.inf.age then
begin
cur_new^.next:=h;
H:=cur_new;
end
else begin
if a.age>=t^.inf.age then begin
cur_new^.next:=nil;
t^.next:=cur_new;
t:=cur_new;
end
else
begin
if (h<>nil) and (t<>nil)
then begin

cur_new^.next:=nil;
t^.next:=cur_new;
t:=cur_new; end
end
end;
end;
end;
procedure delete(a: man; var h, t: p_list);
var L,R, cur, curNext: p_list;
begin
L:=h;
R:=t;
if (L <> nil) then begin

cur:= l;
curNext:= cur^.next;
if (a.age = L^.inf.age) and (L^.next = nil) then begin
dispose(L);
dispose®;
end
else begin




cur:= L;
curNext:= cur^.next;
while (cur^.inf.age <> a.age) and (curNext <> nil) do begin
cur:= cur^.next;
if (cur<>nil) and (curNext<>nil) then
curNext:=cur^.next;
if (cur^.inf.age < a.age) and (curNext^.inf.age > a.age) then
writeln('Такого элемента не существует.');
end;
if (a.age = L^.inf.age) and (L^.next <> nil) then begin
l:= curNext;
cur^.next:= nil;
dispose(cur);
cur:= l;
end
else
if (cur^.inf.age = a.age) and (curNext <> nil) then begin
cur^.next:= curNext;

cur^.next:= nil;
dispose(cur);
end
else if (cur^.inf.age = a.age) and (curNext = nil) then begin
cur^.next:= nil;
dispose®;
end;



end;
end;
end; var h1,t1:p_list;
m:man;
k:integer; begin
Init(h1,t1);
Print(h1,t1);
writeln('L=',size(h1,t1));
m.name:='Vasya';
m.age:=30;
for k:=1 to 10 do begin add(m,h1,t1);writeln('Age=', m.age);
Print(h1,t1);
m.age:=30+k mod 3; end; writeln('L=',size(h1,t1));
{m.name:='Vasya';
m.age:=28;
for k:=1 to 5 do begin add(m,h1,t1);
m.age:=m.age-2;
end;
Print(h1,t1);
writeln('L=',size(h1,t1));
m.name:='Vasya';
m.age:=30;
for k:=1 to 10 do begin add(m,h1,t1);
m.age:=m.age+2;
end;
Print(h1,t1);
writeln('L=',size(h1,t1));} end.
Ответов пока нет

Еva

от 100 p.
Читать ответы
Посмотреть всех экспертов из раздела Учеба и наука > Информатика
Пользуйтесь нашим приложением Доступно на Google Play Загрузите в App Store