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

sd_4

.pdf
Скачиваний:
26
Добавлен:
31.10.2021
Размер:
292.23 Кб
Скачать

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

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

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

Кафедра безопасности информационных систем (БИС)

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

Отчет по практической работе №4 по дисциплине «Структура данных»

Выполнил

Студент гр. 730-2

_______Подойницын

К.В.

28.09.2021

Принял Инженер кафедры КИБЭВС

Уразаев Д.Р.

28.09.2021

Томск 2021

 

 

2

Оглавление

 

1

Введение ....................................................................................................................

3

2

Основная часть..........................................................................................................

4

2.1 Реализация стека и очереди ..................................................................................

4

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

7

Приложение..................................................................................................................

8

3

1 Введение

Цель работы: овладеть навыками реализации на языке программирования C#.

Задание:

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

удалить из стека;

возвращать удаляемый элемент (возвращается по результату работы метода);

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

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

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

Очередь:

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

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

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

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

4

2 Основная часть Стек — это структура данных, представляющая собой список

элементов, организованных по принципу «последним пришёл — первым

вышел».

Очередь – это последовательный список переменной длины, в котором включение элементов производится на одном конце, а исключение на другом,

то есть по принципу «первым пришел - первым ушел».

2.1 Реализация стека и очереди

Для реализации стека был использован метод Stack<int>, а также добавлена функция RemoveElementa, удаляющая элемент в стеке.

Для добавления элементов в стек, использовался метод Push. Реализация добавления элементов представленана рисунке 1.

Рисунок 1 – Реализация добавления элементов стека

Для удаления элемента из стека была создана функция RemoveElementa.

Для этого используется метод Pop, который извлекает элемент из стека. Затем выводится новый стек.

5

Фрагмент кода удаления элемента представлен на рисунке 2.

Рисунок 2 – реализация удаления элемента стека

Для реализации очереди в класс Ochered были добавлены функции:

Функция ElementovOcheredi, для получения количества элементов очереди, AddOchered для добавления элементов, RemoveElementOcheredi для удаления элементов очереди и PoiskPervogo для вывода первого элемента очереди.

Если first равен null, то функция присваивает first и last значение null ,

иначе она создает новый элемент и добавляет его вниз очереди (Рисунок 3 ).

Рисунок 3 – Функция AddOchered

6

Функция RemoveElementOcheredi.

Эта функция удаляет ссылку на верхний элемент очереди, возвращая его значение, делая тем самым следующий элемент верхним. Если элемент first

равен null, то выводится сообщение о том, что очередь пустая.

Фрагмент кода функции представлен на рисунке 4.

Рисунок 4 – Функция RemoveElementOcheredi

Для извлечения первого элемента очереди была создана функция

PoiskPervogo.

Если элемент first имеет значение null, то выводится сообщение о пустой очереди, иначе выводится значение first.

Фрагмент программы представлен на рисунке 5.

Рисунок 5 – Функция PoiskPervogo

7

Заключение

В процессе выполнения работы были получены навыки реализации

стека и очереди. Также были получены навыки работы с методами и

функциями.

8

Приложение

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

using System;

using System.Collections.Generic;

namespace ConsoleApplication5

{

class Program

{

static void Main(string[] args)

{

Ochered spisok = new Ochered(); Stack<int> stack = new Stack<int>(); Start:

int f = 0;

Console.Write("Нажмите q, чтобы работать с очередью\n"); Console.Write("Нажмите s, чтобы работать со стеком\n"); Console.WriteLine();

string vibor = Console.ReadLine(); if (vibor == "q")

{

Console.Write("Введите длину очереди:\n"); int G1 = Convert.ToInt32(Console.ReadLine());

Console.Write("Введите элемент, чтобы добавить его в очередь: \n"); for (int i = 0; i < G1; i++)

{

int numb2 = int.Parse(Console.ReadLine()); spisok.AddOchered(numb2);

}

Console.Write("Новая очередь:\n"); spisok.VivodOchered();

Ochered:

Console.Write("Нажмите 1, чтобы вывести количество элементов очереди\n");

Console.Write("Нажмите 2, чтобы вывести верхний элемент очереди\n");

Console.Write("Нажмите 3, чтобы удалить элемент очереди\n"); Console.Write("Нажмите 4, чтобы закрыть программу\n"); Console.Write("Нажмите 5, чтобы вернуться к выбору стека или

очереди\n");

string w = Console.ReadLine(); if (w == "1")

{

9

Console.WriteLine("Элементов очереди: {0}\n", spisok.ElementovOcheredi());

goto Ochered;

}

if (w == "2")

{

Console.WriteLine("Первый элемент очереди: {0}\n", spisok.PoiskPervogo(0));

goto Ochered;

}

if (w == "3")

{

Console.WriteLine("Удаленный элемент очереди: {0}\n", spisok.RemoveElementOcheredi(0)); Console.WriteLine("Очередь:\n"); spisok.VivodOchered();

goto Ochered;

}

if (w == "4")

{

Environment.Exit(0);

}

if (w == "5")

{

goto Start;

}

}

if (vibor == "s")

{

Console.Write("Введите длину стека:\n");

int G2 = Convert.ToInt32(Console.ReadLine());

Console.Write("Введите элемент, чтобы добавить его в стек:\n"); for (int i = 0; i < G2; i++)

{

int s = int.Parse(Console.ReadLine()); stack.Push(s);

f++;

}

Nachalo:

Console.Write("Нажмите 1, чтобы вывести количество элементов стека\n");

Console.Write("Нажмите 2, чтобы вывести верхний элемент\n"); Console.Write("Нажмите 3, чтобы удалить элемент\n"); Console.Write("Нажмите 4, чтобы закрыть программу\n"); Console.Write("Нажмите 5, чтобы вернуться к выбору стека или

очереди\n");

string j = Console.ReadLine();

10

if (j == "1")

{

Console.WriteLine("Элементов стека: {0}\n", f); goto Nachalo;

}

if (j == "2")

{

Console.WriteLine("Вывод элемента сверху {0}\n", stack.Peek()); goto Nachalo;

}

if (j == "3")

{

Console.Write("Введите индекс элемента стека для удаления:\n"); int V = Convert.ToInt32(Console.ReadLine()); RemoveElementa(stack, V);

f--; Console.Write("\nСтек:\n"); while (stack.Count != 0)

{

Console.Write("{0}\n", stack.Pop());

}

goto Nachalo;

}

if (j == "4")

{

Environment.Exit(0);

}

if (j == "5")

{

goto Nachalo;

}

}

}

class Ochered

{

private Node first; private Node last; private int Z;

public int ElementovOcheredi()

{

return Z;

}

public object VivodOchered()

{

if (first == null)

{

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

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