Hoşgeldiniz: OyunYapimi.org
 
Ara
Konular
  Üye Olun!    
Ana Menü
 Ana Sayfa
 Anketler
 Dosyalar
 Dökümanlar
 Forum
 Haber Arşivi
 WWW Linkleri
 Üye Listesi

Forumlar
Forumlarda Arama
 
[ Ara ]
Son yazilanlar

free ebooks - 2004-05-16 14:47 free ebooks...
oyun yazmak için - 2004-05-15 11:13 oyun yazmak için...
Sinus dalgası - 2004-05-14 19:21 Sinus dalgası...
Demosu yakında... - 2004-05-06 15:11 Demosu yakında......
Depth Test - 2004-05-03 20:55 Depth Test...
forum mesajlarini duzenlemek - 2004-05-03 19:34 forum mesajlarini ...
Başka Programlara Erişmek - 2004-05-03 17:44 Başka Programlara ...
Güzel bir e-book bağlantısı.. - 2004-05-03 16:06 Güzel bir e-book b...
Okyanus Dalgasi - 2004-05-03 16:00 Okyanus Dalgasi...
3d Shoot em up - 2004-05-03 15:57 3d Shoot em up...
Esnek Güç - 2004-05-03 13:32 Esnek Güç...
UltimateGameProgramming.com - 2004-05-03 12:29 UltimateGameProgra...
Function Pointer Nedir ne ise yarar - 2004-05-03 01:35 Function Pointer N...


Konu Disi


LAMER - 2004-05-10 01:58 LAMER...
anasafa yok forum var - 2004-05-08 16:01 anasafa yok forum ...
Anasayfa Kapali  Fakat.. - 2004-05-06 15:05 Anasayfa Kapali F...
Texture Arşivi - 2004-05-03 01:39 Texture Arşivi...
Yeni Kitap: Elektronik Hobi - 2004-05-03 00:29 Yeni Kitap: Elektr...
3DTURK - 2004-05-02 23:27 3DTURK...
Online Oyun - 2004-05-02 19:27 Online Oyun...


Splatt Forum

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

(510 kelime)
(297 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) | Dökümanlar İndeksi ]





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.