예제 #1
0
        public void TrickleUp(int index)//sona eklenen elemanı parentıyla kıyaslayıp kaldıran metot
        {
            int parent = (index - 1) / 2;

            if (index < 1)
            {
                return;
            }
            if (heapDizisi[index].NormalBisiklet > heapDizisi[parent].NormalBisiklet)
            {
                Duraklar tmp = heapDizisi[index];
                heapDizisi[index]  = heapDizisi[parent];
                heapDizisi[parent] = tmp;
            }
            TrickleUp(parent);
        }
예제 #2
0
 public Duraklar remove()
 {
     if (heapDizisi.Count == 0)
     {
         Console.WriteLine("Heap ağacı boş");
         return(null);
     }
     else
     {
         Console.WriteLine("Silinen durak: " + heapDizisi[0].DurakAdi + "   Normal bisiklet sayısı: " + heapDizisi[0].NormalBisiklet);
         Duraklar removed = heapDizisi[0];
         heapDizisi[0] = heapDizisi[heapDizisi.Count - 1];
         heapDizisi.RemoveAt(heapDizisi.Count - 1);
         TrickleDown(0);
         return(removed);
     }
 }
예제 #3
0
        public Node Insert(Node root, Duraklar v)
        {
            if (root == null)
            {
                root       = new Node();
                root.value = v;
            }
            else if (v.DurakAdi.CompareTo(root.value.DurakAdi) < 1)
            {
                root.left = Insert(root.left, v);
            }
            else
            {
                root.right = Insert(root.right, v);
            }

            return(root);
        }
예제 #4
0
        public void TrickleDown(int index)//başa eklenen değeri childlarıyla kıyaslayıp kaydıran metot
        {
            int left         = (index * 2) + 1;
            int right        = (index * 2) + 2;
            int largestChild = 0;

            if (heapDizisi.Count - 1 < left)
            {
                return;
            }
            else if (heapDizisi.Count - 1 == left)
            { //Eğer sadece left child'i varsa çalışır
                if (heapDizisi[index].NormalBisiklet < heapDizisi[left].NormalBisiklet)
                {
                    Duraklar tmp = heapDizisi[index];
                    heapDizisi[index] = heapDizisi[left];
                    heapDizisi[left]  = tmp;
                }
                return;
            }
            else
            { //Child' lardan büyük olanı bulur
                if (heapDizisi[left].NormalBisiklet > heapDizisi[right].NormalBisiklet)
                {
                    largestChild = left;
                }
                else
                {
                    largestChild = right;
                }
                if (heapDizisi[index].NormalBisiklet < heapDizisi[largestChild].NormalBisiklet)
                {
                    Duraklar tmp = heapDizisi[index];
                    heapDizisi[index]        = heapDizisi[largestChild];
                    heapDizisi[largestChild] = tmp;
                }
            }
            TrickleDown(largestChild);
        }
