Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- namespace Zad2
- {
- interface IKolejkaPriorytetowa
- {
- int Wielkość
- {
- get;
- set;
- }
- void Wstaw(int wartość);
- int Usun();
- }
- class KolejkaPriorytetowaMin : IKolejkaPriorytetowa
- {
- public int Wielkość { get; set; }
- int[] dane;
- public KolejkaPriorytetowaMin(int rozmiar)
- {
- dane = new int[rozmiar];
- Wielkość = 0;
- }
- public int Rodzic(int i)
- {
- if (i > 1 && i < dane.Length)
- {
- return i / 2;
- }
- return -1;
- }
- public int Lewe(int i)
- {
- if (2 * i < dane.Length && i >= 1)
- return 2 * i;
- return -1;
- }
- public int Prawe(int i)
- {
- if (2 * i + 1 < dane.Length && i >= 1)
- return 2 * i + 1;
- return -1;
- }
- public void Napraw(int i)
- {
- int leweIndex = Lewe(i);
- int praweIndex = Prawe(i);
- int najmniejszy = i;
- if (leweIndex <= Wielkość && leweIndex > 0)
- {
- if (dane[leweIndex] < dane[najmniejszy])
- {
- najmniejszy = leweIndex;
- }
- }
- if (praweIndex <= Wielkość && praweIndex > 0)
- {
- if (dane[praweIndex] < dane[najmniejszy])
- {
- najmniejszy = praweIndex;
- }
- }
- if (najmniejszy != i)
- {
- int temp;
- temp = dane[najmniejszy];
- dane[najmniejszy] = dane[i];
- dane[i] = temp;
- Napraw(najmniejszy);
- }
- }
- public void Buduj()
- {
- for (int i = Wielkość / 2; i >= 1; i--)
- {
- Napraw(i);
- }
- }
- public void Wstaw(int wartość)
- {
- Wielkość++;
- dane[Wielkość] = 1000;
- ZmniejszWartość(Wielkość, wartość);
- }
- public void ZmniejszWartość(int i, int wartość)
- {
- dane[i] = wartość;
- while (i > 1 && dane[Rodzic(i)] > dane[i])
- {
- int temp;
- temp = dane[Rodzic(i)];
- dane[Rodzic(i)] = dane[i];
- dane[i] = temp;
- i = Rodzic(i);
- }
- }
- public int Usun()
- {
- int min = dane[1];
- dane[1] = dane[Wielkość];
- Wielkość--;
- Napraw(1);
- return min;
- }
- public void Wypisz()
- {
- for (int i = 1; i <= Wielkość; i++)
- {
- Console.Write(dane[i] + " ");
- }
- Console.WriteLine();
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- KolejkaPriorytetowaMin min = new KolejkaPriorytetowaMin(20);
- min.Buduj();
- min.Wstaw(1);
- min.Wstaw(5);
- min.Wstaw(2);
- min.Wstaw(6);
- min.Wstaw(4);
- min.Wstaw(7);
- min.Wstaw(11);
- min.Wypisz();
- min.Usun();
- min.Wypisz();
- min.Usun();
- min.Wypisz();
- min.Usun();
- min.Wypisz();
- Console.ReadKey();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement