МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
/
Кафедра ЕОМ
" Черга"
ЗВІТ
до лабораторної роботи № 5
з
"Програмування. Частина III.
Структури даних та алгоритми"
МЕТА РОБОТИ
Вивчення фундаментальної абстрактної структури даних - черги. Набуття практичних навичок побудови черги, дослідження динаміки її вмісту та використання черг для розв'язання прикладних задач.
ВИБІР ІНДИВІДУАЛЬНОГО ЗАВДАННЯ
Змоделюйте чергу (або дек) згідно з завданням. Перепишіть основні операції для роботи з чергою (деком), і продемонструйте їх застосування для операцій додавання і вилучення елементів в чергу (дек).
Для цього задайте послідовність з N цілих чисел. Всі додатні числа послідовно заносяться в чергу (дек), кожне від’ємне число вилучає з черги (деку) один елемент (при роботі з деком, парні числа працюють з одним кінцем деку, а непарні – з іншим). Показувати всі зміни, що будуть відбуватись у черзі (деку).
Перша літера П (11)-> I 10
Перша літера прізвища
Номер студента в списку групи
Варіант
А, І, С
Б, Ї, Т
В, Й, У
Г, К, Ф
Д, Л, Х
Е, М, Ц
Є, Н, Ч
Ж,О,Ш,Щ
З, И, Ю
П, Р, Я
10, 20, 30
І1
І2
І3
І4
І5
І6
І7
І8
І9
І10
9, 19, 29
І1
І2
І3
І4
І5
І6
І7
І8
І9
І10
8, 18, 28
І1
І2
І3
І4
І5
І6
І7
І8
І9
І10
7, 17, 27
І1
І2
І3
І4
І5
І6
І7
І8
І9
І10
6, 16, 26
І1
І2
І3
І4
І5
І6
І7
І8
І9
І10
5, 15, 25
І1
І2
І3
І4
І5
І6
І7
І8
І9
І10
4, 14, 24
І1
І2
І3
І4
І5
І6
І7
І8
І9
І10
3, 13, 23
І1
І2
І3
І4
І5
І6
І7
І8
І9
І10
2, 12, 22
І1
І2
І3
І4
І5
І6
І7
І8
І9
І10
1, 11, 21
І1
І2
І3
І4
І5
І6
І7
І8
І9
І10
10. Змоделюйте чергу за допомогою двух стеків. Додавання елементу до черги зводиться до додавання до одному зі стеков, а перевірка, чи черга порожня - до перевірки, чи порожні обидва стеки. При вилученні елемента з черги можливі два випадки. Якщо стек, де знаходиться початок черги, не порожній, то вилучається з нього елемент. Якщо він порожній, то попередньо в нього переписуються всі елементи другого стеку, змінюючи порядок (це відбувається саме при перекладанні зі стеку в стек) і далі задача зводиться до першого випадку.
Код програми
TwoStackQueue.h
#pragma once
#include "Stack.cpp"
template<class T>
class TwoStacksQueue {
private:
Stack<T> lifoStack, fifoStack;
void fillFifoStack() {
while (!lifoStack.empty()) {
fifoStack.push(lifoStack.top());
lifoStack.pop(); }
}
public:
bool empty() {
return fifoStack.empty() && lifoStack.empty();
}
T front() {
if (fifoStack.empty()) fillFifoStack();
return fifoStack.top();
}
void pop() {
if (fifoStack.empty()) fillFifoStack();
fifoStack.pop();
}
void push(T v) {
lifoStack.push(v); } };
Stack.cpp
#pragma once
#include <cstdlib>
#include <cassert>
template <class Item>
class Stack
{
private:
typedef std::size_t size_type;
static const size_type CAPACITY = 50;
size_type used; Item data[CAPACITY];
public:
Stack() { used = 0; }
bool empty() const {
return used == 0;
}
size_type size() const {
return used;
}
void showInf() const;
void push(const Item& entry);
void pop();
Item top() const;
};
template <class Item>
void Stack<Item>::push(const Item& entry) {
assert(size() < CAPACITY);
data[used] = entry;
++used;
}
template <class Item>
void Stack<Item>::pop() {
assert(!empty());
--used;
}
template <class Item>
Item Stack<Item>::top() const {
assert(!empty());
return data[used - 1];
}
template <class Item>
void Stack<Item>::showInf() const {
for (size_type i = 0; i < used; i++) {
cout << data[i] << ' ';
}
}
Source.cpp
#include "TwoStackQueue.h"
#include <iostream>
using namespace std;
int main() {
TwoStacksQueue<int> Queue;
if (Queue.empty())
cout << "Queue is empty" << endl;
for (int i = 0; i < 15; i++)
Queue.push(i);
cout << "Front of queue is: " << Queue.front() << endl;
Queue.pop(); cout << "After command pop: " << endl;
cout << "Front of queue is: " << Queue.front() << endl;
for (int i = 0; i < 14; i++) {
cout << Queue.front() << ' ';
Queue.pop();
}
if (Queue.empty())
cout << "\nQueue is empty" << endl;
getchar();
return 0;
}
Скріншот виконання
Висновок
На даній лабораторній роботі я набув практичних навичок побудови черги, дослідив динаміку його вмісту та використання для розв'язання прикладних задач.