На этом шаге мы рассмотрим алгоритм формирования стека.
Напомним, что стек - это специально организованная память, выборка и занесение данных в которую подчиняется дисциплине LIFO ("последним вошел - первым обслужен").
Стек на базе линейного однонаправленного списка - линейный однонаправленный список, в котором все включения и исключения звеньев делаются в одном (выбранном нами) конце списка.
Опишем алгоритм помещения в стек информации.
stk = NULL;
Рис.1. Стек пуст
cin>>Элем;
t = new (node);
(*t).elem = Элем; (*t).sled = stk;
Рис.2. Новый элемент
stk = t;
Рис.3. "Настройка" указателя стека
Рис.4. Первый элемент в стеке
cin>>Элем1;
t = new (node);
(*t).elem = Элем1;
(*t).sled = stk;
Рис.5. Размещение в стеке второго элемента
stk = t;
Рис.6. "Настройка" указателя стека
Рис.7. В стеке два элемента
Продолжение процесса построения стека достаточно очевидно.
Оформим алгоритм в виде функции языка C++:
void POSTROENIE (node **stk) //Построение стека, заданного указателем *stk с клавиатуры. { node *t; int el; *stk = NULL; cin>>el; while (el!=0) { t = new (node); (*t).elem = el; (*t).sled = *stk; *stk = t; cin>>el; } }
На следующего шаге мы рассмотрим алгоритм включения звена в стек.