VERİ YAPILARI VE PROGRAMLAMA (BIP116) Yazar: Doç.Dr.İ.Hakkı.Cedimoğlu
SAKARYA ÜNİVERSİTESİ Adapazarı Meslek Yüksekokulu Bu ders içeriğinin basım, yayım ve satış hakları Sakarya Üniversitesi ne aittir. "Uzaktan Öğretim" tekniğine uygun olarak hazırlanan bu ders içeriğinin bütün hakları saklıdır. İlgili kuruluştan izin almadan ders içeriğinin tümü ya da bölümleri mekanik, elektronik, fotokopi, manyetik kayıt veya başka şekillerde çoğaltılamaz, basılamaz ve dağıtılamaz. Copyright 2004 by Sakarya University All rights reserved No part of this course contenet may be reproduced or stored in a retrieval system, or transmitted in any form or by any means mechanical, electronic, photocopy, magnetic, tape or otherwise, without permission in writing from the University. Sürüm 1 Sakarya... 2004 S 1
YIĞIN (STACK) YAPISI VE UYGULAMASI Bu Haftanın Hedefi: Bu Haftanın Materyalleri Bu haftaki dersimizde kullanacağımız bir materyal bulunmamaktadır. Kullanılan semboller Animasyon Soru Veritabanı Bağlantılı Soru Simülasyon Püf Noktası 1
YIĞIN (STACK) YAPISI Yığın (stack), eleman eklemelerin ve çıkarmaların en sondan yapıldığı özel bir dizi yapısıdır. Son giren - ilk çıkar (Last-in-First-out (LIFO)) kuralıyla erişimin yapıldığı, ara elemanlara erişilemediği veri yapısı olarak da bilinir. Gündelik hayattan örnek olarak zemindeki kitaplar, raftaki tabaklar ve bazı oyunlardaki iskambil kağıtlarının kullanım şekli verilebilir. Bunların ortak özelliği, alıp kullanma veya yeni bir tane ekleme işlemlerinde erişimin en tepeden yapılmasının daha kolay olmasıdır. Bu yapının benzer bir mantıkla bilgisayar programlarında kullanılması birçok problemin çözümünde kolaylıklar sağlamaktadır. Yığın (stack) yapısında, erişilebilen ilk eleman yığına en son eklenen elemandır. Bu en sondaki elemana erişildiğinde, eleman yığından çıkarılmış olur (daha sonra bu elemana erişmek mümkün değildir). Böylece, yığındaki en son elemandan bir önceki eleman, yağına en son eklenen eleman durumuna geçer. Bu şekilde herhangi bir yığında, yığına en yeni eklenen elemandan ilk eklenen elemana doğru bir sırada elemanlara erişmek olasıdır. Yığın (stack) yapısına yeni bir eleman eklemek istenildiğinde, bu elemanı yapının (dizinin) en sonuna eklemek yeterlidir. Yapının (dizinin) ara yerlerine veya başına eleman eklemek mümkün değildir, sadece en sona eleman ekleme hakkı vardır. Yığın (stack) yapısı birçok programda problemin çözümünde etkili bir algoritma olarak kullanılmaktadır. Örnek olarak, matematikte işlem önceliğine uygun hesaplamanın yapılmasına (postfix evaluation), labirent problemlerine, satrançta 8 vezir problemine ve benzeri problemlere çözüm sağlamaktadır. Hatta basit bir sıralama metodu olarak kullanmak mümkündür. YIĞIN YAPISINA ELEMAN EKLEME VE ÇIKARMA İŞLEMLERİ Yığın (stack) yapısında kullanılan elemanların tipinin bir kısıtlaması yoktur. Programların çoğunda tamsayılar ve karakterler üzerinde işlem yapıldığından genelde integer veya char tipinde bir dizi tanımlanarak, yığın (stack) tanımlanmış olur. Yığın (stack) yapısında eleman ekleme ve çıkarma işlemlerini gerçekleştirmek için push (iteleme) ve pop (alma) işlemleri tanımlanır. Yani yığın yapısına bir eleman eklemek için push (iteleme) işlemini, çıkarmak için pop (alma) işlemini gerçekleştirmek gerekir. Bu iki işlemin paralelinde, kullanılan yığının dolu yada boş olduğu bilgisini verecek full (dolu) ve empty (boş) adında iki ayrı işlemden faydalanılır, bu işlemlerin tanımlı olması gereklidir. Örnek olarak dizi boyutu 5 olan bir yığın yapısına sırasıyla, 2
biçiminde yığın dizisinde yer alır. YIĞIN YAPISI ÖRNEĞİ Aşağıdaki örnekte verilen C programı girilen bir cümleyi yığın (stack) yapısı kullanarak tersten yazmaktadır. Girilen bir yazıyı dizinin ilk elemanından son elemanına kadar yığın yapısına ekler, arkasından yığın yapısından çıkartırken ekrana yazdırırsak bu yazıyı tersten yazdırmış oluruz. Örneğin yazımız "Sakarya" olsun. Bu yazıyı önce push('s'), push('a'), push('k') push('y'), push('a') şeklinde yığına atar, daha sonra yığın boşalana kadar pop() işlemi ile yığından alır, ekrana yazdırırsak bize "ayrakas" yazısını döndürür. NOT : Yazının başka yöntemlerle tersten yazılması da mümkündür ama burada amaç yığın yapısının uygulanmasının öğrenilmesidir. 3
Bu kodlardan direkt olarak sınavlarda sorumlu değilsiniz, kendini veri yapılarını uygulama bazında geliştirmek isteyen arkadaşlara yol göstermesi ve gerekirse ödevlerinize yardımcı olması amacıyla konulmuştur. 4
5