Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

_TPLab_My_Посібник

.pdf
Скачиваний:
20
Добавлен:
08.06.2015
Размер:
1.85 Mб
Скачать

Схема видалення «середнього» елемента представлена на Рис.1.

 

 

Current

5

Temp

 

 

 

4

 

1

 

 

Info

Info

 

Info

 

Next

Next

 

Next

 

Prev

Prev

 

Prev

 

 

 

2

 

 

 

 

 

3

 

 

 

Рисунок 1. Схема видалення елемента з двозв’язаного списку.

Пунктирними лініями зображені вказівники після видалення елемента, а цифрами позначені відповідні оператори процедури Del_Element.

КОНТРОЛЬНІ ЗАПИТАННЯ.

1.Які операції над списком вимагають переміщення ним (перегляду списку)?

2.Чому в двозв’язаному списку базові операції реалізуються ефективніше, ніж в однозв’язаному?

3.Навіщо в процедурі видалення елемента зі списку після переадресації вказівників застосовується процедура Dispose?

4.Приведіть приклади використання двозв’язаних списків в інформатиці/програмуванні.

5.Приведіть приклади використання двозв’язаних списків в математиці.

ЗАВДАННЯ ДЛЯ САМОСТІЙНОГО ВИКОНАННЯ. Завдання 1.

Модифікувати програму опрацювання однозв’язаного списку (лабораторна робота №11), сформувавши двозв’язаний список, та виконати завдання свого варіанту.

Завдання 2.

1.Створити процедуру вставки нового елемента в двозв’язаний список.

2.Створити процедуру локалізації (визначення порядкового номера) елемента із заданим ключем в двозв’язаному списку.

3.Створити процедуру визначення інформаційної частини (ключа) елемента, заданого своїм порядковим номером (номером позиції) у двозв’язаному списку.

4.Створити процедуру сортування елементів двозв’язаного списку.

5.Використовуючи двозв’язаний список знайти всі менші 100 натуральні числа, квадрати яких є паліндромами. Паліндромом називається число, запис якого читається однаково з початку і з кінця, наприклад: 7, 33, 717, 27572.

111

