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

2392_Смирнова_М_ЛР2

.docx
Скачиваний:
0
Добавлен:
05.12.2024
Размер:
407.1 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра АПУ

отчет

по лабораторной работе 2

по дисциплине «Алгоритмы и Структуры Данных»

Тема: Линейная Структура Данных «Очередь» и Операции над ней

Студентка гр. 2392

Смирнова М. В.

Преподаватель

Ряскова Е. Б.

Санкт-Петербург

2023

Постановка задачи.

Создать очередь для символов. Максимальный размер очереди вводится с экрана. Создать функции для ввода и вывода элементов очереди. Вводить символы с экрана. В случае совпадения вводимого символа с последним элементом очереди выводить размер очереди.

Ход решения.

Struct Q_E: Описывается элемент очереди: данные и ссылка на следующий элемент.

Struct Queue: Очередь с указателями на первый (first(nullptr)), последний (last(nullptr)) элемент, а также текущий размер и максимальный размер очереди.

Void idz11: Проверка на размер очереди. Если текущий размер больше 0, а также совпадает ли значение элемента предыдущего с текущим, то на экран выводится размер очереди. Текущий элемент не добавляется. Если совпадение не обнаружено, то создается новый элемент очереди, который добавляется в конец, если в очереди есть элементы. Размер очереди увеличивается на единицу.

Void print: Вывод на экран элементов очереди. Голова – текущий указатель, пока тот не примет значения нуля в цикле, выводим элемент очереди, перекидывая указатель на следующий элемент.

Рисунок 1. Main.

M ain: Вводим максимальный размер очереди, в цикле заполняем очередь. При каждом вводе элемента, происходит проверка на индивидуальное задание (если последние символы совпадают, то вывод размера очереди), а также вывод очереди. Цикл закончится, как только текущий размер очереди совпадет с максимальным размером.

Р езультат работы.

Вывод.

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

Приложение. Код программы

#include <iostream>

#include <locale>

struct Q_E {

char data;

Q_E* next;};

struct Queue {

Q_E* first; Q_E* last; int size; int m_size;

Queue(int max) : first(nullptr), last(nullptr), size(0), m_size(max) {}};

void idz11(Queue& queue, char value) {

if (queue.size > 0 && value == queue.last->data) {

std::cout << "Match with the last element, output the size in the queue at the moment: " << queue.size << std::endl;

return;}

Q_E* N_E = new Q_E;

N_E->data = value;

N_E->next = nullptr;

if (queue.last == nullptr) {

queue.first = queue.last = N_E;}

else {

queue.last->next = N_E;

queue.last = N_E;}

queue.size++;}

void print(const Queue& queue) {

Q_E* current = queue.first;

while (current != nullptr) {

std::cout << current->data << " ";

current = current->next;}

std::cout << std::endl;}

int main() {

int maxm_s;

std::cout << "Enter the queue size: ";

std::cin >> maxm_s;

Queue queue(maxm_s);

char input;

while (true) {

std::cout << "Enter symbols: ";

std::cin >> input;

idz11(queue, input);

std::cout << "Queue: ";

print(queue);

if (queue.size >= queue.m_size) {

std::cout << "The queue is full." << std::endl;

break;}}

return 0;}