
Лінійні структури даних (черга, стек, дек).
В основі більшості лінійних структур даних покладено поняття лінійного списку.
Лінійний список – це впорядкована множина, яка складається з n-элементов (вузлів). Структурні властивості множини обмежуються лінійним положенням вузлів. Якщо n > 0, а X – список (множина вузлів), то х1 Î Х – перший вузол, а хn Î Х – останній вузол лінійного списку.
У вузлах списку є дві частини (поля). Перша частина, містить значення наперед визначених або раніше визначених типів. Обробка саме цих значень є метою програми. Друга частина містить значення-зв’язки (посилання), які пов’язують вузли між собою.
Лінійний список
Список може бути односпрямованим , якщо його вузли мають зв’язки , які спрямовані тільки від голови до останнього вузла хвоста, і двоспрямованими , якщо його вузли мають що зв’язки додатково спрямовані від останнього вузла хвоста до голови.
Оскільки можна вказати лексикографічний порядок вузлів , то список ще називається зв’язним, При цьому односпрямований список називається однозв’язним а двоспрямований – двозв’язним.
До списку можна застосовувати , наприклад, такі операції робити список на два списку , об’єднати два списки, додати вузли до списку.
Підходи до реалізації списку
З погляду реалізації списку в пам’яті даних можна розглядати два підходи
Вузли списку розміщуються в суміжних ділянках памяті , утворюючи масив.
Вузли списку розміщуються в довільних ділянках памяті, зявзуючись спеціальним чином і утворюючи шляхом зчеплення вузлів , або зв’язний список.
Другий підхід зазвичай реалізується за допомогою механізму динамічного розподілу памяті.
На основі лінійного списку будуються лінійні структури - Стек, черга, дек
Стек
Стек – це лінійний список , в якому всі включення і виключення вузлів здійснюються в одному кінці списку , який називається вершиною.
Черга
Черга – це лінійний список , в якому всі проводяться в одному кінці а всі виключення в іншому.
Дек
Дек – ц е лінійний список в якому всі включення та виключення виконуються з обох боків.
Векторне представлення лінійних структур даних.
Для всіх лінійних структур даних векторний список моделюється значеннями індексованого типу. В цьому випадку частіше всього векторний список подається у вигляді кільця.
При виконанні завдання лабораторної роботи пропонується для зберігання та обробки значень списку (стека, черги) використовувати індексовану змінну, що зберігатиме одновимірне мультизначення з компонентів того типу, який мають данні лінійного списку, а для вказівки на один або два кінця списку – змінні цілого типу, що зберігатимуть індекси компонентів–крайніх вузлів списку.
Зв’язане представлення лінійних структур даних.
Для всіх лінійних структур даних зв'язний список моделюється за допомогою вказівних змінних і динамічного розподілу пам'яті в «купі». При цьому значення в «купі» не розташовуються впритул, а навігація у списку здійснюється завдяки зв’язкам вузлів списку.
При виконанні завдання лабораторної роботи пропонується для зберігання та обробки значень списку (стека, черги) використовувати показчик іменованого типу, одне поле якого зберігатиме данні, інші поля, описані типом-показчиком на той самий іменований тип, відповідатимуть за зчеплення вузлів.
Підпрограми. Загальні положення.
Програмна конструкція на підпрограмному рівні інкапсуляції складається з операторів і
називається підпрограмою. З підпрограм складаються бібліотеки підпрограм, які колись стали
основою систем програмування.
З початку підпрограми розглядалися як повторювальні частини програм, що попередньо описуються
окремо від програми або безпосередньо в ній і багаторазово використовуються шляхом викликів
підпрограм.
Таким чином, підпрограми здебільшого слугували засобом скорочення текстів програм, ніж засобом абстрагування і проектування.
Нині, завдяки процедурної абстракції і абстракції управління, підпрограма відіграє дуже
важливу роль в модульній організації програм і їх проектуванні, і є фундаментальною концепцією
будь-якої мови програмування.
Таким чином підпрограма (subroutine), це повторювальна частина програми, яка важлива з двох точок зору: по-перше, як засіб скорочення зусиль на запис програми, по-друге, як засіб проектування програм.
Відкриті підпрограми.
Якщо розглядати відкриту підпрограму (open subroutine) як капсулу, то сутність обробки її
виклику полягає в тому, що капсула відкритої підпрограми безпосередньо заміщує відповідний
виклик в програмі.
Виклики закритих підпрограм обробляються завжди під час компіляції. При цьому компілятором на місці виклику генерується послідовність команд, які дають змогу звертатися до відповідного екземпляра підпрограми в пам'яті і повертати управління в точку, що йде слідом за викликом.
Закриті підпрограми.
Оператори, складові капсули, підставляються в текст програми на місце виклику підпрограми, тому рядки програми розсовуються і вона стає більш довгою. При цьому у момент обробки виклику підпрограми оболонка капсули зникає, а оператори капсули стають звичайними операторами програми.
Для обробки викликів відкритих підпрограм використовується спеціальна програма – макропроцесор, яка працює до роботи компілятора і тому ще називається препроцесором, а процес обробки викликів називається макрообробкою, макрообчисленням, або препроцесорною обробкою.
На основі відкритих підпрограм будується програмна конструкція підпрограмного рівня інкапсуляції, котра називається макрос.