
Реалізація черги на базі масиву
Як вже було сказано, програмістові масив даний зверху, решту всіх структур даних потрібно реалізовувати на його основі. Звичайно, така реалізація може бути багатоетапною, і не завжди масив виступає як безпосередня база реалізації. У разі черги найбільш популярні дві реалізації: безперервна на базі масиву, яку називають також реалізацією на базі кільцевого буфера, і посилальна реалізація, або реалізація на базі списку. Посилальні реалізації будуть розглянуті нижче.
При безперервній реалізації черги як база виступає масив фіксованої довжини N, таким чином, черга обмежена і не може містити більш N елементів. Індекси елементів масиву змінюються в межах від 0 до N - 1. Окрім масиву, реалізація черги зберігає три прості змінні: індекс почала черги, індекс кінця черги, число елементів черги. Елементи черги містяться у відрізку масиву від індексу почала до індексу кінця.
При додаванні нового елементу в кінець черги індекс кінця спершу збільшується на одиницю, потім новий елемент записується в осередок масиву з цим індексом. Аналогічно, при витяганні елементу з початку черги вміст осередку масиву з індексом почала черзі запам'ятовується як результат операції, потім індекс почала черзі збільшується на одиницю. Як індекс почала черзі, так і індекс кінця при роботі рухаються зліва направо. Що виходитиме, коли індекс кінця черги досягає кінця масиву, тобто N - 1?
Ключова ідея реалізації черги полягає в тому, що масив в думках як би зациклюється в кільце. Вважається, що за останнім елементом масиву слідує його перший елемент (нагадаємо, що останній елемент має індекс N - 1, а перший — індекс 0). При зрушенні індексу кінця черги управо у разі, коли він указує на останній елемент масиву, він переходить на перший елемент. Таким чином, безперервний відрізок масиву, займаний елементами черги, може переходити через кінець масиву на його початок.
Стек
Стек — найпопулярніша і, мабуть, найважливіша структура даних в програмуванні. Стеком є пристрій, що запам'ятовує, з якого елементи витягуються в порядку, зворотному їх додаванню. Це як би неправильна черга, в якій першим обслуговують того, хто встав в неї останнім. У літературі програміста загальноприйнятими є абревіатури, що позначають дисципліну роботи черги і стека. Дисципліна роботи черги позначається FIFO, що означає першим прийшов — першим підеш (First In First Out). Дисципліна роботи стека позначається LIFO, останнім прийшов, — першим підеш (Last In First Out).
Стек можна представити у вигляді трубки з подпружиненым дном, расположеной вертикально. Верхній кінець трубки відкритий, в нього можна додавати, або, як то кажуть, заштовхувати елементи. Загальноприйняті англійські терміни в цьому плані дуже барвисті, операція додавання елементу в стек позначається push, в перекладі "заштовхнути, запихнути". Новий елемент, що додається, проштовхує елементи, помещеные в стек раніше, на одну позицію вниз. При витяганні елементів із стека вони як би виштовхуються вгору, по-англійськи pop ("вистрілюють").
П
рикладом
стека може служити стіг сіна, стопка
паперів на столі, стопка тарілок і тому
подібне Звідси відбулася назва стека,
що по-англійськи означає стопка. Тарілки
знімаються із стопки в порядку, зворотному
їх додаванню. Доступна тільки верхня
тарілка, тобто тарілка на вершині
стека.
Хорошим прикладом також служитиме
залізнична безвихідь, в яку можна
складати вагони.