Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lab4_var6_z1

.pas
Скачиваний:
9
Добавлен:
09.05.2015
Размер:
2.1 Кб
Скачать
{Используйте линейные списки для хранения последователь-
ности чисел. Опишите процедуру или функцию, которая для
данного списка L создает список L1, содержащий те же эле-
менты, но в обратном порядке}

Program lab4_var6_z1;

Type
link=^node;
node=record num:integer; next:link end; // тип описывает запись состоящую из числа и указателя на запись
var S, //ссылка на очерeдное звено
L,L1:link; //списки с исходной последовательностью и обратной
N // N-количество чисел
,i:byte; //счетчик
x:integer;//переменная для ввода чисел

procedure out_spisok(l : link); //процедура вывода списка на экран
begin
while l<> nil do
begin
s:=l^.next;
write(l^.num,' ');
l:=s;
end;
writeln;
end;

//процедура формирования исходного списка путем добавления элемента в конец линейного списка
procedure add(var l:link;m:integer);
var t,p:link;
begin
if l=nil then begin
new(l);
l^.num:=m;
l^.next:=nil;
end
else begin
t:=l;
while t^.next<>nil do t:=t^.next;
new(p);
t^.next:=p;
p^.num:=m;
p^.next:=nil;
end;
end;

//Процедура формирования обратного списка
procedure Rev(var S1,S2:link);
begin
while S1<>nil do
begin
new(S2);
S2^.next:=S;
S2^.num:=S1^.num;
S:=S2;
S1:=S1^.next;
end;
end;

//процедура освобождения динамической памяти
procedure Clear(var L:link);
begin
while L<> nil do
begin
s:=L^.next;
dispose(L);
L:=s;
end;
end;

BEGIN
Repeat
Writeln('Введите N(количество чисел) > 1 ');
Readln(N);
Until N>1;

//Создание списка
S:=nil;
For i:=1 to N do
begin
Writeln('Введите ',i,'-e число:');
readln(x);
add(L,x);
end;

writeln('Введенный список L:');
out_spisok(L);

Rev(L,L1);

writeln('Обратный список L1:');
out_spisok(L1);

//освобождаем динамическую память}
clear(L);
clear(L1);

END.
Соседние файлы в предмете Основы алгоритмизации и программирования