560 likes | 890 Views
Bölüm 12 – Veri Yapıları. Konular 12.1 Giriş 12.2 Kendine Referanslı Yapılar 12.3 D inamik Bellek Tahsisi 12.4 Bağlı Listeler 12.5 Yığınlar 12.6 Kuyruklar 12.7 Ağaçlar. Amaçlar. Bu bölümde şunları öğreneceksiniz :
E N D
Bölüm 12 – Veri Yapıları Konular12.1 Giriş12.2 Kendine Referanslı Yapılar12.3 Dinamik Bellek Tahsisi12.4 Bağlı Listeler12.5 Yığınlar12.6 Kuyruklar12.7 Ağaçlar
Amaçlar • Bu bölümde şunları öğreneceksiniz: • Veri nesneleri için dinamik bellek tahsisi ve bırakılması işlemlerini yapabilme • Göstericileri kullanarak bağlı, kendine referanslı ve özyinelemeli veri yapıları oluşturabilme • Bağlı liste, kuyruk, yığın ve ikili ağaç oluşturabilme ve kullanabilme • Çeşitli önemli bağlı veri yapısı uygulamalarını anlayabilme
12.1 Giriş • Dinamik veri yapıları • Çalışma anında büyüyüp küçülebilen veri yapıları • Bağlı listeler • İstenilen yere ekleme ve çıkarma yapabilmeye izin verilir • Yığınlar • Sadece yığının başına ekleme ve çıkarma yapabilme izni vardır • Kuyruklar • Sondan ekleme ve başlangıçtan çıkarma yapılabilir • İkili ağaçlar • Veri üzerinde yüksek hızda arama ve sıralama yapmayı sağlar, ve tekrar edilmiş veriyi eler
12.2 Kendine Referanslı Yapılar • Kendine Referanslı Yapılar • Kendisiyle aynı tipte başka bir yapı içeren bir yapı • Listeler, kuyruklar, yığınlar ve ağaçlar gibi kullanışlı yapıları oluşturmak için birbirlerine bağlanıp bir araya getirilebilirler • NULLgöstericisi ile sonlanırlar (0) struct dugum { int veri; struct dugum *sonraki;} • sonraki • dugum tipinde bir nesneyi işaret eder • Bağlantı olarak anlatılır • Bir düğümü diğer birdüğüme bağlar
10 15 12.3 Dinamik Bellek Tahsisi Figür 12.1 Birbirine bağlanmış iki kendine referanslı yapı
12.3 Dinamik Bellek Tahsisi • Dinamik Bellek Tahsisi • Çalışma anında belleğin ayırılması ve bırakılması • malloc • Ayırılacak byte sayısını alır • Bir nesnenin büyüklüğünü belirlemek için sizeof fonksiyonu kullanılır • void * tipinde işaretçi geri çevirir • Birvoid *işaretçisi herhangi bir işaretçiye atanabilir • Uygun bellek alanı bulamazsa NULL geri çevirir • Örnek yeniPtr = malloc( sizeof( struct dugum ) ); • free • Malloctarafından alınan belleği geri verir • Parametre olarak bir işaretçi alır • free ( yeniptr );
12.4 Bağlı Listeler • Bağlı liste • “Düğüm” olarak adlandırılan kendine referanslı sınıf nesnelerinin doğrusal birleşimi • İşaretçi bağlarıyla bağlanmışlardır • Listenin ilk elemanını gösteren bir gösterici ile erişilir • Başlangıçtan sonraki düğümlere o anki düğümün işaretçi-bağı ile erişilir • En son düğümün işaretçi-bağı listenin sona erdiğini belirtmek için NULL olarak belirlenir • Şu durumlarda dizi yerine bağlı liste kullanınız • Kaç eleman olacağını başlangıçta bilmediğinizde • Listenizin hızlıca sıralanması gerektiğinde
Enter your choice: 1 to insert an element into the list. 2 to delete an element from the list. 3 to end. ? 1 Enter a character: B The list is: B --> NULL ? 1 Enter a character: A The list is: A --> B --> NULL ? 1 Enter a character: C The list is: A --> B --> C --> NULL ? 2 Enter character to be deleted: D D not found. ? 2 Enter character to be deleted: B B deleted. The list is: A --> C --> NULL Program çıktısı (Part 1 of 3)
? 2 Enter character to be deleted: C C deleted. The list is: A --> NULL ? 2 Enter character to be deleted: A A deleted. List is empty. ? 4 Invalid choice. Enter your choice: 1 to insert an element into the list. 2 to delete an element from the list. 3 to end. ? 3 End of run. ? 2 Enter character to be deleted: C C deleted. The list is: A --> NULL ? 2 Enter character to be deleted: A A deleted. List is empty. Program çıktısı (Part 2 of 3)
? 4 Invalid choice. Enter your choice: 1 to insert an element into the list. 2 to delete an element from the list. 3 to end. ? 3 End of run. Program çıktısı (Part 3 of 3)
fig12_08.c (Part 6 of 6) Program çıktısı (Part 1 of 2) Enter choice: 1 to push a value on the stack 2 to pop a value off the stack 3 to end program ? 1 Enter an integer: 5 The stack is: 5 --> NULL ? 1 Enter an integer: 6 The stack is: 6 --> 5 --> NULL
? 1 Enter an integer: 4 The stack is: 4 --> 6 --> 5 --> NULL ? 2 The popped value is 4. The stack is: 6 --> 5 --> NULL ? 2 The popped value is 6. The stack is: 5 --> NULL ? 2 The popped value is 5. The stack is empty. ? 2 The stack is empty. ? 4 Invalid choice. Enter choice: 1 to push a value on the stack 2 to pop a value off the stack 3 to end program ? 3 End of run. Program çıktısı(Part 2 of 2)
12.5 Yığınlar • Yığın • Yeni düğüm ekleme ve çıkarma işlemi sadece en üstten yapılabilir • Son giren ilk çıkar (Last-in, first-out (LIFO)) • Yığının sonu NULL a bağlanmış bir elemanla belirtilir • Bağlı listenin kısıtlı bir versiyonudur • push • Yığının başına bir düğüm ekler • pop • Yığının başından bir düğüm çıkarır • Çıkarılan değeri tutar • Çıkarma işlemi başarılı ise true döndürür
12.6 Kuyruklar • Kuyruk • Bir süpermarket kasasındaki ödeme kuyruğuna benzer • İlk giren ilk çıkar (First-in, first-out (FIFO) ) • Düğümler sadece başlangıçtan çıkarılır • Düğümler sadece sondan eklenir • Ekleme ve çıkarma • Enqueue (ekleme) ve dequeue (çıkarma)
fig12_13.c (Part 7 of 7) Program çıktısı (Part 1 of 2) Enter your choice: 1 to add an item to the queue 2 to remove an item from the queue 3 to end ? 1 Enter a character: A The queue is: A --> NULL ? 1 Enter a character: B The queue is: A --> B --> NULL ? 1 Enter a character: C The queue is: A --> B --> C --> NULL
? 2 A has been dequeued. The queue is: B --> C --> NULL ? 2 B has been dequeued. The queue is: C --> NULL ? 2 C has been dequeued. Queue is empty. ? 2 Queue is empty. ? 4 Invalid choice. Enter your choice: 1 to add an item to the queue 2 to remove an item from the queue 3 to end ? 3 End of run. Program çıktısı (Part 2 of 2)
12.7 Ağaçlar • Ağaç düğümleri iki veya daha fazla bağa sahiptir • Gördüğümüz diğer bütün veri yapıları tek bağlıdır • İkili ağaçlar (Binary) • Bütün düğümleri iki bağlıdır • Biri, ikisi NULL olabilir veya hiçbiri olmayabilir • Kök düğüm(root) ağacın ilk düğümüdür • Kök düğümdeki her bir bağ bir çocuk düğümü (child node) işaret eder • Hiç çocuğu olmayan düğüme yaprak denir (leaf node)
12.7 Ağaçlar • İkili arama ağacı • Sol alt düğümdeki değerler üst düğüm değerinden küçüktür • Sağ alt düğümdeki değerler üst düğüm değerinden büyüktür • Aynı değerlerin engellenmesini kolaylaştırır • Hızlı arama sağlar – dengeli ağaç için en fazla log2(n) karşılaştırma yapılır
12.7 Ağaçlar • Ağaçta dolaşma: • İç sıralı (inorder)gezinme–düğüm değerlerini artan sırada yazdırır 1. Soldaki alt ağacı iç sıralı olarak gezin 2. Düğümdeki değeri işle (örneğin değeri yazdır) 3. Sağdaki alt ağacı sıralı olarak gezin • Baştan başlayarak (preorder)gezinme 1. Düğümdeki değeri işle 2. Soldaki alt ağacı baştan başlayarak gezin 3. Sağdaki alt ağacı baştan başlayarak gezin • Sondan başlayarak (postorder) gezinme 1. Soldaki alt ağacı sondan başlayarak gezin 2. Sağdaki alt ağacı sondan başlayarak gezin 3. Düğümdeki değeri işle