МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИИ
Новосибирский государственный технический университет
Практическое задание №6
по дисциплине информатика и программирование
на тему: «Список целых чисел. Стек целых чисел»
Факультет бизнеса
Группа: ФБИ-11
Студенты: Рыбаченко А.А.
Преподаватель: Зайцев М.Г.
Новосибирск
2012г.
Цель: Сформировать практические навыки реализации абстрактных типов данных на основе динамических информационных структур с помощью средств динамического распределения памяти Object Pascal.
Задание:
-
Реализовать тип Список целых чисел, в соответствии с приведенной ниже спецификацией.
-
Протестировать каждую операцию, определенную на типе.
Текст программы:
unit UList;
Interface
uses SysUtils,Dialogs;
type
PNode = ^Node; // Указатель на узел списка
List = PNode; // Список узлов.
T = integer; // Тип элементов списка
Node = record // Узел списка.
key: T; // Элемента списка.
next: PNode; // Указатель на следующий узел списка (служебное поле).
end;
{----Основные операции--------------------------------}
//-----------------------------------------------------------------------------
procedure AddR(var L: List; a: T);
// Операция ДобавитьСправа. Добавляет в список L элемент а справа .
//-----------------------------------------------------------------------------
procedure AddL(var L: List; a: T);
// Операция ДобавитьСлева. Добавляет в список L элемент a слева.
//-----------------------------------------------------------------------------
function H(var L: List): T;
// Операция Голова. Удаляет из списка голову и возвращает её значение.
//-----------------------------------------------------------------------------
function H_(var L: List): T;
// Операция ГоловаСправа. Удаляет из списка голову справа и возвращает её значение.
//-----------------------------------------------------------------------------
function Tail(var L: List): List;
// Операция Хвост. Выделяет из списка L хвост и возвращает указатель на него.
//-----------------------------------------------------------------------------
function Tail_(var L: List): List;
// Операция ХвостСправа. Выделяет из списка L хвост справа и возвращает указатель на него.
//-----------------------------------------------------------------------------
procedure Empty(var L: List);
// Операция Опустошить. Опустошает список.
//-----------------------------------------------------------------------------
procedure Merge(var L,N: List);
// Операция Соединить. К списку L добавляет список N справа.
//-----------------------------------------------------------------------------
function Number(L: List): Cardinal;
// Операция Элементов. Возвращает количество элементов в списке.
//-----------------------------------------------------------------------------
function ListToStr(L: List): String;
// Операция СписокВСтроку. Формирует строку, содержащую элементы списка.
{----Вспомогательные операции--------------------------------}
//-----------------------------------------------------------------------------
function CreateE(a: T): PNode;
// Создаёт узел списка для элемента a и возвращает указатель на него
//-----------------------------------------------------------------------------
function Next(a: PNode):PNode;
// Возвращает указатель на следующий узел списка.
//-----------------------------------------------------------------------------
function PredLast(L: List; var p: PNode): PNode;
// Возвращает адрес предпоследнего (p) и последнего узла списка.
//-----------------------------------------------------------------------------
function EToStr(a: PNode): String;
// Формирует строку, содержащую элемент a.