
2392_Смирнова_М_ЛР2
.docxМИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра АПУ
отчет
по лабораторной работе 2
по дисциплине «Алгоритмы и Структуры Данных»
Тема: Линейная Структура Данных «Очередь» и Операции над ней
Студентка гр. 2392 |
|
Смирнова М. В. |
Преподаватель |
|
Ряскова Е. Б. |
Санкт-Петербург
2023
Постановка задачи.
Создать очередь для символов. Максимальный размер очереди вводится с экрана. Создать функции для ввода и вывода элементов очереди. Вводить символы с экрана. В случае совпадения вводимого символа с последним элементом очереди выводить размер очереди.
Ход решения.
Struct Q_E: Описывается элемент очереди: данные и ссылка на следующий элемент.
Struct
Queue:
Очередь с указателями на первый
(first(nullptr)),
последний (last(nullptr))
элемент, а также текущий размер и
максимальный размер очереди.
Void
idz11:
Проверка на размер очереди. Если текущий
размер больше 0, а также совпадает ли
значение элемента предыдущего с текущим,
то на экран выводится размер очереди.
Текущий элемент не добавляется. Если
совпадение не обнаружено, то создается
новый элемент очереди, который добавляется
в конец, если в очереди есть элементы.
Размер очереди увеличивается на единицу.
Void
print:
Вывод на экран элементов очереди. Голова
– текущий указатель, пока тот не примет
значения нуля в цикле, выводим элемент
очереди, перекидывая указатель на
следующий элемент.
Рисунок 1. Main.
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;}