Стек и Очередь - C#

Узнай цену своей работы

Формулировка задачи:

Реализуйте стек и очередь (с операциями добавления/удаления элемента) при помощи массивов и при помощи линейных списков. Если не трудно, могли бы сделать некоторые комментарии к программе)

Решение задачи: «Стек и Очередь»

textual
Листинг программы
  1. using System;
  2.  
  3.  
  4.  
  5.  
  6.  
  7. // класс реализующий стек
  8. class Stack
  9. {
  10.     // массивы для хранения строк, чисел и булевых значений
  11.     private string[] stArr_String;
  12.     private int[] stArr_Int;
  13.     private bool[] stArr_Bool;
  14.  
  15.     // счетчик массива, его размер, и режим стека
  16.     // (строковый, числовой, булевый)
  17.     private int cur = 0;
  18.     private int size;
  19.     private byte mode;
  20.  
  21.     /*====================================================
  22.                КОНСТРУКТОР для создания стека
  23.              public Stack (размер стека, режим)
  24.     =====================================================*/
  25.  
  26.     public Stack(int size, byte mode)
  27.     {
  28.         this.size = size;
  29.         this.mode = mode;
  30.         Console.WriteLine();
  31.         Console.WriteLine("Стек со следующими параметрами:");
  32.         Console.WriteLine(" количество хранимых значений: {0}", size);
  33.  
  34.         // в зависимости от режима инициализируем необходимый массив
  35.         // нужного размера
  36.         switch (mode)
  37.         {
  38.             case 1:
  39.                 stArr_String = new string[size];
  40.                 Console.WriteLine(" тип хранимых значений: строки");
  41.                 break;
  42.             case 2:
  43.                 stArr_Int = new int[size];
  44.                 Console.WriteLine(" тип хранимых значений: целые числа");
  45.                 break;
  46.             case 3:
  47.                 stArr_Bool = new bool[size];
  48.                 Console.WriteLine(" тип хранимых значений: булев тип");
  49.                 break;
  50.         }
  51.  
  52.         Console.WriteLine("успешно создан!", size);
  53.         Console.WriteLine();
  54.     }
  55.  
  56.     /*====================================================
  57.               метод для ЗАПОЛНЕНИЯ данными стека
  58.       public void Push (строка которую нужно обработать)
  59.     =====================================================*/
  60.  
  61.     public void Push(string value)
  62.     {
  63.  
  64.         // проверка на наличие свободных мест
  65.         if (cur == size)
  66.         {
  67.             Console.WriteLine("   WARNING: Стек заполнен!");
  68.             return;
  69.         }
  70.  
  71.         // в зависимости от режима заполняем массив стека значениями
  72.         // перед этим сконвертировав строки в нужный тип
  73.  
  74.         // обратить внимание на [cur++] - вначале используем индекс,
  75.         // а затем инкрементируем!
  76.         switch (mode)
  77.         {
  78.             case 1:
  79.                 stArr_String[cur++] = value;
  80.                 break;
  81.             case 2:
  82.                 stArr_Int[cur++] = Convert.ToInt32(value);
  83.                 break;
  84.             case 3:
  85.                 stArr_Bool[cur++] = Convert.ToBoolean(value);
  86.                 break;
  87.         }
  88.     }
  89.  
  90.     /*====================================================
  91.               метод для ИЗВЛЕЧЕНИЯ данных из стека
  92.     =====================================================*/
  93.  
  94.     public string Up()
  95.     {
  96.         // проверка на наличие хотя бы одного элемента в стеке
  97.         if (cur == 0)
  98.         {
  99.             string err = "   WARNING: В стеке нет ни одного элемента!";
  100.             return err;
  101.         }
  102.  
  103.         // извлекаем значение из стека, конвертируем в строку,
  104.         // возвращаем значение
  105.         // от режима зависит в какую ветку case мы пойдем
  106.  
  107.         // обратить внимание на [--cur] - вначале дикрементируем индекс
  108.         // массива/стека, затем только используем!
  109.         switch (mode)
  110.         {
  111.             case 1:
  112.                 return stArr_String[--cur];
  113.             case 2:
  114.                 return Convert.ToString(stArr_Int[--cur]);
  115.             default:
  116.                 return Convert.ToString(stArr_Bool[--cur]);
  117.         }
  118.     }
  119. }
  120.  
  121.  
  122.  
  123.  
  124.  
  125. // класс реализующий управление стеком
  126. class Program
  127. {
  128.     static void Main()
  129.     {
  130.         Console.WriteLine(" 1 для строкового стека");
  131.         Console.WriteLine(" 2 для целочисленного стека");
  132.         Console.WriteLine(" 3 для булевого стека");
  133.         Console.Write("Выберите тип требуемого стека: ");
  134.         byte mode = Convert.ToByte(Console.ReadLine());
  135.  
  136.         Console.Write("Введите размер требуемого стека: ");
  137.         int size = Convert.ToInt32(Console.ReadLine());
  138.  
  139.         Stack TestStack = new Stack(size, mode);
  140.         for (; ; )
  141.         {
  142.             Console.Write("1 - для добавления в стек, 2 для извлечения из стека: ");
  143.             byte operation = Convert.ToByte(Console.ReadLine());
  144.             switch (operation)
  145.             {
  146.                 case 1:
  147.                     TestStack.Push(Console.ReadLine());
  148.                     break;
  149.                 case 2:
  150.                     Console.WriteLine(TestStack.Up());
  151.                     break;
  152.             }
  153.         }
  154.     }
  155. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы