Стек, опашка и рекурсия


Стек абстрактен тип данни (АТД)

Изключения

Проста реализация, базирана на масив
Algorithm size()
    return t + 1

Algorithm pop()
    if isEmpty() then
        throw EmptyStackException
    else
        tt − 1
        return S[t +1]
Algorithm push(o)
    if t = S.length − 1 then
        throw FullStackException
    else
        tt + 1
        S[t] ← o



Опашка АТД


Проста реализация с масив
Операции на опашка АТД:

Algorithm size()
    return (Nf + r) mod N

Algorithm isEmpty()
    return (f = r)
Algorithm enqueue(o)
    if size() = N − 1 then
        throw FullQueueException
    else
        Q[r] ← o
        r ← (r + 1) mod N

Algorithm dequeue()
    if isEmpty() then
        throw EmptyQueueException
    else
        oQ[f]
        f ← (f + 1) mod N
        return o

Едносвързан списък






Реализация на стек АТД с едносвързан списък
Реализация на опашка АТД с едносвързан списък

Опашка с два края АТД (дек)


Двусвързан списък



Реализация на дек АТД с двусвързан списък


Шаблон за адаптивно проектиране (Adapter Design Pattern)


Рекурсия

(triangle.cpp)

Ефективност на рекурсията