
Методичні рекомендації до виконання лабораторної роботи № 7
Тема: Реалізація та відлагодження програм обробки черги та стеку.
Мета: Отримання навиків в організації динамічних структур даних – черги та стеку.
Теоретичні відомості
Динамічна структура даних черга створюється на основі однонаправленого списку, в якому доступними до обробки є:
перший елемент – тільки для видалення,
останній елемент – тільки для додавання (введення).
Отже з чергою виконується робота по принципу: «перший зайшов – перший вийшов». Для роботи з чергою завжди необхідно мати дві змінні-посилання: first – для збереження адреси першого елементу черги (голова черги) та last – для збереження адреси останнього елементу черги (хвіст черги).
last
first
nil
Приклади основних операцій з чергою
Створення черги:
. . .{Опис вузла черги дійсних чисел}
type
n=^uzel;
uzel=record
inf: real;
next: n;
end;
var
first: n; {Посилання на перший елемент черги}
last: n; {Посилання на останній елемент черги}
u: n: {Посилання на довільний вузол черги}
c: char;
{Введення першого елементу в чергу}
new(u); first:=u;
writeln(‘Введите первый елемент’); readln(u^.info)
u^.next:=nil; last:=first;
c:=’y’;
{Формування черги в циклі дозаписом елемента в «хвіст» черги}
while c=’y’ do
begin
new(u); u^.next:=last;
writeln(‘Введите очередной елемент’); readln(u^.info);
last:=u;
writeln(‘Хотите продолжать?’); readln(c);
end;
Видалення першого елементу з черги
…
u:=last;
{Переміщення по черзі до другого елементу – того, що посилається на перший}
while (u^.next<>first) do u:=u^,next;
{Видалення першого елементу}
first:=u; Dispose(u^.next); first^.next:=nil;
Динамічна структура даних стек створюється на основі однонаправленого списку, в якому доступними до обробки є тільки перший елемент – для додавання (введення) або для видалення.
Отже зі стеком виконується робота по принципу: «перший зайшов – останній вийшов». Для роботи зі стеком завжди необхідно мати одну змінну-посилання: first – для збереження адреси першого елементу стеку.
first
nil
Приклади основних операцій зі стеком
Створення стеку:
. . .{Опис вузла стеку дійсних чисел}
type
n=^uzel;
uzel=record
inf: real;
next: n;
end;
var
first: n; {Посилання на перший елемент стеку}
u: n: {Посилання на останній вузол стеку}
c: char;
{Введення першого елементу в стек}
new(u); first:=u;
writeln(‘Введите первый елемент’); readln(u^.info)
u^.next:=nil;
c:=’y’;
{Формування стеку в циклі }
while c=’y’ do
begin
{Ведення нового елементу в стек}
new(u); u^.next:=first;
writeln(‘Введите очередной елемент’); readln(u^.info);
first:=u;
writeln(‘Хотите продолжать?’); readln(c);
end;