- •Визначувані типи
- •Опис визначуваного типу
- •Класифікація відомих визначуваних типів
- •Використання визначуваного типу
- •Підтипи
- •Перелічувані типи. 1
- •Перелічувані типи. 2
- •Об'єднаний тип
- •Складений тип
- •Рядковий тип
- •Представлення рядків
- •Представлення рядкового літерала в мові Pascal
- •Операції над рядковими знченнямив мові Pascal
- •Представлення рядкового літерала в мові с
- •Індексовані типи
- •Устрій одновимірних мультизначень
- •Устрій двовимірних мультизначень
- •Опис устрою мультизначення індексованого типу
- •Устрій паспорту індексованого типу
- •Приклади опису устрою індексованого типу. 1
- •Приклади опису устрою індексованого типу. 2
- •Індексатор
- •Основні властивості індексованих типів
- •Опис об'єктів індексованого типу. 1
- •Опис об'єктів індексованого типу. 2
- •Ініціалізація об'єктів індексованого типу
- •Ініціалізація при створенні об'єкту
- •Ініціалізація об'єкту оператором привласнення
- •Особливості індексованого типу в мові с.1
- •Особливості індексованого типу в мові с.2
- •Іменовані (комбіновані) типи
- •Механізм обробки значень іменованого типу
- •Відмінності в застосуванні іменованого та індексованого типів
- •Використання типізованих вказівних змінних іменованого типу
- •Спеціальний випадок використання типізованих вказівних змінних іменованого типу
- •Структури даних. Визначення
- •Структури даних. Визначення
- •Лінійні структури даних
- •Лінійний список
- •Лінійний список
- •Підходи до реалізації списку
- •Моделювання лінійного списку. 1
- •Векторне представлення лінійного списку. 1
- •Векторне представлення лінійного списку. 2
- •Векторне представлення стеку
- •Векторне представлення черги
- •Моделювання лінійного списку. 2
- •Зв’язане представлення черги. 2
- •Нелінійні структури даних
- •Представлення дерев
- •Устрій дерева як структури даних
- •Види дерев як структур даних
- •Моделювання дерева. Приклад 2
Векторне представлення стеку
Ініціалізація стеку
my_stack.top_stack := 0;
Додавання елементу (перевірка на переповнення стеку обовязкова)
my_stack.top_stack := my_stack.top_stack + 1;
my_stack.stack_body[my_stack.top_stack] := data;
Видалення елементу (перевірка на наявність даних у стеці обовязкова)
data := my_stack.stack_body[my_stack.top_stack];
my_stack.top_stack := my_stack.top_stack - 1;
Векторне представлення черги
Ініціалізація черги
my_queue.tail_queue := 0;
Додавання елементу (перевірка на переповнення черги обовязкова)
my_queue.tail_queue:= my_queue.tail_queue + 1;
my_queue.queue_body[my_queue.tail_queue] := data;
Видалення елементу (перевірка на наявність даних у черзі обовязкова)
data := my_queue.queue_body[1];
for i := 1 to my_queue.tail_queue do
my_queue.queue_body[i] := my_queue.queue_body[i+1];
my_queue.tail_queue := my_queue.tail_queue - 1;
Моделювання лінійного списку. 2
б) Зв’язане представлення
Для всіх лінійних структур даних зв'язний список моделюється за допомогою вказівних змінних і динамічного розподілу пам'яті в «купі». При цьому значення в «купі» не розташовуються впритул, а навігація у списку здійснюється завдяки зв’язкам вузлів списку.
При виконанні завдання лабораторної роботи пропонується для зберігання та обробки значень списку (стека, черги) використовувати показчик іменованого типу, одне поле якого зберігатиме данні, інші поля, описані типом-показчиком на той самий іменований тип, відповідатимуть за зчеплення вузлів.
Зв’язане представлення лінійного списку
Pascal:
type
PList = ^List;
List = record
date : тип компонента;
next : PList;
end;
var
my_queue : PList;
C:
struct List { тип компонента date;
List *next;
}
List *my_queue;
Зв’язане представлення стеку. 1
Ініціалізація стеку
my_stack := nil;
Додавання елементу
{створення нового вузла}
new(new_el);
{запис у новий вузол даного}
new_el^.data := data;
{зчеплення нового вузла з верхівкою стека}
new_el^.next := my_stack;
{перевизначення верхівки стеку}
my_stack := new_el;
Зв’язане представлення стеку. 2
Видалення елементу (перевірка на наявність даних у стеці обовязкова)
{запам’ятовування верхівки стеку}
del_el := my_stack;
{отримання даного з верхівки стеку}
data := del_el^.data;
{перевизначення верхівки на передостанній вузол}
my_stack := my_stack^.next;
{видалення запамятованого вузла-верхівки з «купи»}
dispose (del_el);
Зв’язане представлення черги. 1
Ініціалізація черги
my_queue := nil;
queue_head := nil;
Додавання елементу
{створення нового вузла}
new(new_el);
{запис у новий вузол даного}
new_el^.data := data;
{встановлення зв’язку нового вузла у нуль}
new_el^.next := nil;
{якщо в черзі немає жодного елементу, то…}
if queue_head = nil then
begin
{встановлення нового елементу як голови}
queue_head = new_el;
{встановлення нового елементу також як хвоста}
my_queue = new_el;
end
{якщо в черзі є хоча б один елемент, то…}
else
begin
{зв’язування хвоста з новим елементом}
my_queue^.next = new_el;
{перевизначення хвоста на новий елемент}
my_queue = new_el;
end;
