|
|||
Лабораторная работа № 2. Ход работы
19.03.13 Кондратенко Юрия, Шафранюка Игоря 6 ПО КТ
Лабораторная работа № 2
Тема. Работа со связными списками. Цель: изучить одну из фундаментальных абстрактных структур данных - связный список, приобрести навыки создания и реализации алгоритмов создания, добавления, удаления и просмотра связного списка.
Ход работы program car; uses crt; type namestr = string[20]; Link = ^Node; Node = record name: namestr; speed:integer; next: link; end; var head, z: link; namfind: namestr; v: 0..4; endmenu: boolean;
procedure list_initialize; begin new (head); new (z); head^.next:=z; z^.next:=nil; end;
procedure list_destroy; begin dispose (head); dispose (z); end;
procedure insert_after(name1: namestr; speed1: integer; t: link); var x: link; begin new (x); x^.name:= name1; x^.speed:= speed1; x^.next:= t^.next; t^.next:= x; end;
procedure delete_next(t: link); var del: link; begin del :=t^.next; t^.next :=t^.next^.next; dispose(del); end;
procedure InpAuto; var nam: namestr; sp: integer; begin write('Введите марку автомобиля: '); readln(nam); write('Максимальная скорость: '); readln(sp); insert_after(nam, sp, head); end;
procedure Mylist; var Curr: Link; begin Curr:=head^.next; While Curr^.next <> nil do begin writeln('Марка: ', Curr^.name, ' Скорость: ', Curr^.Speed); curr:=curr^.next; end; Write('Вывод списка окончен. Нажмите Enter.'); readln; end;
function findname(fn:namestr) :link; var Curr:Link; begin Curr:=head; while Curr<>Nil do if Curr^.name=fn then begin findname:=curr; exit; end else curr:=curr^.next; findName:=Nil; end;
begin list_initialize; endmenu:=false; repeat clrscr; textColor(green); writeln ('Укажите вид работы: '); writeln; textColor(white); writeln ('1. Запись первым в список'); writeln ('2. Удаление 1-го элемента списка'); writeln ('3. Просмотр всего списка'); writeln ('4. Удаление элемента, следующего за указанным'); writeln ('0. Завершение работы'); readln (v); case v of 1: inpauto; 2: delete_next(head); 3: mylist; 4: begin writeln ('Введите марку автомобиля, за которым в списке следует удаляемый'); readln(NamFind); delete_next(FindName(namfind)); end; else endmenu:=true; end; unit endmenu; list_destroy; end.
|
|||
|