예제 #5
0
 public void InsertElementInHeap(Duraklar value)
 {
     heapDizisi.Add(value);
     TrickleUp(heapDizisi.Count - 1);
     //Console.WriteLine(" " + value.DurakAdi + "  Heap'e eklendi");
 }
        static void Main(string[] args)
        {
            // 1.a
            string[] duraklar = { "İnciraltı,28,2,10",      "Sahilevleri,8,1,11",      "Doğal Yaşam Parkı,17,1,6",
                                  "Bostanlı İskele,7,0,11", "Karşıyaka iskele,11,0,9", "Bayraklı Nikah Salonu,5,2,7",
                                  "Liman,6,0,12",           "Alsancak İskele,10,0,13", "Pasaport İskele,10,1,15" };
            Node     node     = null;
            Random   rastgele = new Random();
            Tree     tree     = new Tree();
            //saat bilgisini rastgele olarak ürettim

            int hours   = rastgele.Next(24);
            int minutes = rastgele.Next(60);

            //duraklar dizisindeki durak bilgilerinden Durak nesnesi oluşturmak ve Binary Search Tree'ye eklemek için for döngüsü kullandım
            for (int i = 0; i < duraklar.Length; i++)
            {
                string[] durak = duraklar[i].Split(',');

                //Rastgele sayıda Musteri için müsteriler listesi oluşturuldu
                ArrayList musteriler    = new ArrayList();
                int       musteriSayisi = rastgele.Next(1, 11);

                //random müşteri sayısı kadar müşteri oluşturmak için for döngüsü kullandım
                for (int j = 0; j < musteriSayisi; j++)
                {
                    ArrayList musteri = new ArrayList();
                    //müşteri id'sini 1-20 arasında rastgele olarak üretttim
                    //proje dökümanında belirtilmediği için aynı müşteri id'sinin birden fazla olma durumuna ve
                    //yeterli sayıda bisikletin olup olmadığına dikkat etmedim
                    musteri.Add(rastgele.Next(1, 21));
                    hours   = rastgele.Next(24);
                    minutes = rastgele.Next(60);
                    musteri.Add(hours + ":" + minutes);
                    musteriler.Add(musteri);
                }

                //Durak nesnesi oluşturuldu
                Duraklar yeniDurak = new Duraklar(durak[0], int.Parse(durak[1]), int.Parse(durak[2]), int.Parse(durak[3]), musteriler);

                //Duraktaki boş park ve bisiklet sayısı güncellendi
                yeniDurak.BosPark        += musteriSayisi;
                yeniDurak.NormalBisiklet -= musteriSayisi;

                //yeniDurak nesnesi Binary Search Tree'ye eklendi
                node = tree.Insert(node, yeniDurak);
                //yeniDurak.ToString();
            }
            // 1.b
            Console.WriteLine(" Ağacın derinliği: {0}", tree.MaxDepth(node));
            tree.PrintInOrder(node);

            // 1.c
            int arananID;

            Console.WriteLine("bulunmasını istediğiniz müşterinin ID' sini giriniz (1 ile 20 arasında tam sayı giriniz)");
            arananID = Int32.Parse(Console.ReadLine());
            tree.FindMusteri(node, arananID);

            // 1.d Kiralama
            Console.WriteLine("kiralama yapan müşterinin Idsini giriniz");
            int       kiralayanID      = Int32.Parse(Console.ReadLine());
            ArrayList kiralayanMusteri = new ArrayList();

            kiralayanMusteri.Add(kiralayanID);
            kiralayanMusteri.Add(hours + ":" + minutes);
            Console.WriteLine("kiralama yapılan durak adını giriniz");
            string kiralananDurak = Console.ReadLine();

            tree.BisikletKiralama(node, kiralananDurak, kiralayanMusteri);

            // 2.a
            // Burada Dictionary Classını kullanmak için Aybars hocadan izin aldım. İzin verdiğini belirtmemi istediler.
            Dictionary <char[], ArrayList> HashTable = new Dictionary <char[], ArrayList>();

            for (int i = 0; i < duraklar.Length; i++)
            {
                string[]  durak     = duraklar[i].Split(',');
                ArrayList yeniDurak = new ArrayList();
                yeniDurak.Add(durak[0]);
                yeniDurak.Add(int.Parse(durak[1]));
                yeniDurak.Add(int.Parse(durak[2]));
                yeniDurak.Add(int.Parse(durak[3]));
                HashTable.Add(durak[0].ToCharArray(0, 1), yeniDurak);
            }
            // 2.b
            // Boş Park sayısı 5 ten büyük her istasyona 5 bisiklet eklendi
            foreach (var item in HashTable)
            {
                if ((int)item.Value[1] > 5)
                {
                    item.Value[1] = (int)item.Value[1] - 5;
                    item.Value[3] = (int)item.Value[3] + 5;
                }
            }
            // 3.ab
            HeapMax heapMax = new HeapMax();

            for (int i = 0; i < duraklar.Length; i++)
            {
                string[] durak     = duraklar[i].Split(',');
                Duraklar yeniDurak = new Duraklar(durak[0], int.Parse(durak[1]), int.Parse(durak[2]), int.Parse(durak[3]));
                heapMax.InsertElementInHeap(yeniDurak);
            }
            //foreach (Duraklar item in heapMax.heapDizisi)
            //{
            //    Console.WriteLine(item.NormalBisiklet);
            //}

            // 3.c
            heapMax.remove();
            heapMax.remove();
            heapMax.remove();

            //heapMax.remove();
            //heapMax.remove();
            //heapMax.remove();
            //heapMax.remove();
            //heapMax.remove();
            //heapMax.remove();
            //heapMax.remove();

            // 4.a
            List <int> list = new List <int>();

            list.Add(3); list.Add(7); list.Add(9); list.Add(1); list.Add(4); list.Add(2); list.Add(8); list.Add(6); list.Add(5);
            List <int> blist      = new List <int>(list);
            BubbleSort bubbleSort = new BubbleSort(blist);

            bubbleSort.BubbleSortInc();
            //bubbleSort.BubbleSortDec();

            // 4.b
            List <int> qlist     = new List <int>(list);
            QuickSort  quickSort = new QuickSort(qlist);

            quickSort.quickSort(0, qlist.Count - 1);
        }