Языки программирования - концепции и принципы

это структура данных, которая принимает


7.6. Стековая архитектура

 

Стек — это структура данных, которая принимает и выдает данные в порядке LIFO — Last-In, First-Out (последним пришел, первым вышел). Конструкции LIFO существуют в реальном мире, например стопка тарелок в кафетерии или пачка газет в магазине. Стек может быть реализован с помощью массива или списка (см. рис. 7.5). Преимущество списка в том, что он не имеет границ, а его размер ограничен только общим объемом доступной памяти. Массивы же намного эффективнее и неявно используются при реализации языков про­граммирования.



    Кроме массива (или списка) в состав стека входит еще один элемент — указатель вершины стека (top-of-stack pointer). Это индекс первой доступной пустой позиции в стеке. Вначале переменная top будет указывать на первую позицию в стеке. На стеке допустимы две операции — push (поместить в стек) и pop (извлечь из стека), push — это процедура, получающая элемент как па­раметр, который она помещает в вершину стека, увеличивая указатель вершины стека top. pop — это функция, которая возвращает верхний элемент стека, уменьшая top, чтобы указать, что эта позиция стала новой пустой пози­цией.

     Следующая программа на языке С реализует стек целых чисел, используя массив:

C



#define Stack_Size 100

int stack[Stack_Size];

int top = 0;

void push(int element)

{

              if (top == Stack_Size)                                     /* Переполнение стека, предпримите

                                                                                        что-нибудь! * I

else stack[top++] = element;

 }

int pop(void)

{

if (top == 0)                                                            /* Выход за нижнюю границу стека,

                                                                                 предпримите то-нибудь! */

else return stack[--top];

 }

Выход за нижнюю границу стека произойдет, когда мы попытаемся извлечь элемент из пустого стека, а переполнение стека возникнет при попытке поме­стить элемент в полный стек.

Содержание раздела