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

Болтушкин Л.С., группа 712-2, практика 4

.docx
Скачиваний:
0
Добавлен:
04.10.2024
Размер:
107.98 Кб
Скачать

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

Федеральное государственное бюджетное образовательное учреждение высшего образования

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

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

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

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

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

Студент гр. 712-2 ___________ Л.С. Болтушкин ___________

Руководитель Доцент кафедры КИБЭВС

_______ __________ Е.Е. Лунёва

__________

Томск 2023

Задание

Реализовать на базе классов из практики 3 работу с очередью и со стеком. Продемонстрировать типовые функции работы со стеком: -

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

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

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

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

Очередь:

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

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

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

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

Содержание

Введение. 4

    1. Ход работы. 5

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

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

      3. Число элементов стека. 6

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

    2. Число элементов в очереди 6

    3. Удалить из очереди 7

    4. Добавить в очередь 7

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

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

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

Введение

Целью данной практической работы является получение навыков Применения стеков и очереди.

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

С#.

1 Ход работы

1.1 Удаление из стека

Сначала реализуем метод `Pop` для удаления верхнего элемента из стека.

Таким образом, метод `Pop` позволяет удалить верхний элемент из стека и вернуть его удаленное значение. Если стек пуст, будет сгенерировано исключение или возвращено значение по умолчанию для типа `T`, если реализовано соответствующим образом (рисунок 1.1).

Рисунок 1.1 - Удаление из стэка

1.2 Добавление в стэк

Далее пропишем метод `Push`, который добавляет новый элемент в стек. Таким образом, метод `Push` позволяет добавить новый элемент в стек. Если стек достиг максимальной емкости, может потребоваться перестроение данных (рисунок 1.2).

Рисунок 1.2 - Добавление в стэк

1.3 Число элементов стэка

Следующее что было реализовано – это использование метода 'Size()' для получения количества элементов в стеке. Таким образом, код позволяет получить количество элементов в стеке с помощью метода 'Size()' (рисунок 1.3)

Рисунок 1.3 - Число элементов стэка

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

Данный алгоритм реализует метод 'Peek ()' для получения верхнего элемента из стека без его удаления. Таким образом, метод 'Peek' позволяет получить верхний элемент из стека без его удаления, если стек не пуст. Если стек пуст, будет сгенерировано исключение (рисунок 1.4).

Рисунок 1.4 - Взять верхний элемент стека без удаления

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

Далее мы реализуем свойство 'Count', которое возвращает число элементов в связанном списке. Этот алгоритм показывает количество элементов в списке с помощью свойства 'Count'(рисунок 1.5).

Рисунок 1.5 - Число элементов в очереди

1.6 Удалить из очереди

Далее был реализован метод 'Dequeue' для удаления элемента из начала очереди. Метод 'Dequeue' позволяет удалить элемент из начала очереди и вернуть его. Если очередь пуста, будет сгенерировано исключение или возвращено значение по умолчанию для типа `T`, если реализовано соответствующим образом. (рисунок 1.6).

Рисунок 1.6 - Удалить из очереди

1.7 Добавить в очередь

Также необходимо реализовать метод 'Enqueue' для добавления элемента в конец очереди. Если переданный элемент равен 'null', будет сгенерировано исключение 'ArgumentNullException' (рисунок 1.7).

Рисунок 1.7 - Добавить в очередь

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

В данном пункте реализуется метод `Peek` для чтения элемента из очереди без его удаления, чтобы прочитать его или выполнить другие действия, не изменяя состояния очереди (рисунок 1.8).

Рисунок 1.8 - Получить первый элемент из очереди без удаления из неё

Заключение

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

Код программы выполнен с помощью языка программирования С#.

Приложение А

(обязательное)

public class StackFixed<T> //Стэк

{

private int size; // Размер стека private T[] d; // Данные стека

private int Max; // Максимальное количество элементов в стеке

public StackFixed(int stackMaxSize)

{

d = new T[stackMaxSize]; size = 0;

Max = stackMaxSize;

}

public int Size() // Количество элементов из стека

{

return size;

}

public void Push(T item) // Добавление нового элемента

{

if (size == Max)

{

RebuildData();

}

d[size] = item; size++;

}

public T Peek()

{

if (Size() == 0)

{

throw new Exception("Стэк пустой");

}

return d[size - 1];

}

public T Pop() // Удаление из стека

{

var item = Peek(); size--;

return item;

}

public void Clear() // Очистка стека

{

d = new T[Max]; size = 0;

}

private void RebuildData()

{

var newData = new T[Max]; for (var i = 1; i < d.Length; i++)

{

newData[i - 1] = d[i];

}

d = newData; size = Max - 1;

}

}

public class Queue<T> // Очередь

{

private List<T> i = new List<T>(); // Коллекция данных public int Count => i.Count; // Число элементов

public void Enqueue(T item) // Добавить элемент в очередь

{

if (item == null)

{

throw new ArgumentNullException(nameof(item));

}

i.Add(item);

}

public T Dequeue() // Удалить из очереди

{

var item = GetItem(); i.Remove(item); return item;

}

public T Peek() // Прочитать элемент из очереди без удаления

{

var item = GetItem(); return item;

}

private T GetItem() // Получить элемент из начала очереди

{

var item = i.FirstOrDefault(); if (item == null)

{

throw new NullReferenceException("Очередь пуста");

}

return item;

}

}