Ana Menü
· Ana Sayfa
· Dosyalar
· Dökümanlar
· Forum
· Günün Resmi
· Haber Arşivi
· WWW Linkleri
· Üye Listesi

     Forumlar

 strncpy ve strncpy_s
 Konu adi : Borland c++ Builder ile Amiral Batti
 Rady10 - YerliOyun
 Kabusta Kaybolmak
 Konsol da programı bekletmek
 Oyun programlama icin hangi programlama dilli ?
 flash! şanlıurfa bilgisayar oyununda(no rapid)
 Sevgilim Olur musun?
 Directx'e başlamak isteyenler bi bakın
 PSP programlama
 Flash tan php
 Bilgisyr oyunu yapmam için üniverstde hangi bölüme girmeliym
 www.arshiv.gen.ms
 Cimg.h ilgilenenler icin
 müttefik oyunu

Konu Disi
 Emraah
 Yeni sitemiz açıldı
 Kalp krizi durumunda ne yapılmalı?
 Oyun sektöründe hangi görevde çalışmak isterdiniz?
 Takım arkadaşı sorunu
 msn de renklı nıck
 pc hata veriyor ! YARDIM!!
 Gülmek isteyenler Buraya
 İnanılmaz hl 2 modu görüntüsü
 Computer Languages History

[ Forumlara Git ]


Temel Veri Yapıları ve STL 3 - Yığıt ve Kuyruk

(510 kelime)
(572 okuma)   Yazdırılabilir Sayfa




Temel Veri Yapıları 3 - Kuyruk ve Yığıt

STL kütüphanesi içerisinde bulunan temel veri yapılarını incelediğimiz döküman serimizin ilk iki bölümünde vektör ve liste veri yapılarından bahsetmiştik. Serinin bu dökümanında ise liste veri yapısının çeşitli problemler için özelleşmiş bir hali olarak niteleyebileceğimiz yığıt (stack) ve kuyruk (queue) veri yapılarına göz atacağız.

Yığıt (stack)

Yığıt veri yapısı bize dinamik olarak eleman ekleme ve her defasında en son eklenen elemanı elde etme imkanı sağlar. Örneğin bir masa üzerinde üst üste duran tabakları düşününün. Tüm tabak kümesi bir yığıttır. Her yeni tabak eklediğinizde tabağı en üste koyarsınız. Her tabak alışınızda ise yine en üstteki tabak alınabilir. Şimdi tabakları her hangi bir C veri tipi ile ya da sizin oluşturduğunuz yapı (struct) ile değiştirin, işte bir STL yığıtınız var :)

Yığıt veri yapısını programlarımızda kullanmak içini şu include tanımlarını yapmamız gerekiyor:

#include <stack>
using namespace std;

Diğer tüm STL veri yapılarında olduğu gibi herhangi bir veri tipi için yığıt oluşturabilirsiniz. İsterseniz 'double' tipinde verileri tutmak üzere bir yığıt oluşturalım.

stack<double> yigit;

Şu anda yığıtımızın hiç elemanı yok. Yığıta eleman eklemek için .push() yordamını kullanıyoruz. Bu yordam yardımı ile yığıtımıza birkaç değer yükleyelim.

yigit.push(2001);
yigit.push(2002);
yigit.push(2003);

Daha öncede belirttiğimiz gibi şu anda yığıtımızın en üst kısmında en son eklenen eleman olan 2003 değeri bulunmakta. Yığıt veri yapısında yığıtın en üstünde bulunan elemanın değerini .top() yordamı ile öğrenebiliriz.

double enUst = yigit.top();                  // enUst = 2003

Yığıtın en üstünde bulunan elemanı yığıttan çıkarmak için .pop() yordamı kullanılır. Bu yordamın kullanımı sonucunda yığıtta en üstün bir altındaki eleman yeni yığıt baş elemanı olur.

yigit.pop();                  // 2003 elemanı yığıttan atıldı, şu anda yığıtın en üstünde 2002 var.

Yığıttaki elemanların sayısı .size() yordamı ile öğrenilebilir.

int elemanSayisi = yigit.size();                  // elemanSayisi = 2

Yığıtta eleman olup olmadığını öğrenmek için .empty() yordamını da kullanabiliriz. Unutmamamız gereken birşey: eğer yığıtta eleman yok ise kesinlikle .pop() ve .top() yordamlarını kullanmıyoruz.

bool bos = yigit.empty();                  // bos = false;

Kuyruk (queue)

STL kuyruk (queue) veri yapısı bize FIFO (first in,first out = ilk giren ilk çıkar) kuyrukları kullanma imkanı verir. FIFO kuyruklar gerçek hayatta karşılaştığımız çeşitli kuyruklar ile mantıksal olarak özdeştirler. (örneğin otobüs kuyruğu, marketteki kasa önü kuyruğu vb.). Kuyruğa istediğimiz kadar eleman ekleyebiliriz. Kuyruktan eleman aldığımız zaman en önce eklenen elemana ulaşırız. Gördüğünüz gibi kuyruğun bu kullanım şekli yığıt veri yapısının tam olarak tersidir. (Yığıtları LIFO kuyruklar (last in, first out = son giren ilk çıkar) olarak da adlandırıyoruz).

Her ne kadar işleyiş mantıkları tam olarak zıt olsa da yığıt ve kuyruk veri yapılarında kullandığımız yordamlar birebir aynıdır. Aşağıdaki örneği inceleyelim:

#include <queue>                  // kuyruk kullanmak için bu include tanımı gerekli
using namespace std;

void main(void) {

    queue<int> kuyruk;                  // int tipinde elemanları tutacak bir kuyruk oluşturuyoruz
    kuyruk.push(1);                 
// sırası ile kuyruğa elemanlar ekliyoruz.
    kuyruk.push(2);
    kuyruk.push(3);                 
// şu anda kuyruğun en başındaki eleman 1, en sonundaki eleman ise 3

    printf("ilk gelen %d\n",kuyruk.top());                  // ekrana ilk eleman olan 1 yazdırılıyor
    kuyruk.pop();                 
                                 // 1 elemanı kuyruk başından atılıyor, yeni kuyruk başı 2
    printf("sonraki %d\n",kuyruk.top());                 
// ekrana 2 yazdırılıyor                
    kuyruk.pop();                 
                                // 2 kuyruktan atıldı, yeni kuyruk başı son eleman olan 3
    printf("son gelen %d",kuyruk.top());                
// ekrana 3 yazdırılıyor
    kuyruk.pop();                                                
// 3 kuyruktan atılıyor. kuyruk şu anda boş.

}

Birdahaki dökümanda map (hash table) veri yapısını inceleyeceğiz. Bu döküman ile ilgili _her_türlü_ konuda sitemizin forumlarını kullanarak bana sorular sorabileceğinizi, ve görüşlerinizi dile getirebileceğinizi lütfen unutmayın. Tekrar görüşmek üzere..

Deniz Aydınoğlu :: 2002 :: www.oyunyapimi.org
  

[ Geri Dön: Oyun Yapımı (Genel) | Bölümler İndeksi ]




Web site powered by PHP-Nuke
Web site engine\'s code is Copyright © 2002 by PHP-Nuke. All Rights Reserved. PHP-Nuke is Free Software released under the GNU/GPL license.
Sayfa Üretimi: 0.033 Saniye