Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практика 4(СД).docx
Скачиваний:
2
Добавлен:
08.10.2025
Размер:
65.19 Кб
Скачать

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

Федеральное государственное автономное образовательное учреждение

высшего образования

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ

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

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

СТЕКИ И ОЧЕРЕДЬ

Отчёт по практической работе №4

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

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

_______ И.С. Максимов

__.__.2025

Доцент кафедры КИБЭВС

_______ Е.Е. Лунёва

__.__.2025

Томск 2025

Оглавление

Введение 3

Заключение 6

МОГУТ БЫТЬ ПРОБЛЕМЫ С СОДЕРЖАНИЕМ В PDF

Введение

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

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

  1. Удаление из стека,

  2. Добавление в стек,

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

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

Для очереди требуется реализовать: 

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

  2. Удаление из очереди,

  3. Добавление в очередь. 

  1. Ход работы

В ходе работы были созданы классы Stack и Queue. Для каждого из них были созданы методы в соответствие с заданием. Методы представлены в таблице 1.1.

Таблица 1.1 – Описание классов стека и очереди

Классы

Stack

Queue

Методы классов и их описание

Метод Push() — добавляет новый элемент в стек.

Метод Enqueue() — добавляет элемент в конец очереди.

Метод Pop() — удаляет верхний элемент из стека и возвращает его значение.

Метод Dequeue() — удаляет элемент из начала очереди.

Метод Peek() — возвращает значение верхнего элемента стека без удаления.

Метод Peek() — возвращает значение верхнего элемента стека без удаления.

Метод Count() – считает количество элементов.

Метод Count() – считает количество элементов.

Пример работы программы приведён на рисунках 1.1, 1.2, 1.3.

Рисунок 1.1 – Выбор структуры для работы

Рисунок 1.2 – Выбор действия для работы со структурой и его выполнение

Рисунок 1.3 – Значение добавлено в стек

Заключение

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

Приложение а

Листинг кода: using System;

class Node

{

public int Data;

public Node Next;

public Node(int data)

{

Data = data;

Next = null;

}

}

class Stack

{

private Node top;

public Stack()

{

top = null;

}

public void Push(int data)

{

Node newNode = new Node(data);

newNode.Next = top;

top = newNode;

}

public int? Pop()

{

if (top == null)

return null;

int value = top.Data;

top = top.Next;

return value;

}

public int? Peek()

{

if (top == null)

return null;

return top.Data;

}

public int Count()

{

int count = 0;

Node current = top;

while (current != null)

{

count++;

current = current.Next;

}

return count;

}

public override string ToString()

{

if (top == null)

return "(empty)";

Node current = top;

string result = "";

while (current != null)

{

result += current.Data + " -> ";

current = current.Next;

}

return result + "null";

}

}

class Queue

{

private Node head;

private Node tail;

public Queue()

{

head = null;

tail = null;

}

public void Enqueue(int data)

{

Node newNode = new Node(data);

if (tail == null)

{

head = tail = newNode;

}

else

{

tail.Next = newNode;

tail = newNode;

}

}

public int? Dequeue()

{

if (head == null)

return null;

int value = head.Data;

head = head.Next;

if (head == null)

tail = null;

return value;

}

public int? Peek()

{

if (head == null)

return null;

return head.Data;

}

public int Count()

{

int count = 0;

Node current = head;

while (current != null)

{

count++;

current = current.Next;

}

return count;

}

public override string ToString()

{

if (head == null)

return "(empty)";

Node current = head;

string result = "";

while (current != null)

{

result += current.Data + " -> ";

current = current.Next;

}

return result + "null";

}

}

class Program

