Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція 3 оп.doc
Скачиваний:
3
Добавлен:
14.08.2019
Размер:
94.21 Кб
Скачать

Реалізація черги на базі масиву

Як вже було сказано, програмістові масив даний зверху, решту всіх структур даних потрібно реалізовувати на його основі. Звичайно, така реалізація може бути багатоетапною, і не завжди масив виступає як безпосередня база реалізації. У разі черги найбільш популярні дві реалізації: безперервна на базі масиву, яку називають також реалізацією на базі кільцевого буфера, і посилальна реалізація, або реалізація на базі списку. Посилальні реалізації будуть розглянуті нижче.

При безперервній реалізації черги як база виступає масив фіксованої довжини N, таким чином, черга обмежена і не може містити більш N елементів. Індекси елементів масиву змінюються в межах від 0 до N - 1. Окрім масиву, реалізація черги зберігає три прості змінні: індекс почала черги, індекс кінця черги, число елементів черги. Елементи черги містяться у відрізку масиву від індексу почала до індексу кінця.

При додаванні нового елементу в кінець черги індекс кінця спершу збільшується на одиницю, потім новий елемент записується в осередок масиву з цим індексом. Аналогічно, при витяганні елементу з початку черги вміст осередку масиву з індексом почала черзі запам'ятовується як результат операції, потім індекс почала черзі збільшується на одиницю. Як індекс почала черзі, так і індекс кінця при роботі рухаються зліва направо. Що виходитиме, коли індекс кінця черги досягає кінця масиву, тобто N - 1?

Ключова ідея реалізації черги полягає в тому, що масив в думках як би зациклюється в кільце. Вважається, що за останнім елементом масиву слідує його перший елемент (нагадаємо, що останній елемент має індекс N - 1, а перший — індекс 0). При зрушенні індексу кінця черги управо у разі, коли він указує на останній елемент масиву, він переходить на перший елемент. Таким чином, безперервний відрізок масиву, займаний елементами черги, може переходити через кінець масиву на його початок.

Стек

Стек — найпопулярніша і, мабуть, найважливіша структура даних в програмуванні. Стеком є пристрій, що запам'ятовує, з якого елементи витягуються в порядку, зворотному їх додаванню. Це як би неправильна черга, в якій першим обслуговують того, хто встав в неї останнім. У літературі програміста загальноприйнятими є абревіатури, що позначають дисципліну роботи черги і стека. Дисципліна роботи черги позначається FIFO, що означає першим прийшов — першим підеш (First In First Out). Дисципліна роботи стека позначається LIFO, останнім прийшов, — першим підеш (Last In First Out).

Стек можна представити у вигляді трубки з подпружиненым дном, расположеной вертикально. Верхній кінець трубки відкритий, в нього можна додавати, або, як то кажуть, заштовхувати елементи. Загальноприйняті англійські терміни в цьому плані дуже барвисті, операція додавання елементу в стек позначається push, в перекладі "заштовхнути, запихнути". Новий елемент, що додається, проштовхує елементи, помещеные в стек раніше, на одну позицію вниз. При витяганні елементів із стека вони як би виштовхуються вгору, по-англійськи pop ("вистрілюють").

П рикладом стека може служити стіг сіна, стопка паперів на столі, стопка тарілок і тому подібне Звідси відбулася назва стека, що по-англійськи означає стопка. Тарілки знімаються із стопки в порядку, зворотному їх додаванню. Доступна тільки верхня тарілка, тобто тарілка на вершині стека. Хорошим прикладом також служитиме залізнична безвихідь, в яку можна складати вагони.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]