Print to PDF without this message by purchasing novaPDF (http://www.novapdf.com/)

ЛАБОРАТОРНА РОБОТА № 13 Проектування та відлагодження програм опрацювання стеків, деків, черг.

МЕТА РОБОТИ: Навчитись проектувати алгоритми та програми опрацювання абстрактних типів даних стеків, деків, черг.

ЗАВДАННЯ:

Спроектувати алгоритми та програми розв’язання задач опрацювання стеків, деків, черг за варіантами завдань, номери яких визначає викладач.

МЕТОДИЧНІ ВКАЗІВКИ

1.Перед виконанням роботи необхідно пригадати:

логічну структуру програми на мові Turbo Pascal;

правила опису простих та структурованих типів даних;

правила запису виразів;

синтаксис основних операторів;

синтаксис опису та правила застосування стандартних (бібліотечних) процедур і функцій;

правила розподілу пам'яті при виконанні програми;

правила опису вказівників;

способи ініціалізації вказівників;

способи доступу до змінної за вказівником;

допустимі операції над вказівниками;

процедури та функції керування динамічною пам'яттю;

процедури та функції створення, опрацювання та знищення динамічних змінних;

правила опису та способи організації однозв’язаного списку;

правила та способи реалізації типових операцій над елементамиоднозв’язаного списку

2.Перед виконанням цієї роботи необхідно вивчити:

правила опису та способи організації стеків, деків, черг;

правила та способи реалізації базових операцій над елементами стеків, деків, черг.

3.Перевірка правильності роботи програми здійснюється шляхом аналізу отриманих результатів на основі порівняння вхідних даних та результатів обчислень.

ВІДОМОСТІ З ТЕОРІЇ.

СТЕК.

Означення 1. Стек (магазин) – це динамічна структура даних (спеціальний вид лінійного списку), в якій операції додання та видалення елементів виконуються тільки на одному кінці, який називається

вершиною стека.

Стек реалізує принцип обслуговування «останнім прийшов – першим обслуговується» (LIFO: Last Input – First Output).

Можна привести безліч прикладів стекових структур з реального життя, тобто тих структур, в яких можливий доступ тільки до елемента, доданого останнім – стопка книг, колода карт, магазин чи обойма з патронами в автоматичній зброї тощо. Дуже часто стек використовується в системному програмуванні, компіляторах, різноманітних рекурсивних алгоритмах. Зокрема, стек використовується для зберігання адрес повернення в головну програму з підпрограм або з процедур опрацювання переривань. Розподіл пам’яті для локальних змінних здійснюється за принципом LIFO і тому ця область пам’яті називається сегментом стеку.

Так як стек є різновидом лінійного списку, тобто відноситься до абстрактних типів даних, то він визначається математичною моделлю лінійного списку (див. лабораторна робота № 11) та множиною базових операцій:

Push(x, S) – додання нового елемента х у вершину стеку S («заштовхування у стек»);

Pop(S) – вибірка (зчитування) елемента з вершини стеку («виштовхування зі стеку»). Вибраний елемент видаляється зі стеку;

Top(S) – повернення елемента з вершини стеку;

Empty(S) – перевірка чи стек є порожнім;

MakeNull(S) – очистка стеку.

Для вказаних базових операцій над стеком вжиті традиційні назви.

112

Print to PDF without this message by purchasing novaPDF (http://www.novapdf.com/)

РЕАЛІЗАЦІЯ СТЕКУ ЗА ДОПОМОГОЮ МАСИВУ.

Стек, як і однозв’язаний список, можна реалізувати як статичну структуру даних за допомогою одномірного масиву. Але приведена в лабораторній роботі №11 реалізація списку за допомогою масиву для представлення стеку є нераціональною, так як кожне виконання операцій Push і Pop вимагатиме переміщення всіх елементів стеку і тому час їх виконання буде пропорційний кількості елементів стеку.

А.Ахо запропонував більш ефективний спосіб реалізації стеку за допомогою масиву, врахувавши, що вставка і видалення елементів стеку здійснюється тільки через вершину стеку [Axo с.59]. За цією схемою фіксується «дно» стеку в комірці з найбільшим індексом і стеку дозволяється «рости» до вершини масиву, тобто до комірки з найменшим індексом. Допоміжна змінна Top (вершина) вказує на поточну позицію першого елемента стеку. Схема такої реалізації стеку приведена на Рис.1.

Рисунок 1. Схема реалізації стеку за допомогою масиву.

На приведеній схемі останній (за індексом) елемент масиву знаходиться у хвості стеку, тобто є

 

 

1

 

 

 

Top

 

 

 

 

 

1-й елемент

 

 

 

 

 

 

 

 

 

 

 

2-й елемент

MaxLength останній елемент

першим доданим у стек елементом. Перший (за індексом) елемент масиву знаходиться у вершині стеку, тобто є останнім доданим у стек елементом.

Для такої реалізації стеку можна описати абстрактний тип даних TStack наступним чином: Const maxlength = 100;

Type TInfo = <ім’я_типу> { тип елементів стеку } TStack = Record

Info: Array [1.. MaxLength] Of TInfo; Top: Integer

End; Var Stack: TStack;

Очевидно, що при реалізації стеку за допомогою масиву необхідно резервувати масив, довжина якого (maxlength) рівна максимальній «глибині» стеку.

Нижче приведені коди процедур та функцій, які реалізують базові операції над стеком.

Procedure MakeNull (Var S: TStack);

Begin

S.Top MaxLength + 1

{якщо top = MaxLength + 1, то стек порожній }

End;

Function Empty (S: TStack): Boolean;

Begin

If S.Top > MaxLength Then Result True

Else Result False

End;

Function Top (Var S: TStack): TElement;

Begin

If Empty(S) Then Write (‘Стек порожній’)

Else Result S.Info[S.Top]

End;

Procedure Pop (Var S: TStack);

Begin

If Empty(S) Then Write (‘Стек порожній’)

Else S.Top S.Top + 1

113

Print to PDF without this message by purchasing novaPDF (http://www.novapdf.com/)

End;

Procedure Push (x: TElement; Var S: TStack);

Begin

If S.Top = 1 Then Write (‘Стек повний’)

Else

Begin

S.Top S.Top - 1;

S.Info[S.Top] x

End

End;

Примітка 1: Очевидно, що можлива й інша реалізація стеку з фіксацією «дна» стеку в комірці з індексом 1. Тоді вершина стеку буде знаходитись в комірці з найбільшим індексом.

РЕАЛІЗАЦІЯ СТЕКУ ЗА ДОПОМОГОЮ СПИСКУ.

Так всі операції над стеком виконуються через його вершину, то досить легко реалізувати стек за допомогою лінійного однозв’язаного списку. Для такого списку достатньо зберігати тільки вказівник на перший елемент (вершину списку). Якщо стек порожній, то цей вказівник буде рівний Nil.

Рисунок 1. Схема реалізації стеку за допомогою лінійного однозв’язаного списку.

Push

Вершина

 

 

 

 

Top

Info

Info

Info

Info

Next

Next

 

Next

Nil

Pop

 

 

 

 

 

 

Для такої реалізації стеку опишемо абстрактний тип даних TStack наступним чином:

Type TInfo= <ім’я_типу>

{ тип інформаційного поля }

TLink= ^TStack;

{ вказівник на тип стек

}

TStack= Record

{ тип елементів стеку

}

Info: TInfo;

{ інформаційна частина

}

Next:TLink{поле вказівника на наступний елемент}

End;

Var Top: TLink;{вказівник на перший елемент – вершину стеку}

Приведемо приклади процедур, які реалізують базові операції над стеком.

Додання нового елемента у вершину стеку.

Var x: TInfo; { інформаційна частина нового елемента }

Read (x);

Procedure Push (x: TInfo; Var PtrTop: TLink);

{ Push заносить елемент x у вершину стеку PtrTop } Var Temp: TLink; { вказівник на новий елемент }

Begin

If MaxAvail>=SizeOf(x) Then {вільної пам’яті є достатньо}

Begin

New (Temp); {створюємо новий елемент}

Temp^.Info x; {заповнюємо його інформ. частину }

Temp^.Next PtrTop;

{1}

{ зв'язок

між новим елементом і «старою» вершиною }

 

 

 

{

 

Temp

{2}

PtrTop

 

 

вершиною стає новий елемент }

End {Then}

Else

Writeln(‘ недостатньо пам’яті, вставку не виконано ‘)

114

Print to PDF without this message by purchasing novaPDF (http://www.novapdf.com/)

End; {Push}

Схема «заштовхування» нового елемента в стек приведена на Рис.2. Пунктирними лініями зображені нові зв’язки (вказівники), а цифрами позначені відповідні оператори процедури Push.

Нова

вершина

 

 

х

 

 

 

 

Next

 

 

 

2

 

 

Стара

 

 

 

 

 

 

 

1 вершина

 

 

 

 

 

 

Info

 

Info

Top

 

 

 

 

 

 

 

Next

 

 

Nil

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рисунок 2. Схема «заштовхування» нового елемента в стек.

Легко помітити, що процедура Push «заштовхування» нового елемента в стек ідентична процедурі InsertFirst вставки нового елемента на початок однозв’язаного списку (лабораторна робота № 11). Для створення першого елемента стеку можна застосувати і процедуру ListFirst.

Операцію «заштовхування» елемента в стек можна (навіть доцільно) реалізувати у вигляді функції, так як в головну програму повертається тільки вказівник на вершину стеку.

Вибірка (зчитування) елемента з вершини стеку.

 

Procedure Pop (Var x: TInfo; Var PtrTop: TLink);

 

Var Temp: TLink; { допоміжний вказівник }

 

Begin

 

 

If PtrTop<>Nil Then { стек не порожній }

 

Begin

 

 

 

 

{1}

x PtrTop^.Info;

Temp

PtrTop;

{2}

PtrTop

Temp^.Next;

{3}

Dispose (Temp);

{4}

End

Else Write (‘стек порожній’);

End;

Операцію вибірки елемента з вершини стеку реалізуємо у вигляді процедури, тому що в головну програму повертаємо значення елемента, який був у вершині стеку, і вказівник на нову вершину. Допоміжний вказівник Temp використовуємо для тимчасового зберігання посилання на елемент, який розміщений у «старій» вершині стеку і подальшого звільнення пам’яті, розподілену для нього (збирання «сміття»). Схема операції зображена на Рис.3.

Рисунок 3. Схема «виштовхування» елемента з вершини стеку. Перевірка чи стек є порожнім.

Temp

 

х

 

2

1

Нова

 

4

 

 

вершина

 

Info

 

Info

Top

 

Next

 

 

Next

 

 

Info Info

Next Nil

3

Function Empty (Var PtrTop: TLink): Boolean;

Begin

115

Print to PDF without this message by purchasing novaPDF (http://www.novapdf.com/)

If PtrTop=Nil Then Empty true

Else Empty false

End;

Очистка стеку (Рис.3).

 

 

Procedure MakeNull (Var PtrTop: TLink);

 

Var Temp: TLink; { допоміжний вказівник }

 

Begin

 

 

While PtrTop<>Nil Do{ стек не порожній }

 

Begin

 

 

Temp

PtrTop;

{2}

PtrTop

Temp^.Next;

{3}

Dispose (Temp);

{4}

End

End;

ЧЕРГА.

Означення 2. Черга – це динамічна структура даних (спеціальний вид лінійного списку), в якій додання нових елементів (постановка на чергу) здійснюється тільки у хвіст черги, а вибірка (видалення) елементів – тільки з голови черги.

Черга реалізує принцип обслуговування «першим прийшов – першим обслуговується» (FIFO: First Input – First Output).

Черги широко застосовуються в програмуванні – в імітаційному моделюванні, в буферизованому введенні-виведенні, при диспетчеризації задач та опрацюванні подій в операційній системі.

Базові операції над чергами аналогічні базовим операціям над стеками з однією суттєвою відмінністю – вставка нових елементів здійснюється в хвіст черги.

Так як черга є різновидом лінійного списку, тобто відноситься до абстрактних типів даних, то вона визначається математичною моделлю лінійного списку (див. лабораторна робота № 11) та множиною базових операцій:

MakeNull (Q) – очистка черги Q;

Front (Q) – повернення першого елемента черги Q;

Enqueue (x, Q) – додання нового елемента х у «хвіст» черги;

Dequeue (Q) – вибірка (видалення) елемента з «голови» черги;

Empty(Q) – перевірка чи черга Q є порожня.

Відмітимо, що вказані базові операції над чергою названі у відповідності до загальноприйнятої термінології.

Традиційними також є позначення: «хвіст» черги – rear (з англ. – тил), «голова» черги – front.

РЕАЛІЗАЦІЯ ЧЕРГИ ЗА ДОПОМОГОЮ МАСИВУ.

Чергу, аналогічно спискам та стекам, можна реалізувати за допомогою статичного масиву.

Найбільшим недоліком такої реалізації знову ж є неефективне використання пам’яті внаслідок необхідності її резервування для масиву максимально можливого розміру. Але й при максимальному резервуванні внаслідок дуже обмеженого об’єму статичної пам’яті і додання нових елементів в один кінець та видалення з іншого кінця черги масив, призначений для розміщення елементів черги, швидко вичерпується – «переповнюється». При цьому можлива парадоксальна ситуація – є вільні комірки масиву, але неможливо додати нові елементи у чергу.

Спеціальні прийоми, які дозволяють вирішити в деякій мірі дану проблему, вимагають додаткових обчислювальних ресурсів – пам’яті або часу (внаслідок ускладнення базових операції над чергою).

Наприклад, якщо «голова» черги – останній елемент масиву, а «хвіст» – його перший елемент, то черга росте в напрямі початку масиву (індексу 1). Якщо ж «голова» черги – перший елемент масиву, а «хвіст» – його останній елемент, то черга росте в напрямі максимального індексу. Так як нові елемент додаються у «хвіст», а видаляються з «голови» черги, то, щоб уникнути ситуації «переповнення» масиву (при наявності вільних комірок) необхідно після кожного видалення елемента черги переміщати весь масив на одну позицію: в першому випадку – в напрямі максимального індексу, в другому випадку

– в напрямі індексу 1.

116

Print to PDF without this message by purchasing novaPDF (http://www.novapdf.com/)

Іншим способом раціональнішої реалізації черги за допомогою масиву є використання циклічного масиву, в якому перша комірка слідує за останньою, як показано на Рис. 4. [7,С.65]

Maxlength

1

2

Q.rear

Q.front

Рисунок 4. Реалізація черги за допомогою циклічного масиву.

Така реалізація черги вимагає зберігання двох вказівників – на «голову» черги (Q.front) та її «хвіст» (Q.rear). При доданні елемента в чергу вказівник Q.rear переміщається на одну позицію за годинниковою стрілкою і елемент вставляється в цю позицію. Для видалення елемента з черги достатньо перемістити вказівник Q.front на одну позицію за годинниковою стрілкою. При цьому операції вставки (Enqueue) та видалення (Dequeue) виконуються за фіксований час, незалежний від довжини черги.

До недоліків реалізації черги за допомогою циклічного масиву відноситься складність перевірки черги на порожність та контроль переповнення масиву.

РЕАЛІЗАЦІЯ ЧЕРГИ ЗА ДОПОМОГОЮ СПИСКУ.

При реалізації черги за допомогою однозвязаного списку необхідно зберігати два вказівники – на «голову» та «хвіст» черги. Якщо черга порожня, то вони обидва мають значення Nil.

Для такої реалізації черги опишемо абстрактний тип даних TQueue наступним чином:

Type TInfo= <ім’я_типу>

{ тип інформаційного поля }

TLink= ^ TQueue;

{ вказівник на тип черга

}

Queue= Record

{ тип елементів черги

}

Info: TInfo;

{ інформаційна частина

}

Next:TLink{поле вказівника на наступний елемент}

End;

Var Front,

Rear: TLink

{вказівник на вершину черги }

{вказівник на хвіст черги

}

 

 

 

 

 

 

 

Front

 

 

Rear

Enqueue

Dequeue

Info

Info

Info

Info

 

Next

Next

Next

Nil

 

 

Рисунок 5. Схема реалізації черги за допомогою лінійного однозв’язаного списку.

Приведемо приклади процедур, які реалізують базові операції над чергою.

Додання нового елемента х в чергу.

Procedure Enqueue (x: TInfo; Var PtrFront, PtrRear: TLink);

Begin

If MaxAvail>=SizeOf(x) Then {вільної пам’яті є достатньо}

Begin

If PtrRear = Nil Then { черга порожня }

Begin {створюємо перший елемент}

New (PtrRear);

117

Print to PDF without this message by purchasing novaPDF (http://www.novapdf.com/)

PtrFront PtrRear

End

Else

Begin { продовжуємо чергу }

New (PtrRear^.Next);

{ 1

}

PtrRear

 

PtrRear^.Next; { 2

}

End; { If_

Then_Else }

 

 

 

 

 

 

 

{заповнюємо інформаційну частину нового елемента }

With PtrRear^. Do

Begin

 

 

 

 

{ 3 }

Info

x;

 

 

 

PtrRear^.Next

Nil

{ 4 }

End; { With }

 

 

Else

Writeln(‘ недостатньо пам’яті, вставку не виконано ‘)

End; { Enqueue }

Схема додання нового елемента у хвіст черги («постановка в чергу» приведена на Рис.6.

PtrFront PtrRear

Новий хвіст

2

Info

 

3

x

 

 

Nil

1

4

Nil

Рисунок 6. Схема постановки нового елемента в чергу.

Пунктирними лініями зображені нові зв’язки (вказівники), а цифрами позначені відповідні оператори процедури Enqueue.

В даній процедурі ми не використовували допоміжний вказівник на новий елемент, натомість використали операцію розіменування вказівника на хвіст черги.

Вибірка (видалення) елемента з «голови» черги.

Procedure Dequeue (Var x: TInfo; Var PtrFront, PtrRear: TLink);

Var Temp: TLink; { допоміжний вказівник }

 

Begin { Dequeue }

 

 

If PtrFront = Nil Then WriteLn (‘черга порожня’)

 

Else

 

 

Begin

 

 

If PtrFront = PtrRear Then

 

{ в черзі один елемент }

 

Begin

 

 

 

PtrFront;

{1}

Temp

PtrFront

Nil;

 

 

 

PtrRear

Nil

 

End

Else

{ в черзі більше одного елемента }

Begin

Temp PtrFront; {1}

PtrFront Temp^.Next;{2}

End

 

 

{3}

x Temp^.Info;

Dispose (Temp);

{4}

End

118

Print to PDF without this message by purchasing novaPDF (http://www.novapdf.com/)

End; { Dequeue }

 

 

 

 

 

 

 

 

 

Temp

 

 

PtrFront

Нова

 

 

 

 

 

 

вершина

 

 

 

 

 

 

4

 

 

1

2

 

Info

Info

х

Next

Next

 

PtrRear

Info Info

Next Nil

Рисунок 6. Схема видалення елемента з «голови» черги.

Перевірка чи черга є порожня.

Function Empty (Var PtrFront, PtrRear: TLink): Boolean;

Begin

If PtrFront = Nil Then Empty true

Else Empty false

End;

Очевидно, що для очистки черги (без збирання «сміття») достатньо вказівникам Front та Rear присвоїти значення Nil.

Досить легко реалізувати чергу за допомогою двозв'язаного списку.

ДЕК

Означення 3. Дек (від англ. Double ended queue – двобічна черга) – абстрактна структура даних, елементи якої можуть додаватись як на початок, так і в кінець.

Існує принаймні два поширених способи ефективної реалізації двобічної черги: за допомогою динамічного масиву або двозв'язаного списку.

Базові операції над деками:

PushBack додання елемента в кінець черги;

PushFront додавання елемента в початок черги;

PopBack вибірка останнього елемента;

PopFront вибірка першого елемента;

Перевірка першого елемента (без видалення з деку);

Перевірка останнього елемента (без видалення з деку);

Очистка черги.

КОНТРОЛЬНІ ЗАПИТАННЯ.

1.В чому суть принципу обслуговування LIFO?

2.Які переваги має реалізація стеку за допомогою масиву? За допомогою вказівників?

3.В чому суть принципу обслуговування FIFO?

4.Які існують способи ефективної реалізації черг і деків??

5.Приведіть приклади використання стеків в комп’ютерній техніці.

6.Приведіть приклади використання стеків в програмуванні.

7.Приведіть приклади використання черг в програмуванні.

ЗАВДАННЯ ДЛЯ САМОСТІЙНОГО ВИКОНАННЯ. Завдання 1.

119

Print to PDF without this message by purchasing novaPDF (http://www.novapdf.com/)

Спроектувати алгоритм та програму формування динамічної структури даних і виконання операцій, визначених варіантом завдання.

Кількість елементів структури має бути ≥ 10. Інформаційну частину елементів структури заповнювати одним (якщо не вказано окремо) із способів:

a)введення з клавіатури (з опрацюванням спеціального символу – ознаки закінчення введення);

b)генерація за допомогою функції Random;

c)зчитування з попередньо підготовленого файлу даних.

Для перевірки правильності роботи програми забезпечити шляхом виведення на екран вхідних та вихідних масивів даних.

Варіанти завдань.

1.З десяти чисел, які вводяться з клавіатури, сформувати два стеки – один з додатними числами, другий – з від’ємними та знайти суми елементів стеків.

2.В черзі цілих чисел обчислити суму елементів та видалити з черги від’ємні елементи.

3.В стеку дійсних чисел видалити всі елементи до першого від’ємного та обчислити їх суму.

4.Визначити максимальний елемент і його порядковий номер в черги цілих чисел та записати на його місце довільне число.

5.Перевірити, чи утворюють елементи стеку символів паліндром.

6.В черзі цілих чисел обчислити суму непарних елементів та видалити перший з них.

7.В стеку дійсних чисел обчислити суму елементів з парними номерами та видалити максимальний з них.

8.В черзі літер обчислити кількість голосних та видалити всі приголосні.

9.В стеку натуральних чисел обчислити середнє геометричне максимального та мінімального елементів.

10.В черзі цілих чисел видалити від’ємні елементи, а на їх місця записати 0 (нуль).

11.В стеку чисел замінити всі елементи менші заданого числа на 1.

12.В черзі символів видалити всі елементи рівні заданому символу і дописати в чергу відповідну кількість іншого символу.

13.В стеку цілих чисел видалити найдовшу послідовність нулів.

14.В черзі цілих чисел видалити більшу кількість парних чи непарних чисел.

15.В стеку літер видалити задане слово та в стек дописати нове слово з тією ж кількістю літер.

16.В черзі цілих чисел видалити всі числа, які належать заданому інтервалу.

17.В стеку чисел видалити максимальне число і дописати в стек різницю між ним та першим елементом.

18.В черзі чисел замінити числа, менші заданого, їх кубами.

19.Перевірити, чи утворюють елементи стеку цілих чисел паліндром.

20.В черзі символів видалити символ з найбільшим кодом за таблицею ASCII та дописати в чергу символ із заданим кодом.

21.В стеку чисел видалити елементи більші заданого і дописати в стек їх суму.

22.Перевірити чи є елементи черги цілих чисел записом двійкового числа та обчислити його десяткове значення.

23.В стеку чисел видалити всі елементи до заданого порядкового номера та обчислити їх суму.

24.В черзі чисел видалити всі елементи після заданого порядкового номера та дописати в чергу їх добуток.

25.Дописати в стек різницю сум елементів з парними та непарними порядковими номерами.

26.В черзі символів видалити символ з найменшим кодом за таблицею ASCII та дописати в чергу символ, код якого рівний кількості елементів черги.

27.В стеку чисел видалити мінімальний елемент та дописати в стек його квадрат.

28.В черзі чисел видалити елемент рівний різниці між максимальним та мінімальним елементами черги та дописати в чергу їх суму.

29.Впорядкувати елементи двох стеків за зростанням та об’єднати стеки в один, впорядкований за спаданням.

30.З двох стеків однакової довжини сформувати чергу, у якій елементи початкових стеків чергуються, починаючи з першого елементу першого стеку.

Завдання 2.

120

Print to PDF without this message by purchasing novaPDF (http://www.novapdf.com/)