Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Пример программы создания и использования связанного списка




Пусть требуется создать связанный список из записей, содержащих сведения об автомобилях, а также реализовать операции со связанным списком: запись первым в список, удаление первого объекта из списка, просмотр всего списка, удаление объекта, следующего за указанным.

{Пример использования указателей для обработки связанного списка}

Program point;

Uses Crt;

Type

NameStr = String [20];

Link = ^Auto;

Auto = record

Name: NameStr; {Марка автомобиля}

Speed: real; {Скорость}

Next: Link; {Поле для связи со следующим объектом в списке}

end;

Var

Р,First: Link; {Указатели на запись: текущую, первую}

NamFind: NameStr; {Марка автомобиля для поиска}

V: 0..4; {Селектор меню}

EndMenu: boolean; {Окончание вывода меню}

{Поиск объекта с именем FN, по результатам поиска возвращает указатель на найденный объект или Nil, если объект не найден}

Function FindName(FN:NameStr): Link;

Var

Curr: Link;

begin

Curr:=First; {Установить указатель на первом объекте в списке }

{Повторять пока не дойдем до конца списка}

while Curr <> Nil do

if Curr^.Name=FN then {Если нашли заданный объект}

begin

FindName:=Curr; {Возвращаем значение указателя на него}

Exit; {Завершаем функцию}

end

else

Curr:=Curr^.Next; {Перейти к следующей записи}

FindName:=Nil; {В списке нет искомого объекта}

end; {Конец FindName}

{Добавление записи первой в связанный список}

procedure AddFirst(A:Link);

begin

A^. Next:=First; {Новый объект первый в списке}

First:=А; {Голова списка ссылается на новый объект}

end; {Конец AddFirst}

{Удаление первого объекта из списка}

procedure DelFirst(var A:Link);

begin

A:=First;

First:=First^. Next; {Теперь First указывает на тот объект, на который ранее ссылался объект А}

end; {Конец DelFirst}

{Удаление из списка объекта, стоящего после объекта Old}

procedure DelAfter(Old:Link; var A:Link);

begin

A:=Old^.Next; {Переменной А присваивается значение указателя на удаляемый объект}

Old^.Next:=Old^.Next^.Next; {Теперь Old указывает на тот объект, на который ранее ссылался следующий за ним объект, а объект А исключен из связанного списка}

end; {Конец DelAfter}

{Ввести данные об объекте}

procedure InpAvto;

begin

P:=New(Link); {Создать очередной объект типа Auto}

Write('Введите марку автомобиля:');

Readln(P^.Name);

Write('Максимальная скорость:');

Readln(Р^.Speed);

AddFirst(Р); {Вызов процедуры добавления записи, на которую ссылается указатель Р (Р- фактический параметр, А - формальный параметр-значение) }

end; {Конец InpAvto}

{Вывести на экран все объекты из связанного списка}

procedure MyList;

var

Curr: Link; {Локальная переменная - указатель на очередной объект}

begin

Curr:=First; {Установить указатель на первом объекте в списке}

{Повторять, пока не дойдем до конца списка}

while Curr <> Nil do

begin

Writeln('Марка: ', Curr^. Name,' скорость: ', Curr^. Speed);

Curr:=Curr^.Next; {Перейти к очередному объекту связанного списка}

end;

Write('Вывод списка окончен. Нажмите Enter');

Readln;

end; {Конец MyList}

Begin {Основная программа}

New(P); {Создать новую динамическую переменную и установить на нее переменную-указатель}

EndMenu:=False;

repeat {Очищать экран и выводить меню до тех пор, пока EndMenu<>True}

CIrScr;

Writeln('Укажите вид работы:');

Writein('1. Запись первым в список');

Writeln('2. Удаление первого объекта из списка');

Writein('3. Просмотр всего списка');

Writein('4. Удаление объекта, следующего в списке за указанным');

Writein('0. Окончание работы');

Readin(V);

Case V of {Вызов разных процедур в зависимости от выбора пункта меню}

1: InpAvto; {Ввод данных об объекте}

2: DelFirst(P); {Удаление первого в списке}

3: MyList; {Вывод списка всех элементов связанного списка}

4: begin {Удаление объекта, следующего за указанным}

Write('Введите марку автомобиля, за которым следует удаляемый из списка:');

Readln(NamFind);

DelAfter(FindHame(NamFind),P); {Вызов процедуры

DelAfter с параметрами: функцией FindName(NamFind) и указателем Р}

end

else

EndMenu:=True; {Завершить вывод меню}

end;

until EndMenu; {Если EndMenu=True, то завершить вывод меню на экран}

Dispose(Р); {Уничтожить динамическую переменную Р и освободить память в куче}

end.

Поделиться:





Читайте также:

A) за создание условий неэффективного использования ресурсов
b) Пример классического.
B. целевого характера использования природных ресурсов
II. ТРЕБОВАНИЯ К СТРУКТУРЕ ОСНОВНОЙ ОБРАЗОВАТЕЛЬНОЙ ПРОГРАММЫ ДОШКОЛЬНОГО ОБРАЗОВАНИЯ
II.Показатели эффективности использования материально-технических ресурсов
III. Показатели использования основных фондов
III. ПРОГРАММЫ ПОАСПЕКТНОГО ПСИХОЛОГИЧЕСКОГО НАБЛЮДЕНИЯ УРОКА С ПОЗИЦИИ УЧЕТА И РАЗВИТИЯ ПОЗНАВАТЕЛЬНЫХ ПРОЦЕССОВ ШКОЛЬНИКОВ
IV. ТРЕБОВАНИЯ К РЕЗУЛЬТАТАМ ОСВОЕНИЯ ОСНОВНОЙ ОБРАЗОВАТЕЛЬНОЙ ПРОГРАММЫ ДОШКОЛЬНОГО ОБРАЗОВАНИЯ
Q Приведите, пожалуйста примеры нарушений выполнения этой пробы при различных видах афазий.
Q Приведите, пожалуйста, примеры подобных нарушений внимания. Наиболее показательные примеры, на наш взгляд, относятся к сфере интеллектуальной деятельности и памяти.






Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...