Стек и Очередь - C#
Формулировка задачи:
Реализуйте стек и очередь (с операциями добавления/удаления элемента) при помощи массивов и при помощи линейных списков.
Если не трудно, могли бы сделать некоторые комментарии к программе)
Решение задачи: «Стек и Очередь»
textual
Листинг программы
- using System;
- // класс реализующий стек
- class Stack
- {
- // массивы для хранения строк, чисел и булевых значений
- private string[] stArr_String;
- private int[] stArr_Int;
- private bool[] stArr_Bool;
- // счетчик массива, его размер, и режим стека
- // (строковый, числовой, булевый)
- private int cur = 0;
- private int size;
- private byte mode;
- /*====================================================
- КОНСТРУКТОР для создания стека
- public Stack (размер стека, режим)
- =====================================================*/
- public Stack(int size, byte mode)
- {
- this.size = size;
- this.mode = mode;
- Console.WriteLine();
- Console.WriteLine("Стек со следующими параметрами:");
- Console.WriteLine(" количество хранимых значений: {0}", size);
- // в зависимости от режима инициализируем необходимый массив
- // нужного размера
- switch (mode)
- {
- case 1:
- stArr_String = new string[size];
- Console.WriteLine(" тип хранимых значений: строки");
- break;
- case 2:
- stArr_Int = new int[size];
- Console.WriteLine(" тип хранимых значений: целые числа");
- break;
- case 3:
- stArr_Bool = new bool[size];
- Console.WriteLine(" тип хранимых значений: булев тип");
- break;
- }
- Console.WriteLine("успешно создан!", size);
- Console.WriteLine();
- }
- /*====================================================
- метод для ЗАПОЛНЕНИЯ данными стека
- public void Push (строка которую нужно обработать)
- =====================================================*/
- public void Push(string value)
- {
- // проверка на наличие свободных мест
- if (cur == size)
- {
- Console.WriteLine(" WARNING: Стек заполнен!");
- return;
- }
- // в зависимости от режима заполняем массив стека значениями
- // перед этим сконвертировав строки в нужный тип
- // обратить внимание на [cur++] - вначале используем индекс,
- // а затем инкрементируем!
- switch (mode)
- {
- case 1:
- stArr_String[cur++] = value;
- break;
- case 2:
- stArr_Int[cur++] = Convert.ToInt32(value);
- break;
- case 3:
- stArr_Bool[cur++] = Convert.ToBoolean(value);
- break;
- }
- }
- /*====================================================
- метод для ИЗВЛЕЧЕНИЯ данных из стека
- =====================================================*/
- public string Up()
- {
- // проверка на наличие хотя бы одного элемента в стеке
- if (cur == 0)
- {
- string err = " WARNING: В стеке нет ни одного элемента!";
- return err;
- }
- // извлекаем значение из стека, конвертируем в строку,
- // возвращаем значение
- // от режима зависит в какую ветку case мы пойдем
- // обратить внимание на [--cur] - вначале дикрементируем индекс
- // массива/стека, затем только используем!
- switch (mode)
- {
- case 1:
- return stArr_String[--cur];
- case 2:
- return Convert.ToString(stArr_Int[--cur]);
- default:
- return Convert.ToString(stArr_Bool[--cur]);
- }
- }
- }
- // класс реализующий управление стеком
- class Program
- {
- static void Main()
- {
- Console.WriteLine(" 1 для строкового стека");
- Console.WriteLine(" 2 для целочисленного стека");
- Console.WriteLine(" 3 для булевого стека");
- Console.Write("Выберите тип требуемого стека: ");
- byte mode = Convert.ToByte(Console.ReadLine());
- Console.Write("Введите размер требуемого стека: ");
- int size = Convert.ToInt32(Console.ReadLine());
- Stack TestStack = new Stack(size, mode);
- for (; ; )
- {
- Console.Write("1 - для добавления в стек, 2 для извлечения из стека: ");
- byte operation = Convert.ToByte(Console.ReadLine());
- switch (operation)
- {
- case 1:
- TestStack.Push(Console.ReadLine());
- break;
- case 2:
- Console.WriteLine(TestStack.Up());
- break;
- }
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д