Advertisement
CR7CR7

libraryD1-Queue

Jul 14th, 2023
703
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.33 KB | None | 0 0
  1. using System;
  2.  
  3. namespace d1
  4. {
  5.     // Клас за представяне на опашка
  6.     public class Queue<T>
  7.     {
  8.         // Поле за съхранение на елементите на опашката в масив
  9.         private T[] items;
  10.  
  11.         // Поле за съхранение на индекса на началото на опашката
  12.         private int front;
  13.  
  14.         // Поле за съхранение на индекса на края на опашката
  15.         private int rear;
  16.  
  17.         // Конструктор с параметър за капацитета на опашката
  18.         public Queue(int capacity)
  19.         {
  20.             // Създаваме нов масив с посочения капацитет
  21.             items = new T[capacity];
  22.  
  23.             // Инициализираме началото и края на опашката с -1, което означава, че опашката е празна
  24.             front = -1;
  25.             rear = -1;
  26.         }
  27.  
  28.         // Метод за проверка дали опашката е празна
  29.         public bool IsEmpty()
  30.         {
  31.             // Опашката е празна, ако началото и краят са -1
  32.             return front == -1 && rear == -1;
  33.         }
  34.  
  35.         // Метод за проверка дали опашката е пълна
  36.         public bool IsFull()
  37.         {
  38.             // Опашката е пълна, ако краят е равен на дължината на масива минус 1
  39.             return rear == items.Length - 1;
  40.         }
  41.  
  42.         // Метод за добавяне на елемент в опашката
  43.         public void Enqueue(T item)
  44.         {
  45.             // Проверяваме дали опашката е пълна
  46.             if (IsFull())
  47.             {
  48.                 // Ако е пълна, хвърляме изключение
  49.                 throw new InvalidOperationException("Опашката е пълна.");
  50.             }
  51.  
  52.             if (IsEmpty()) // Ако опашката е празна
  53.             {
  54.                 front = 0; // Задаваме началото на 0
  55.             }
  56.  
  57.             rear++; // Увеличаваме края с 1
  58.  
  59.             items[rear] = item; // Записваме елемента на тази позиция в масива
  60.         }
  61.  
  62.         // Метод за премахване на елемент от опашката
  63.         public T Dequeue()
  64.         {
  65.             // Проверяваме дали опашката е празна
  66.             if (IsEmpty())
  67.             {
  68.                 // Ако е празна, хвърляме изключение
  69.                 throw new InvalidOperationException("Опашката е празна.");
  70.             }
  71.  
  72.             // Запазваме елемента в началото на опашката в променлива
  73.             T item = items[front];
  74.  
  75.             if (front == rear) // Ако има само един елемент в опашката
  76.             {
  77.                 front = -1; // Задаваме началото и края на -1, което означава, че опашката става празна
  78.                 rear = -1;
  79.             }
  80.             else // Ако има повече от един елемент в опашката
  81.             {
  82.                 front++; // Увеличаваме началото с 1
  83.             }
  84.  
  85.             // Връщаме запазения елемент като резултат от метода
  86.             return item;
  87.         }
  88.  
  89.         // Метод за връщане на елемента в началото на опашката без да го премахваме
  90.         public T Peek()
  91.         {
  92.             // Проверяваме дали опашката е празна
  93.             if (IsEmpty())
  94.             {
  95.                 // Ако е празна, хвърляме изключение
  96.                 throw new InvalidOperationException("Опашката е празна.");
  97.             }
  98.  
  99.             // Връщаме елемента в началото на опашката като резултат от метода
  100.             return items[front];
  101.         }
  102.     }
  103. }
  104.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement