120
 правок
Изменения
м
       return !recopy and R.size == 0
       if !recopy            L1.push(x)            checkRecopy()       else            L2.push(x)            checkNormal()
       if !recopy            tmp = R.pop()            Rc1.pop()            checkRecopy()            return tmp       else            tmp = Rc1.pop()            toCopy = toCopy - 1            checkNormal()            return tmp
       if Rc2.size > 0            Rc2.pop()       recopy = L1.size > R.size       if recopy            toCopy = Rc1.size            additionalOperations()
       additionalOperations()       // Если мы не все перекопировали, то у нас не пуст стек T       recopy = T.size != 0
       // Нам достаточно 3 операций на вызов       toDo = 3       // Пытаемся перекопировать R в T       while toDo > 0 and R.size > 0            T.push(R.pop())            toDo = toDo - 1       // Пытаемся перекопировать L1 в R и Rc2       while toDo > 0 and L1.size > 0            x = L1.pop()     R.push(x)     Rc2.push(x)     toDo = toDo - 1   // Пытаемся перекопировать T в R и Rc2 с учетом toCopy   while toDo > 0 and T.size > 0     x = T.pop()     if toCopy > 0
→Реализация на шести стеках:  форматирование псевдокода
<code>
 empty()
</code>
=== push ===
<code>
 push(x)
</code>
=== pop ===
<code>
 pop()
</code>
=== checkRecopy ===
<code>
 checkRecopy()
</code>
=== checkNormal ===
<code>
 checkNormal()
</code>
=== additionalOperations ===
<code>
 additionalOperations()
       R.push(x)
       Rc2.push(x)
       toDo = toDo - 1    // Пытаемся перекопировать T в R и Rc2 с учетом toCopy    while toDo > 0 and T.size > 0       x = T.pop()       if toCopy > 0          R.push(x)          Rc2.push(x)          toCopy = toCopy - 1            toDo = toDo - 1       // Если все скопировано, то меняем роли L1, L2 и Rc1, Rc2       if T.size = 0            swap(L1, L2)            swap(Rc1, Rc2)
</code>
