Изменения

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

Очередь

82 байта добавлено, 20:31, 6 июня 2013
м
Реализация на шести стеках: форматирование псевдокода
<code>
empty()
return !recopy and R.size == 0
</code>
=== push ===
<code>
push(x)
if !recopy L1.push(x) checkRecopy() else L2.push(x) checkNormal()
</code>
=== pop ===
<code>
pop()
if !recopy tmp = R.pop() Rc1.pop() checkRecopy() return tmp else tmp = Rc1.pop() toCopy = toCopy - 1 checkNormal() return tmp
</code>
=== checkRecopy ===
<code>
checkRecopy()
if Rc2.size > 0 Rc2.pop() recopy = L1.size > R.size if recopy toCopy = Rc1.size additionalOperations()
</code>
=== checkNormal ===
<code>
checkNormal()
additionalOperations() // Если мы не все перекопировали, то у нас не пуст стек T recopy = T.size != 0
</code>
=== additionalOperations ===
<code>
additionalOperations()
// Нам достаточно 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
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>
120
правок

Навигация