
Практическая работа №4
.pdfМинистерство науки и высшего образования Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра комплексной информационной безопасности электронно-
вычислительных систем (КИБЭВС)
«Стеки и очереди» Отчет по практической работе №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