120
ГЛАВА 3. СТРУКТУРЫ ДАННЫХ
§3.1. Введение в структуры данных
Во второй главе мы рассмотрели основные структуры данных,
существующие в языке Си: переменные, массивы, структуры, объединения.
Структуры данных называются основными, поскольку они часто используются в
практике программирования, и из них можно образовывать более сложные
структуры.
Переменные, массивы, структуры, объединения при объявлении получают
имя и тип — под них выделяются ячейки оперативной памяти, в которые можно
записывать некоторые значения. Таким образом, данные объекты имеют
неизменяемую (статическую) структуру. Существует, однако, много задач, в
которых требуются данные с более сложной структурой. Для них характерно, что
в процессе вычислений изменяются не только значения объектов, но даже и
структура хранения информации. Поэтому такие объекты стали называть
динамическими информационными структурами. Их компоненты на некотором
уровне детализации представляют собой объекты со статической структурой, то
есть они принадлежат к одному из основных типов данных. Эта глава посвящена
проектированию объектов с динамической структурой, их анализу и работе с
ними.
§3.2. Стек
Стеком называется упорядоченный набор элементов, в котором
размещение новых и удаление существующих происходит с одного конца,
называемого вершиной. Иными словами, в стеке реализуется дисциплина
обслуживания LIFO (last input — first output, первым вошел — последним
вышел).
Над стеком реализованы следующие операции:
1) помещение элемента в стек push (s, i), где s — стек, i — помещаемый
элемент;
2) удаление
элемента из стека i=pop(s);
3) определение верхнего элемента без его удаления i=stacktop(s), которая
эквивалентна операциям i=pop (s) и push (s, i);
4) определение пустоты стека emty(s), которая возвращает true, если стек
пустой и false в противном случае.
Существует несколько способов реализации стека:
1) с помощью одномерного массива конечного размера, распределенного
статически;
2) с помощью одномерного массива, распределенного
динамически;
3) в виде связанного списка.
Стек можно реализовать в виде следующей структуры: