Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная_3.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
39.16 Кб
Скачать

Процедури 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]