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

Практическая работа №4

.pdf
Скачиваний:
0
Добавлен:
24.01.2025
Размер:
629.87 Кб
Скачать

Министерство науки и высшего образования Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра комплексной информационной безопасности электронно-

вычислительных систем (КИБЭВС)

«Стеки и очереди» Отчет по практической работе №4

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

Студент гр. 723-1

_________Лысенко Е.М.

__________

Принял Ст. преподаватель кафедры КИБЭВС

________ Лунѐва Е.Е.

__________

Томск 2024

Задание

Реализовать на базе классов из практики 3 работу с очередью и со

стеком.

Продемонстрировать типовые функции работы со стеком:

удалить из стека - возвращать удаляемый элемент возвращается по результату работы метода;

добавить в стек;

число элементов стека;

взять верхний элемент стека без удаления.

Очередь:

число элементов в очереди;

удалить из очереди;

добавить в очередь;

получить первый элемент из очереди без удаления из нее.

2

Содержание

Введение...................................................................................................................

4

1 ХОД РАБОТЫ ......................................................................................................

5

1.1

Класс Node ......................................................................................................

5

1.2

Класс Stack......................................................................................................

6

1.2

Класс Queue ....................................................................................................

7

Заключение ..............................................................................................................

8

Приложение А .........................................................................................................

9

3

Введение

Целью работы является получение навыков реализации стека и очереди

и разработки алгоритмов взаимодействия с ними на языке программирования

C#

4

1 ХОД РАБОТЫ

В ходе работы был реализован динамический циклический список при

помощи двух классов: Node и List.

1.1 Класс Node

Класс Node – элементы списка – содержит поля data (иинформация об элементе) и next (данные о следующем элементе), три конструктора.

Рисунок 1.1 – Реализация класса Node

5

1.2 Класс Stack

Класс Stack – реализация работы со стеком – содержит поля begin (начало стека), end (конец стека), length (длина стека), конструктор. Свойство

Length возвращает длину стека.

Метод Push добавляет элемент в стек. Метод Pop удаляет верхний элемент стека, возвращая его. Метод Get возвращает верхний элемент стека.

Рисунок 1.2 – Реализация класса Stack 6

1.2 Класс Queue

Класс Queue – реализация работы со списком – содержит поля begin (начало очереди), end (конец очереди), length (длина очереди), конструктор.

Свойство Length возвращает длину очереди.

Метод Push добавляет элемент в очередь. Метод Pop удаляет элемент очереди, возвращая его. Метод Get возвращает элемент очереди.

Рисунок 1.3 – Реализация класса Queue

7

Заключение

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

C#. Отчет был написан согласно ОС ТУСУР 01-2021.

8

Приложение А

Код программы

void FillStack(Stack list)

{

int[] mas = { 1, 1, 3, 4, 1, 4, 4, 5, 1, 2, 2, 6 }; for (int i = 0; i < mas.Length; i++)

{

list.Push(mas[i]);

}

}

void FillQueue(Queue list)

{

int[] mas = { 1, 1, 3, 4, 1, 4, 4, 5, 1, 2, 2, 6 }; for (int i = 0; i < mas.Length; i++)

{

list.Push(mas[i]);

}

}

Stack list1 = new Stack(); Queue list2 = new Queue(); FillStack(list1); FillQueue(list2);

Console.WriteLine("Stack\tQueue\n"); Console.WriteLine("Получение элемента без его удаления"); Console.WriteLine($"{list1.Get()}\t{list2.Get()}\n"); Console.WriteLine("Получение элемента, удаляя его");

for (int i = 0; i < 12; i++)

{

}

Console.WriteLine($"{list1.Pop()}\t{list2.Pop()}"); Console.WriteLine();

public class Node

{

public int? data; public Node next; public Node()

{

data = null; next = this;

}

public Node(int data)

{

this.data = data; next = this;

}

public Node(int data, Node next)

{

this.data = data; this.next = next;

}

}

public class Stack

{

Node begin; Node end; int length;

public Stack()

{

begin = new Node(); end = new Node(); length = 0;

9

}

public int Length

{

get { return length; }

}

public void Push(int element)

{

Node node = new Node(element); if (length == 0)

{

end = node; begin = end; length++; return;

}

begin.next = node; node.next = end; end = node; length++;

}

public int? Pop()

{

if (length == 0) return null; int? element = end.data;

end = end.next; begin.next = end; length--;

return element;

}

public int? Get()

{

return end.data;

}

}

public class Queue

{

Node begin; Node end; int length;

public Queue()

{

begin = new Node(); end = new Node(); length = 0;

}

public int Length

{

get { return length; }

}

public void Push(int element)

{

Node node = new Node(element); if (length == 0)

{

begin = node; end = node; length++;

}

return;

end.next = node; end = end.next; end.next = begin; length++;

}

public int? Pop()

10