Advertisement
gride29

zad2

Dec 9th, 2020
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.61 KB | None | 0 0
  1. using System;
  2.  
  3. namespace Zad2
  4. {
  5.     interface IKolejkaPriorytetowa
  6.     {
  7.         int Wielkość
  8.         {
  9.             get;
  10.             set;
  11.         }
  12.         void Wstaw(int wartość);
  13.         int Usun();
  14.     }
  15.  
  16.     class KolejkaPriorytetowaMin : IKolejkaPriorytetowa
  17.     {
  18.         public int Wielkość { get; set; }
  19.         int[] dane;
  20.  
  21.         public KolejkaPriorytetowaMin(int rozmiar)
  22.         {
  23.             dane = new int[rozmiar];
  24.             Wielkość = 0;
  25.         }
  26.  
  27.         public int Rodzic(int i)
  28.         {
  29.             if (i > 1 && i < dane.Length)
  30.             {
  31.                 return i / 2;
  32.             }
  33.             return -1;
  34.         }
  35.  
  36.         public int Lewe(int i)
  37.         {
  38.             if (2 * i < dane.Length && i >= 1)
  39.                 return 2 * i;
  40.             return -1;
  41.         }
  42.  
  43.         public int Prawe(int i)
  44.         {
  45.             if (2 * i + 1 < dane.Length && i >= 1)
  46.                 return 2 * i + 1;
  47.             return -1;
  48.         }
  49.  
  50.         public void Napraw(int i)
  51.         {
  52.             int leweIndex = Lewe(i);
  53.             int praweIndex = Prawe(i);
  54.  
  55.             int najmniejszy = i;
  56.  
  57.             if (leweIndex <= Wielkość && leweIndex > 0)
  58.             {
  59.                 if (dane[leweIndex] < dane[najmniejszy])
  60.                 {
  61.                     najmniejszy = leweIndex;
  62.                 }
  63.             }
  64.  
  65.             if (praweIndex <= Wielkość && praweIndex > 0)
  66.             {
  67.                 if (dane[praweIndex] < dane[najmniejszy])
  68.                 {
  69.                     najmniejszy = praweIndex;
  70.                 }
  71.             }
  72.  
  73.             if (najmniejszy != i)
  74.             {
  75.                 int temp;
  76.                
  77.                 temp = dane[najmniejszy];
  78.                 dane[najmniejszy] = dane[i];
  79.                 dane[i] = temp;
  80.                 Napraw(najmniejszy);
  81.             }
  82.         }
  83.  
  84.         public void Buduj()
  85.         {
  86.             for (int i = Wielkość / 2; i >= 1; i--)
  87.             {
  88.                 Napraw(i);
  89.             }
  90.         }
  91.  
  92.         public void Wstaw(int wartość)
  93.         {
  94.             Wielkość++;
  95.             dane[Wielkość] = 1000;
  96.             ZmniejszWartość(Wielkość, wartość);
  97.         }
  98.  
  99.         public void ZmniejszWartość(int i, int wartość)
  100.         {
  101.             dane[i] = wartość;
  102.             while (i > 1 && dane[Rodzic(i)] > dane[i])
  103.             {
  104.                 int temp;
  105.                 temp = dane[Rodzic(i)];
  106.                 dane[Rodzic(i)] = dane[i];
  107.                 dane[i] = temp;
  108.                 i = Rodzic(i);
  109.             }
  110.         }
  111.  
  112.         public int Usun()
  113.         {
  114.             int min = dane[1];
  115.             dane[1] = dane[Wielkość];
  116.             Wielkość--;
  117.             Napraw(1);
  118.             return min;
  119.         }
  120.  
  121.         public void Wypisz()
  122.         {
  123.             for (int i = 1; i <= Wielkość; i++)
  124.             {
  125.                 Console.Write(dane[i] + " ");
  126.             }
  127.             Console.WriteLine();
  128.         }
  129.     }
  130.    
  131.     class Program
  132.     {
  133.         static void Main(string[] args)
  134.         {
  135.             KolejkaPriorytetowaMin min = new KolejkaPriorytetowaMin(20);
  136.             min.Buduj();
  137.             min.Wstaw(1);
  138.             min.Wstaw(5);
  139.             min.Wstaw(2);
  140.             min.Wstaw(6);
  141.             min.Wstaw(4);
  142.             min.Wstaw(7);
  143.             min.Wstaw(11);
  144.             min.Wypisz();
  145.             min.Usun();
  146.             min.Wypisz();
  147.             min.Usun();
  148.             min.Wypisz();
  149.             min.Usun();
  150.             min.Wypisz();
  151.             Console.ReadKey();
  152.         }
  153.     }
  154. }
  155.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement