Практики(Вариант №7) / Практическая работа №4
.odtМинистерство науки и высшего образования Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования
«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)
Кафедра комплексной информационной безопасности электронно-вычислительных систем (КИБЭВС)
СТЕКИ И ОЧЕРЕДИ Отчет по практической работе №4 по дисциплине «Структуры данных»
Студент гр.
________
__.__.2025
Принял
Преподаватель
кафедры КИБЭВС
________ Д.Р. Уразаев
__.__.2025
Задание
Реализовать на базе классов из практики 3 работу с очередью и со стеком.
Продемонстрировать типовые функции работы со стеком: -
удалить из стека - возвращать удаляемый элемент возвращается по результату работы метода,
добавить в стек,
число элементов стека,
взять верхний элемент стека без удаления.
Очередь:
число элементов в очереди,
удалить из очереди
добавить в очередь.
получить первый элемент из очереди без удаления из нее.
Оглавление
Задание 2
Введение 4
1 ХОД РАБОТЫ 5
Заключение 9
Приложение А 10
Введение
Целью данной работы является реализация классов для работы со стеком и очередью на основе ранее изученных концепций.
1 ХОД РАБОТЫ
Push: Добавляет элемент на верхушку стека. Если стек был пуст, новый элемент становится и верхом, и основанием стека (рис.1)
Рисунок 1 — Push
Pop: Удаляет и возвращает верхний элемент стека. Если стек пуст, вызывает ошибку. При удалении верхнего элемента обновляется указатель на верх (рис. 2)
Рисунок 2 — Pop
Peek: Возвращает верхний элемент стека без его удаления. Если стек пуст, вызывает ошибку (рис. 3)
Рисунок 3 — Peek
Size: Возвращает количество элементов в стеке. Считывает их, проходя по всем элементам, начиная с верхнего (рис. 4)
Рисунок 4 — Size
Print: Выводит все элементы стека в порядке от верхнего к нижнему. Позволяет визуализировать текущие элементы стека (рис. 5)
Рисунок 5 — Print
Enqueue: Добавляет элемент в конец очереди. Если очередь была пустой, новый элемент становится и первым, и последним (рис. 6)
Рисунок 6 — Enqueue
Dequeue: Удаляет и возвращает первый элемент очереди. Если очередь пуста, вызывает ошибку. Обновляет указатель на первый элемент после удаления (рис. 7)
Рисунок 7 - Dequeue
Peek: Возвращает первый элемент очереди без его удаления. Если очередь пуста, вызывает ошибку (рис. 8)
Рисунок 8 — Peek
Count: Возвращает количество элементов в очереди. Считывает их, проходя от первого до последнего элемента (рис. 9)
Рисунок 9 — Count
Print: Выводит все элементы очереди в порядке от первого к последнему. Позволяет вывести текущие элементы очереди (рис. 10)
Рисунок 10 — Print
Заключение
В ходе работы были успешно реализованы функциональные классы для стека и очереди. Мы продемонстрировали типовые операции, включая добавление и удаление элементов, а также получение значений без удаления.
Приложение А
(обязательное)
Код программы
using System;
public class Node
{
public int Value;
public Node Next;
public Node(int value)
{
Value = value;
Next = null;
}
}
public class MyStack
{
private Node top;
private int count;
public MyStack()
{
top = null;
count = 0;
}
// добавить элемент в стек
public bool Push(int element)
{
Node newNode = new Node(element);
newNode.Next = top;
top = newNode;
count++;
return true;
}
// удалить и вернуть верхний элемент стека
public int Pop()
{
if (top == null)
throw new InvalidOperationException("Стек пуст");
int value = top.Value;
top = top.Next;
count--;
return value;
}
// вернуть верхний элемент без удаления
public int Peek()
{
if (top == null)
throw new InvalidOperationException("Стек пуст");
return top.Value;
}
// количество элементов в стеке
public int Size
{
get { return count; }
}
// проверить, пуст ли стек
public bool IsEmpty()
{
return top == null;
}
// очистить стек
public bool Clear()
{
top = null;
count = 0;
return true;
}
// вывести содержимое стека
public void Print()
{
Node current = top;
Console.Write("Стек (сверху вниз): ");
while (current != null)
{
Console.Write(current.Value + " ");
current = current.Next;
}
Console.WriteLine();
}
}
public class MyQueue
{
private Node head;
private Node tail;
private int count;
public MyQueue()
{
head = null;
tail = null;
count = 0;
}
// добавить элемент в очередь
public bool Enqueue(int element)
{
Node newNode = new Node(element);
if (head == null)
{
head = newNode;
tail = newNode;
}
else
{
tail.Next = newNode;
tail = newNode;
}
count++;
return true;
}
// удалить и вернуть первый элемент очереди
public int Dequeue()
{
if (head == null)
throw new InvalidOperationException("Очередь пуста");
int value = head.Value;
head = head.Next;
if (head == null)
tail = null;
count--;
return value;
}
// вернуть первый элемент без удаления
public int Peek()
{
if (head == null)
throw new InvalidOperationException("Очередь пуста");
return head.Value;
}
// количество элементов в очереди
public int Size
{
get { return count; }
}
// проверить, пуста ли очередь
public bool IsEmpty()
{
return head == null;
}
// очистить очередь
public bool Clear()
{
head = null;
tail = null;
count = 0;
return true;
}
// вывести содержимое очереди
public void Print()
{
Node current = head;
Console.Write("Очередь (с начала к концу): ");
while (current != null)
{
Console.Write(current.Value + " ");
current = current.Next;
}
Console.WriteLine();
}
}
class Program
{
static void Main()
{
Console.WriteLine("=== Демонстрация работы стека ===");
DemonstrateStack();
Console.WriteLine("\n=== Демонстрация работы очереди ===");
DemonstrateQueue();
}
static void DemonstrateStack()
{
MyStack stack = new MyStack();
Console.WriteLine("Добавляем элементы в стек: 10, 20, 30");
stack.Push(10);
stack.Push(20);
stack.Push(30);
Console.WriteLine($"Количество элементов: {stack.Size}");
Console.WriteLine($"Верхний элемент (без удаления): {stack.Peek()}");
stack.Print();
Console.WriteLine("Удаляем элементы из стека:");
while (!stack.IsEmpty())
{
Console.WriteLine($"Удален: {stack.Pop()}");
stack.Print();
}
Console.WriteLine($"Количество элементов после удаления: {stack.Size}");
}
static void DemonstrateQueue()
{
MyQueue queue = new MyQueue();
Console.WriteLine("Добавляем элементы в очередь: 10, 20, 30");
queue.Enqueue(10);
queue.Enqueue(20);
queue.Enqueue(30);
Console.WriteLine($"Количество элементов: {queue.Size}");
Console.WriteLine($"Первый элемент (без удаления): {queue.Peek()}");
queue.Print();
Console.WriteLine("Удаляем элементы из очереди:");
while (!queue.IsEmpty())
{
Console.WriteLine($"Удален: {queue.Dequeue()}");
queue.Print();
}
Console.WriteLine($"Количество элементов после удаления: {queue.Size}");
}
}
Томск 2025
