|
Отчет Лабораторная работа Стеки. Отчет Очереди. Отчет по лабораторной работе Работа с очередями
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение высшего образования «Национальный исследовательский Нижегородский государственный университет им. Н.И. Лобачевского»
(ННГУ) Институт информационных технологий, математики и механики Направление подготовки: «Программная инженерия»
ОТЧЕТ
по лабораторной работе «Работа с очередями»
Выполнил: студент группы
382008-1 Силаева Наталья Олеговна
Проверил: к.ф.-м.н., доц. К.А. Баркалов
Нижний Новгород 2020 Содержание
TQueue.h 5
QueueForm.h 5
Введение
Очередь – это динамическая структура данных которая состоит из набора элементов которые размещены последовательно друг за другом. При этом добавление элементов осуществляется с одной стороны, а удаление (вытягивание) – с другой стороны. Очередь работает по принципу FIFO (First In — First Out), то есть «первым пришел – первым вышел».
Постановка задачи Требуется написать программу, которая визуализирует добавление и извлечения элемента очереди с некоторым шансом.
Описание алгоритмов
Очередь В этой работе представлена кольцевая очередь. В кольцевой очереди элемент, который выходит из очереди помещается в ее конец
Далее изображена работа кольцевой очереди в случае, когда часть элементов занята.
Рисунок 4. Кольцевая очередь. Случай когда часть элементов занята
Примеры кольцевой очереди:
движение трамваев по круговому маршруту; очередь событий для их обработки в Windows.
TQueue.h
class TQueue
{
T* mas; //массив очереди
int maxsize; //размер массива очереди
int head; //голова очереди
int tail; //хвост очереди
int len; //длина очереди
public:
TQueue(int m = 100);
TQueue(const TQueue& Q);
TQueue() { delete[] mas; } bool IsEmpty(); // проверка на пустоту
bool IsFull(); // Проверка на полноту
void Push(T n); // Добавить элемент в очередь
T Pop(); // Извлечь элемент из очереди
T TopHead(); //Посмотреть начало очереди
T TopTail(); //Посмотреть конец очереди int GetMaxsize() { return maxsize; }
int GetLen() { return len; } };
QueueForm.h
Представление основных функций класса
QueueForm(void)
{
InitializeComponent(); gr = CreateGraphics();
rnd1 = gcnew Random(); // датчик случайных чисел
GoldPen = gcnew Pen(Color::Gold);
GoldPen->Width = 10.0F;
WhitePen = gcnew Pen(SystemColors::Control);
WhitePen->Width = 10.0F; x0 = 395;
y0 = 30;
w0 = 130;
h0 = 130;
PopCount = 0;
PushCount = 0;
}
private: System::Void button_start_Click(System::Object^ sender, System::EventArgs^ e) {
MaxSize = Convert::ToInt32(textBox1_maxlen->Text);
Size = Convert::ToInt32(textBox2_len->Text);
p = Convert::ToDouble(textBox3_p->Text);
q = Convert::ToDouble(textBox4_q->Text); quq = new TQueue(MaxSize);
for (int i = 0; i < Size; i++)
{
quq->Push(1);
}
Draww();
timer1->Enabled = true;
}
void Draww()
{
int start = 360 * quq->TopHead() / quq->GetMaxsize();
int finish = 360 * (quq->GetLen()) / quq->GetMaxsize();
gr->DrawArc(GoldPen, x0, y0, w0, h0, start, finish);
}
void Clean()
{
int start = 360 * quq->TopHead() / quq->GetMaxsize();
int finish = 360 * (quq->GetLen()) / quq->GetMaxsize();
gr->DrawArc(WhitePen, x0, y0, w0, h0, start, finish);
}
private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e)
{
Clean();
if (rnd1->NextDouble() < p)
{
if (!quq->IsFull())
{
quq->Push(1);
PushCount++;
}
}
if (rnd1->NextDouble() < q)
{
if (!quq->IsEmpty())
{
quq->Pop();
PopCount++;
}
}
Draww();
label_push->Text = Convert::ToString(PushCount);
label_pop->Text = Convert::ToString(PopCount);
}
private: System::Void button2_stop_Click(System::Object^ sender, System::EventArgs^ e) {
timer1->Enabled = false;
}
Результаты Ошибок при опустошении и заполнении очереди нет.
Заключение Программа успешно визуализирует работу кольцевой очереди https://github.com/yablochkina44/mp2-lab4-queue
Литература
ru.wikipedia.org https://webexsite.wordpress.com/2016/08/20 http://dander.ru/gos/22.html https://proglib.io/p/java-sorting-algorithms/) https://mvblog.ru/archives/144/
|
|
|