Для двусвязного списка (дека) реализовать подпрограммы - PascalABC.NET
Формулировка задачи:
Реализовать операции включения элемента слева, исключения справа. Для юнита.
Решение задачи: «Для двусвязного списка (дека) реализовать подпрограммы»
textual
Листинг программы
type rList = class V : Integer; head, tail : rList; constructor (V : Integer; head, tail : rList); begin Self.V := V; Self.head := head; Self.tail := tail; end; end; type myList = class count : Integer; head, tail : rList; constructor; begin count := 0; head := nil; tail := nil; end; function Fill(count, minV, maxV : Integer) : myList; begin for var i := 1 to count do AddHead(Random(minV, maxV)); Result := Self; end; function AddHead(V : Integer) : myList; begin head := New rList(V, nil, head); if head.tail <> nil then head.tail.head := head else tail := head; count += 1; Result := Self; end; function DeleteTail : myList; begin if head = tail then begin head := nil; tail := nil; count := 0; end else begin tail := tail.head; tail.tail := nil; count -= 1; end; Result := Self; end; function Print : myList; begin var tmp := head; if tmp = nil then Write('список пуст') else while tmp <> nil do begin Write(tmp.V, ' '); tmp := tmp.tail; end; Result := Self; end; function PrintLn : myList; begin Print; WriteLn; Result := Self; end; end; begin Randomize; var L := New myList; L.Fill(10, 0, 100); Write('Создан список и заполнен случайными значениями: '); L.PrintLn; Write(' Добавление в начало списка значения 111: '); L.AddHead(111).PrintLn; WriteLn('Исключение элементов с конца списка, пока в нём есть значения:'); while L.count > 0 do begin Write(L.count:2, ' : '); L.PrintLn.DeleteTail; end; L.PrintLn; end.
Объяснение кода листинга программы
- Создание классов rList и myList для двусвязного списка
- Задание значений переменным count, head, tail в классе myList
- Реализация функции Fill для заполнения списка значениями от minV до maxV
- Реализация функции AddHead для добавления элемента в начало списка
- Реализация функции DeleteTail для удаления элемента из конца списка
- Реализация функции Print для вывода значений списка на экран
- Реализация функции PrintLn для вывода значений списка на экран и перехода на новую строку
- Заполнение списка значениями от 0 до 100 с шагом 1
- Добавление элемента со значением 111 в начало списка
- Итерационное удаление элементов из конца списка, пока список не станет пустым
- Вывод списка на экран после удаления всех элементов