Читайте также:
|
|
Задание.
1. Проверка списка на пустоту.
2. Напечатать список в обратном порядке.
3. Определить имеется ли в списке два подряд элемента одинаковых.
Описание алгоритма решения.
В первом задании мы создаём список при помощи класса с полями дата – текущее значение в списке и next – это ссылка на следующий элемент. Затем проверяем при помощи Assert(head <> nil) пустой ли список. Во втором задании перебираем элементы при помощи конструкции while last <> nil do и last:= last.prev с последующим выводом на экран. В третьем задании перебираем элементы и сравниваем значения полей data текущего элемента и следующего:Result:= head.data; If (Result = head.data.next) для поиска одинаковых значений, когда находим выходим при помощи exit.
Листинг программы.
{Сформировать линейный односвязный список, состоящий из трёх целых чисел 12, 34 и 56 в указанном порядке.}
type
N1<T> = class
data: Char;
next: N1<Char>;
//prev: N1< Char >;
constructor(data: Char; next: N1< Char >);
begin
Self.data:= data;
//Self.prev:= prev;
Self.next:= next;
end;
end; {конец списка}
function CreateList(n: Char): N1< Char >;
begin
Assert(n > 0);
Writeln('Введите элемент');
var x:= ReadChar;
var head:= new N1< Char >(x, nil);
var Start:= head;
for var i:= 1 to n - 1 do
begin
Writeln('Введите элемент');
Read(x);
head.next:= new N1< Char >(x, nil);
head:= head.next;
end;
Result:= Start;
end;
{ Дана ссылка на первый элемент линейного списка. Вывести его содержимое.}
procedure Print(head: N1< Char >);
begin
Writeln('Список имеет вид');
Assert(head <> nil); // проверка списка на не пустоту!!! Задание 1.
while head <> nil do
begin
Writeln(head.data);
head:= head.next;
end;
end;
begin
var t:= CreateList(12, 34, 56);
Print(t);
end.
{ Дана ссылка на последний элемент линейного двусвязного списка. Вывести его содержимое в обратном порядке.}
procedure PrintBack(last: N1< Char >);
begin
Writeln('Список: ');
while last <> nil do
begin
Writeln(last.data);
last:= last.prev;
end;
end;
{Определяем есть ли в списке два подряд одинаковых элемента}
function Equals(head: N1< Char >): boolean;
begin
Assert(head <> nil);
while head <> nil do
begin
Result:= head.data;
// сравниваем текущее значение элемента списка со следующим
If (Result = head.data.next)
begin
writeln(‘Мы нашли одинаковые элементы, они равны - ’, head.data);
exit;
end;
head:= head.next;
end;
end;
Дата добавления: 2015-08-17; просмотров: 52 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Вставка | | | Лабораторная работа «Деревья», задание №6. |