Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

C++ Data Structure Heap


Sawer

Öne çıkan mesajlar

Data projem için bir öğrenci database'i oluşturmam istendi.Linked list,binary search tree ve heapde bunlar üstünde türlü işlemler yapıcam bla bla.linked listle ile bst bitti.Şimdi heap'e başlıcaktımki heapi hiç anlamadığımı farkettim.İnternettede adam gibi kaynak bulamadım.


bunu wikipedia'dan buldum.Heap hakkında bildiklerim her zaman left childdan right child'e gidiyor.childlar arasında büyüktür,küçüktür ilişkisi yok.max heap yaptığım için root buyuk olucak.Bilmediğim şey şunlar.

1-Diyelim üstteki resimdeki heap'e 60 sayısını eklersem ne olucak.

2-Örnek bir algoritma bulamadım,eğer bulursanız lütfen linkleyin.



3- şimdi bu heapde 20 yi silersem ne olucak. çünkü heapde sol dolu olmalı 15 ile 10 'u sola kaydırmam mı lazım?

bu sorulardan birini bile yanıtlarsanız çok sevinicem.Şimdiden saolun.

Link to comment
Sosyal ağlarda paylaş

1. Siradaki ilk bos yer, 3'un sol tarafi oldugu icin oraya yazacak. Daha sonra 3'le 60'i karsilastiracaksin, 60 daha buyuk oldugu icin, 3'le 60'in yerleri degisecek. Boylece 60, 19'un sagina geldi. 3'de 60'in solunda. Daha sonra 60'la 19'u karsilastiracaksin. 60 daha buyuk oldugu icin 19'la yer degistirecek (yukaridakiyle ayni islem oldugu icin recursive yapman isi kolaylastiracaktir). Daha sonra tekrar parent'la kontrol ediyorsun, (100 > 60) -> true oldugu icin "swap" yapman gerekmiyor. Boylece stabil oluyor.

2. Penthesilea'nin verdigi linki oku, yine anlamazsan yazalim.

2. kisimda ne demek istedigini anlamadim. Sanirim bosluklar silindigi icin demek istedigin tam olarak cikmamis. Sirasiyla ne insert ettigini yaz, sonra da naaptigini... Ama tahmin ettigimse

3. Yanlis soru sormussun cunku heap'in bir diger adi priority queue'dur. Bunun nedeni queue ozelligi tasimasidir. Yani en tepedeki (root) cikmadan, onun cocuklarini cikaramazsin.

Bu isi array'le mi yapacaksin yoksa linked list'le mi? Iki durumda da insert edilecek yere pointer tutman daha saglikli dusunmeni saglayacaktir. Array'de bu surekli arttigi icin sorun olmaz. Parent'lar icin f(index)=ceil((index-2)/2) formulunu kullanabilirsin. Linked list'te ne yapildigini unutmusum, yaslaniyorum...
Link to comment
Sosyal ağlarda paylaş

eheh

@riglous;
gerçekten çok teşşekkür ederim.bayağa anladım ama şu delete kısmını tam anlamadım.2. resimde(ki paintte çizdim:D) 20'yi silmek için tam olarak ne yapmam lazım.20 yi silip 15'i 20 nin yerine yazdırıp 10'uda solamı kaydırıcam.

@pent verdiğin linki inceliyorum akşama yazarım yapıp yapamadığımı.

saolun.
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...