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

Практики(Вариант №7) / Практическая работа №4

.odt
Скачиваний:
0
Добавлен:
23.02.2026
Размер:
197.24 Кб
Скачать

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

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

Кафедра комплексной информационной безопасности электронно-вычислительных систем (КИБЭВС)

СТЕКИ И ОЧЕРЕДИ Отчет по практической работе №4 по дисциплине «Структуры данных»

Студент гр.

________

__.__.2025

Принял

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

кафедры КИБЭВС

________ Д.Р. Уразаев

__.__.2025

Задание

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

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

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

  2. добавить в стек,

  3.  число элементов стека,

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

Очередь: 

  1. число элементов в очереди, 

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

  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

Соседние файлы в папке Практики(Вариант №7)