Изменения

Перейти к: навигация, поиск

Стек

43 байта убрано, 19:48, 4 марта 2012
Работа стека
==Работа стека==
<wikitex>
[[Файл: lifo.png|thumb|right|200px|Стек]]Операция вставки нового элемента применительно к стекам часто называется $push$ (запись в стек), а операция удаления — $pop$ (снятие со стека). Стек, способный вместить не более $n$ элементов, можно реализовать с помощью массива $S [1..n]$. Этот массив обладает атрибутом $S.top[S]$, представляющим собой индекс последнего помещенного в стек элемента. Стек состоит из элементов $S[1..S.top [S]]$, где $S[1]$ — элемент на дне стека, а $S[S.top[S]]$ — элемент на его вершине.
Если $S.top[S] = 0$, то стек не содержит ни одного элемента и является пустым (empty). Протестировать стек на наличие в нем элементов можно с помощью операции-запроса $Stack$_$Empty$. Если элемент снимается с пустого стека, говорят, что он опустошается ($underflow$), что обычно приводит к ошибке. Если значение $S.top[S]$ больше $n$, то стек переполняется ($overflow$). (В представленном ниже псевдокоде возможное переполнение во внимание не принимается.)
Каждую операцию над стеком можно легко реализовать несколькими строками кода:
Stack_Empty(S)
{
if S.top[S]==0
return true;
else
push(S,x)
{
S.top[= S] $\leftarrow$ .top[S] - + 1; S[S.top[S]] $\leftarrow$ = x;
}
pop(S)
else
{
S.top[= S] $\leftarrow$ .top[S] - 1; return S[S.top[S] + 1];
}
285
правок

Навигация