Реалізація одних структур на базі інших
Реалізація структури даних на основі базової структури — це опис її роботи в термінах базової структури. При цьому вважається, що базова структура або дана спочатку, або вже кимось реалізована. Реалізація повинна включати опис ідеї реалізації (яким чином елементи структури, що реалізовується, зберігаються в базовій структурі, які додаткові змінні використовуються) і набір підпрограм, кожна з яких моделює деяке розпорядження структури, що реалізовується, за допомогою розпоряджень базової структури.
При розгляді будь-якої структури даних необхідно спочатку описати її з логічної точки зору, а потім розглянути різні способи її реалізації. Як база реалізації в більшості випадків виступає або масив, або динамічна пам'ять (тобто пам'ять, в якій можна захоплювати ділянки необхідного розміру і звільняти раніше захоплені ділянки, коли вони вже більше не потрібні).
Прості структури даних. Стек. Черга
Найбільш важливими з простих структур даних є стек і черга. Ці структури зустрічаються в програмуванні буквально на кожному кроці, в найрізноманітніших ситуаціях.
Черга
Черга містить елементи, як би збудовані один за одним в ланцюжок. У черги є початок і кінець. Додавати нові елементи можна тільки в кінець черги, забирати елементи можна тільки з початку. На відміну від звичайної черги, яку завжди можна за бажання покинути, з середини черги програміста видаляти елементи не можна.
Чергу можна представити у вигляді трубки. В один кінець трубки можна додавати кульки — елементи черги, з іншого кінця вони витягуються. Елементи в середині черги, тобто кульки усередині трубки, недоступні. Кінець трубки, в який додаються кульки, відповідає кінцю черги, кінець, з якого вони витягуються, — початку черги. Таким чином, кінці трубки не симетричні, кульки усередині трубки рухаються тільки в одному напрямі.
В принципі, можна було б дозволити додавати елементи в обидва кінці черги і забирати їх також з обох кінців. Така структура даних в програмуванні теж існує, її назва — "дек", від англ. Double Ended Queue, тобто черга з двома кінцями. Дек застосовується значно рідше, ніж черга.
Використання черги в програмуванні майже відповідає її ролі в звичайному житті. Черга практично завжди пов'язана з обслуговуванням запитів, в тих випадках, коли вони не можуть бути виконані миттєво. Черга підтримує також порядок обслуговування запитів. Розглянемо, наприклад, що відбувається, коли людина натискає клавішу на клавіатурі комп'ютера. Тим самим людина просить комп'ютер виконати деяку дію. Наприклад, якщо він просто друкує текст, то дія повинна полягати в додаванні до тесту одного символу і може супроводжуватися перемальовуванням області екрану, прокруткою вікна, переформатуванням абзацу і тому подібне
Будь-яка, навіть найпростіша, операційна система завжди в тому або іншому ступені багатозадачна. Це означає, що у момент натиснення клавіші операційна система може бути зайнята якій-небудь іншою роботою. Проте, операційна система ні в якій ситуації не має права проигноровать натиснення на клавішу. Тому відбувається переривання роботи комп'ютера, він запам'ятовує свій стан і перемикається на обробку натиснення на клавішу. Така обробка повинна бути дуже короткою, щоб не порушити виконання інших завдань. Команда, що віддається натисненням на клавішу, просто додається в кінець черги запитів, що чекають свого виконання. Після цього переривання закінчується, комп'ютер відновлює свій стан і продовжує роботу, яка була перервана натисненням на клавішу. Запит, поставлений в чергу, буде виконаний не відразу, а тільки коли наступить його черга.
У системі Windows робота віконних застосувань заснована на повідомленнях, які посилаються цим застосуванням. Наприклад, бувають повідомлення про натиснення на клавішу миші, про закриття вікна, про необхідність перемальовування області вікна, про вибір пункту меню і тому подібне Кожна програма має чергу запитів. Коли програма отримує свій квант часу на виконання, вона вибирає черговий запит з початку черги і виконує його. Таким чином, робота віконного застосування полягає, спрощено кажучи, в послідовному виконанні запитів з її черги. Черга підтримується операційною системою.
Підхід до програмування, що полягає не в прямому виклику процедур, а в посилці повідомлень, які ставляться в чергу запитів, має багато переваг і є одній з рис об'єктно-орієнтованого програмування. Так, наприклад, якщо віконній програмі необхідно завершити роботу з якої-небудь причини, краще не викликати відразу команду завершення, яка небезпечна, тому що порушує логіку роботи і може привести до втрати даних. Замість цього програма посилає самій собі повідомлення про необхідність завершення роботи, яке буде поставлене в чергу запитів і виконане після запитів, що поступили раніше.