{

static void Main()

{

Stack stack = new Stack();

Queue queue = new Queue();

while (true)

{

Console.WriteLine("Выберите структуру:\n");

Console.WriteLine("1. Стек");

Console.WriteLine("2. Очередь");

Console.WriteLine("0. Выход");

Console.Write("Ваш выбор: ");

string structureInput = Console.ReadLine();

if (!int.TryParse(structureInput, out int structureChoice))

{

Console.WriteLine("Ошибка ввода. Введите число.");

continue;

}

if (structureChoice == 0)

{

Console.WriteLine("Выход из программы.");

break;

}

switch (structureChoice)

{

case 1:

StackMenu(stack);

break;

case 2:

QueueMenu(queue);

break;

default:

Console.WriteLine("Некорректный выбор структуры.");

break;

}

}

}

static void StackMenu(Stack stack)

{

Console.WriteLine("Выберите действие:");

while (true)

{

Console.WriteLine("\nМеню стека:");

Console.WriteLine("1. Добавить в стек");

Console.WriteLine("2. Удалить из стека");

Console.WriteLine("3. Взять верхний элемент");

Console.WriteLine("4. Количество элементов");

Console.WriteLine("5. Показать стек");

Console.WriteLine("0. Возврат в главное меню");

Console.Write("Ваш выбор: ");

string input = Console.ReadLine();

if (!int.TryParse(input, out int choice))

{

Console.WriteLine("Ошибка ввода. Введите число.");

continue;

}

if (choice == 0)

break;

switch (choice)

{

case 1:

Console.Write("Введите элемент для добавления: ");

if (int.TryParse(Console.ReadLine(), out int pushElem))

{

stack.Push(pushElem);

Console.WriteLine("Элемент добавлен в стек.");

}

else

{

Console.WriteLine("Ошибка ввода элемента.");

}

break;

case 2:

int? popped = stack.Pop();

if (popped.HasValue)

Console.WriteLine($"Удалён элемент: {popped.Value}");

else

Console.WriteLine("Стек пуст.");

break;

case 3:

int? peeked = stack.Peek();

if (peeked.HasValue)

Console.WriteLine($"Верхний элемент: {peeked.Value}");

else

Console.WriteLine("Стек пуст.");

break;

case 4:

Console.WriteLine($"Количество элементов в стеке: {stack.Count()}");

break;

case 5:

Console.WriteLine("Текущий стек:");

Console.WriteLine(stack.ToString());

break;

default:

Console.WriteLine("Недопустимый выбор.");

break;

}

}

}

static void QueueMenu(Queue queue)

{

Console.WriteLine("Выберите действие:");

while (true)

{

Console.WriteLine("\nМеню очереди:");

Console.WriteLine("1. Добавить в очередь");

Console.WriteLine("2. Удалить из очереди");

Console.WriteLine("3. Взять первый элемент очереди");

Console.WriteLine("4. Количество элементов в очереди");

Console.WriteLine("5. Показать очередь");

Console.WriteLine("0. Возврат в главное меню");

Console.Write("Ваш выбор: ");

string input = Console.ReadLine();

if (!int.TryParse(input, out int choice))

{

Console.WriteLine("Ошибка ввода. Введите число.");

continue;

}

if (choice == 0)

break;

switch (choice)

{

case 1:

Console.Write("Введите элемент для добавления: ");

if (int.TryParse(Console.ReadLine(), out int enqueuedElem))

{

queue.Enqueue(enqueuedElem);

Console.WriteLine("Элемент добавлен в очередь.");

}

else

{

Console.WriteLine("Ошибка ввода элемента.");

}

break;

case 2:

int? dequeued = queue.Dequeue();

if (dequeued.HasValue)

Console.WriteLine($"Удалён элемент: {dequeued.Value}");

else

Console.WriteLine("Очередь пуста.");

break;

case 3:

int? peeked = queue.Peek();

if (peeked.HasValue)

Console.WriteLine($"Первый элемент очереди: {peeked.Value}");

else

Console.WriteLine("Очередь пуста.");

break;

case 4:

Console.WriteLine($"Количество элементов в очереди: {queue.Count()}");

break;

case 5:

Console.WriteLine("Текущая очередь:");

Console.WriteLine(queue.ToString());

break;

default:

Console.WriteLine("Недопустимый выбор.");

break;

}

}

}

}

Соседние файлы в предмете Структуры данных