20 Kasım 2012 Salı

STACK (YIĞIN)



Verilerin geçici olarak saklandığı bir yapıdır. Son giren ilk çıkar mantığı ile çalışır.(LİFO) Ara elemanlara doğrudan erişim yapılamaz.Genelde aynı tipte veriler tutulur. Aritmetik deyimlerin bilgisayar ortamında uygulamasında ( Infix, Postfix, Prefix) kullanılabilir. Ayrıca mikro işlemcinin iç yapısında stack adı verilen bir bölge vardır ve biz bunu farkında olmadan kullanırız.Mesela iki programı aynı anda çalıştırıyorken birinden diğerine geçtiğimizde interrupt işlemi gerçekleşir ve ilk program stackde kaydedilmiştir. Böylece ilk çalıştırdığımız programa geri döndüğümüzde kaldığımız yerden devam edebiliriz.
Aşağıda örnek olarak dizi tabanlı bir yığın oluşturan menü tabanlı c++ kodlu program verilmiştir. yığın boyutu 10 dur. Menüde Ekle, Getir, Listele, Say, Programdan Çık işlemleri bulunmaktadır.


yigin.h

#include <iostream>
#define n 10

class yigin
{
public:
yigin ();
int koy();
    int al();
    void temizle();
    int listele();
void say();
private:
int eklenecek;
};

yigin.cpp

#include <iostream>
#include "yigin.h"
using namespace std;
int yveri[n]={0};
int yi=0;
int sayac=0;

yigin::yigin()
{
eklenecek=0;
}
int yigin::koy()
{
cout<<"eklemek istediginiz sayiyi giriniz:";
cin>>eklenecek;

    if(yi>=n)
cout<<"yigin dolu!"<<endl;
    else
{
yveri[yi]=eklenecek;
        yi++;
        cout<<eklenecek<<" yigina eklendi\n"<<endl;
        sayac++;
}
return 0;
}

int yigin::al()
{
if(yi<=0)
cout<<"yigin bos";
       else{
            cout<<yveri[yi-1]<<" elemani yigindan cikarildi\n"<<endl;
            sayac--;
            return yveri[--yi];
  }
}



int yigin::listele()
{
int i;
    if(yi<=0)
    cout<<"yigin bos!!!\n";
else{
    for(i=0;i<sayac;i++){
     cout<<i+1<<".eleman="<<yveri[i]<<endl;
}
}
return 0;
    }
void yigin::say()
{
cout<<"eleman sayisi:"<<sayac;
}



yiginTest.cpp

#include <iostream>
#include "yigin.h"
using namespace std;


int main()
{   yigin y;
    char secim;
cout<<"yigina eklemek icin:'e'\nyigindan eleman cikarmak icin:'g'\nlistelemek icin:'l'\nsaymak icin:'s'\ncikis icin:'q'"<<endl;
    while(1)
    { 
            secim=getchar();
            switch(secim)
            { case 'e':
            y.koy();
break;
            case 'g':
                y.al();
                 
break;
  
     case 'l':
          y.listele();
          
 break;
          case 's':
               y.say();
  break;
 case 'q':
 return 0;
 
                          }
            }
    
  system ("PAUSE");
  return 0;
}


Hiç yorum yok:

Yorum Gönder