Процедури Enquene та Dequene
Перепишемо процедури Enquene і Dequene (типові найменування процедур Insert та Delete для черги) з урахуванням помилок underflow overflow. Будемо вважати, що черга організована на базі масиву розміру N.
{перевірка черги на заповнення та порожність}
Quene Is Empty(Q)
If head[Q] = tail[Q]
Then return True
Else return False
Quene Is Full(Q)
If head[Q] = tail[Q] mod N + 1
Then return True
Else return False
{додавання та видалення елементу із черги}
Enquene(Q, x)
If Quene Is Full(Q)
Then return error ‘overflow’
Else Q[tail[Q]] ← x
tail[Q] ← tail[Q] mod N + 1
Dequene(Q)
If Quene Is Empty(Q)
Then return error ‘underflow’
Else t ← Q[head[Q]]
head[Q] ← head[Q] mod N + 1
return t
Дек
Дек (від англ. ‘deque’ – ‘double ended quene’) – це структура даних, що дозволяє додавати і видаляти елементи з обох своїх кінців. Таким чином дек одночасно реалізує принципи LiFo і FiFo. Запишемо основні процедури, пов’язані з цією структурою:
{ D – дек;
head[D] – «голова» деку;
tail[D] – «хвіст» деку;
N – розмір базового масиву }
{перевірка деку на заповнення та порожність}
Deque Is Empty(D)
If head[D] = tail[D]
Then return True
Else return False
Deque Is Full(D)
If head[D] = tail[D] mod N + 1
Then return True
Else return False
{процедури вставки в лівий та правий край деку}
Pushf(D, x)
If Deque Is Full(D)
Then return error ‘overflow’
Else If head[D] = 1
Then head[D] ← N
Else head[D] ← head[D] – 1
D[head[D]] ← x
Pushb(D, x)
If Deque Is Full(D)
Then return error ‘overflow’
Else D[tail[D]] ← x
tail[D] ← tail[D] mod N + 1
{процедури видалення елементу з лівого та правого краю дека}
Popf(D)
If Deque Is Empty
Then return error ‘underflow’
Else t ← D[head[D]]
head[D] ← head[D] mod N + 1
return t
Popb(D)
If Deque Is Empty
Then return error ‘underflow’
Else If tail[D] = 1
Then tail[D] ← N
Else tail[D] ← tail[D] – 1
return D[tail[D]]
Черга на базі двох стеків
Запишемо процедури, що організовують чергу на базі двох стеків. Будемо вважати, що в нас вже реалізовані операції Push та Pop і запит Empty.
Enquene(S1, S2 ,x)
Push (S1, x)
Dequene(S1, S2)
If Empty(S2)
Then If Empty(S1)
Then return Error: ‘Underflow’
Else while not Empty(S1)
do Push(S2, Pop(S1))
return Pop(S2)
Реалізація згорнутого в кільце однозв’язного списку
Реалізуємо операції Insert, Search та Delete для однозв’язного списку, згорнутого в кільце.
List Is Empty(L)
If head[L] = nil
Then return True
Else return False
Search(L, key)
If not List Is Empty(L)
Than x ← head[L]
do If key[x] = key
Then return x
x ← next[x]
while x ≠ head[L]
return nil
Insert(L, x)
If List Is Empty(L)
Then next[x] ← x
head[L] ← x
Else next[x] ← next[head[L]]
next[head[L]] ← x
Delete(L, x)
If not List Is Empty(L)
Then If next[x] = x
Then head[L] ← nil
Else t ← x
while next[t] ≠ x
do t ← next[t]
next[t] ← next[x]
If x = head[L]
Then head[L] ← next[x]
