sd_4
.pdfМинистерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ(ТУСУР)
Кафедра безопасности информационных систем (БИС)
СТЕКИ И ОЧЕРЕДИ
Отчет по практической работе №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");