
Лабораторна робота №6
Тема. Напівстатичні структури даних
Мета: дослідити та вивчити напівстатичні структури даних.
Професійна спрямованість: дана лабораторна робота є складовою частиною професійної підготовки фахівця з інформатики до роботи.
Теоретичні питання (план)
Список.
Стек.
Черга, дек.
Хід виконання роботи
Ознайомтеся з основними теоретичними відомостями.
Згідно номеру свого варіанту оберіть умову задачі.
Побудувати алгоритм розв’язання задачі.
Провести аналіз складності алгоритму.
Теоретичні відомості
До напівстатичних структур даних відносять стеки, деки і черги.
Списки
Це набір зв'язаних елементів даних, які в загальному випадку можуть бути різного типу.
Приклад списку:
E1, E2 ........, En... n > 1 і не зафіксовано.
Кількість елементів списку може мінятися в процесі виконання програми. Розрізняють 2 види списків:
Незв'язні.
Зв’язні.
В незв'язних списках зв'язок між елементами даних виражено неявно. В зв'язних списках в елемент даних заноситься покажчик зв'язку з наступним або попереднім елементом списку.
Стеки, деки і черги – це незв'язні списки. Крім того вони відносяться до послідовних списків, в яких неявний зв'язок відображається їх послідовністю.
Стеки
Черга виду LIFO (Last In First Out – останнім прийшов, першим пішов), при якій на обслуговування першим вибирається той елемент черги, який надійшов до неї останнім, називається стеком.
Через вказану дисципліну обслуговування, в стеку доступна єдина його позиція, яка називається вершиною стека – це позиція, в якій знаходиться останній за часом надходження в стек елемент. Коли ми заносимо новий елемент в стек, то він поміщається поверх колишньої вершини і тепер уже сам знаходиться у вершині стека. Вибрати елемент можна тільки з вершини стека; при цьому вибраний елемент виключається із стека, а в його вершині опиняється елемент, який був занесений в стек перед вибраним з нього елементом (структура з обмеженим доступом до даних).
Графічно стек можна представити таким чином:
Перший елемент заноситься вниз стека. Вибірка із стека здійснюється з вершини, тому стек є структурою з обмеженим доступом.
Операції, що здійснюються над стеками:
Занесення елемента в стек.
Push(S,I), де S - ідентифікатор стека, I - елемент, що заноситься.
Вибірка елемента із стека.
Pop(S)
Визначення пустоти стека.
Empty(S)
Читання елемента без його вибірки із стека.
StackTop(S)
Приклад реалізації стека на Паскалі з використанням одновимірного масиву:
type
Stack = Array[1..10] Integer; {стек місткістю 10 елементів типу Integer}
var
StackCount: Integer; {Змінна – покажчик на вершину стека, її початкове значення повинне бути рівне 0}
S: Stack; {Оголошення стека}
Procedure Push(I: Integer; var S: Stack);
begin
Inc(StackCount);
S[StackCount]:=I;
end;
Procedure Pop(var I: Integer; S: Stack);
begin
I:=S[StackCount];
Dec(StackCount);
end;
Function Empty: Boolean;
begin
If I = 0 then Empty:=True Else Empty:=False;
end;
При виконанні операції вибірки із стека спочатку необхідно здійснити перевірку на пустоту стека. Якщо він порожній, то Empty повертає значення True. Якщо Empty повертає False, то це означає, що стек не порожній і з нього ще можна вибирати елементи.
Procedure StackTop(var I: Integer; S: Stack);
begin
I:=S[StackCount];
end;
Черга
Поняття черги всім добре відоме з повсякденного життя. Елементами черги в загальному випадку є замовлення на те або інше обслуговування.
В програмуванні є структура даних, яка називається чергою. Ця структура даних використовується, наприклад, для моделювання реальних черг з метою визначення їх характеристик при даному законі надходження замовлень і дисципліні їх обслуговування. За своєю суттю черга є напівстатичною структурою – з часом і довжина черги, і склад можуть змінюватися.
На рис. наведена черга, що містить чотири елементи — А, В, С і D. Елемент А розташований на початку черги, а елемент D — в її кінці. Елементи можуть видалятися тільки з початку черги, тобто перший, що поміщається в чергу, елемент видаляється першим. З цієї причини чергу часто називають списком, організованим за принципом «перший розміщений першим видаляється» на противагу принципу стекової організації — «останній розміщений першим видаляється».
Дисципліну обслуговування, в якій замовлення, що поступило в чергу першим, вибирається першим для обслуговування (і видаляється з черги), називається FIFO (First In First Out – першим прийшов, першим пішов). Черга відкрита з обох боків.
Таким чином, вилучення компонент відбувається з початку черги, а запис – з кінця. В цьому випадку вводять два покажчики: один - на початок черги, другий – на її кінець.
Реальна черга створюється в пам'яті ЕОМ у вигляді одновимірного масиву з кінцевим числом елементів, при цьому необхідно вказати тип елементів черги, а також необхідна змінна в роботі з чергою.
Фізично черга займає суцільну область пам'яті і елементи слідують один за одним, як в послідовному списку.