Kuyruk (Queue) Mantığı C++

Kuyruk (Queue) veri yapısının C++ programını aşağıdaki istenenlere uygun olarak yazdık.

Kuyruk :: Kuyruk(int N)

// Yapıcı fonksiyonda kuyruğu oluşturacak maksimum düğüm sayısını belirleyiniz.

void ekle(char ch)

// Düğüm sayısı aşılmamışsa ch değişkenini barındıracak bir düğüm ekleyiniz.

char cikar()

// Kuyruk boş değilse en sondan bir düğümü siliniz ve içindeki char tipindeki değişkeni döndürünüz.

char baslangic()

// Düğüm varsa en baştaki düğümün char tipindeki değişkenini döndürünüz.

bool bos()

// Düğüm yoksa true, varsa false döndürünüz.

bool dolu()

// Kuyruk dolu ise true, değilse false döndürünüz.

bool barindirir(char ch)

// Kuyruk içerisinde tüm düğümleri arayarak, ch karakterini barındıran bir düğüm varsa true döndürünüz, yoksa false döndürünüz.

[c language=”c#”]
//05.04.2010
//www.ilhanbahar.com
//Kodlayan : İlhan Bahar

#include “stdafx.h”
#include<iostream>
#include<conio.h>
#include<stdio.h>
using namespace std;
class Kuyruk //Sınıf Başla
{
private:
struct Dugumle//düğüm veri tipi
{
char veri;
Dugumle *ileri;
};

Dugumle *ilk,*son;//düğümün ilk ve son elemanları
int kayit,maxKayit;

public:
//Öncelikle genel olarak kullanacağımız fonksiyonlarımızı belirliyoruz
Kuyruk(int N);
void ekle(char ch);
char cikar();
char baslangic();
bool bos();
bool dolu();
bool barindirir(char ch);
};//Sınıf Bitiş

Kuyruk::Kuyruk(int N) //Yapıcı fonksiyon
{
ilk=NULL;//başlangıçta null olarak belirliyoruz.
son=NULL;//ilk pointerı gibi son pointerı da null atıyoruz
maxKayit=N; //alabileceği max kayit
kayit=0; //Şuan bulunan eleman sayısı
}

void Kuyruk::ekle(char ch)
{
if(maxKayit>=kayit){//düğüm sayısını kontrol ediyoruz
Dugumle *Temp=new Dugumle;//yeni düğüm yaratıyoruz
Temp->veri=ch; //temp içeriğine ch karakterini atıyoruz
if(ilk!=NULL){//düğüme kayıt eklenmişse bundan önce
kayit++;//düğüm sayısını artıyoruz
son->ileri=Temp;//son düğümden sonra yeni düğüm
son=Temp;//sonra bu düğümü son alarak göster
son->ileri=NULL;//en son düğümden sonra başka düğüm olmayacağından sonrasını null yap
}else//ilk defa düğüm ekleniyorsa
{
kayit++;//düğüm sayısını arttır
ilk=Temp;//düğümü ilk pointerına at
son=Temp;//sonunucuyuda aynı yapıyoruz çünkü ilk ve son eşit olunca tek kayıt olduğunu anlamış olacağız
son->ileri=NULL;//son düğümü null yapıyoruz

}
}
}
char Kuyruk::cikar() //çıkarma fonksiyonu
{
char cikan;
if(kayit>0)//düğüm var mı? kontrolu yapıyoruz
{
Dugumle *Temp;//temp adında düğüm yaratıyoruz
Temp=ilk;//temp e ilki atıyoruz
while(Temp!=NULL) //temp eğer boş değilse
{
cikan=Temp->veri; //çıkan artık tempin içeriğini alacak
if((Temp->ileri)==NULL)//eğer son kayıt ise
{
delete Temp; //Son kaydı sil
return cikan; //sonucu gönder
}
Temp=Temp->ileri; //tüm düğümleri gezmek için bir ilerlet
}
}
}
bool Kuyruk::dolu()
{
if(kayit>maxKayit)//kuyruk dolu ise
return true; //Dolu ise true
return false; //Boş ise false gönderir
}
bool Kuyruk::barindirir(char ch)
{
Dugumle *Temp;//temp adında düğüm yarat
Temp=ilk;//birinci kaydı tempe aktar
while(Temp!=NULL) //temp boş değilse
{
if(Temp->veri==ch)//eğer düğümdeki eleman ile aranan değer eşitse
{
return true; //true gönder
}
Temp=Temp->ileri; //bir sonraki kaydı tempe aktar
}
return false;
}
char Kuyruk::baslangic()
{
char cikan;
if(kayit>0){//düğüm varsa
cikan=ilk->veri; //ilk düğümü tutuyor
return cikan;
}
}
bool Kuyruk::bos()
{
if(kayit==0)//düğüm yoksa
return true; //true gönder
return false; //değilse false
}

int main() //Program ana kısım
{
int eleman=0;
char tut,atut;

cout<<“Kac eleman=”;
cin>>eleman;
//Kuyruk direk kullanıcıdan aldığımız için kuyruk dolu olmayacaktır. Fakat değer büyük girilirse kuyruk dolduğunda hata
//mesajı verdiği gözlemlenebilir.
Kuyruk queue(eleman);
for (int i=0;i<eleman;i++)
{
cout<<“nKarakter gir=”;
cin>>tut;
queue.ekle (tut);
}
cout<<“nAranan kaydi giriniz=”;
cin>>atut;
if(queue.barindirir(atut))
{
cout<<“nKayit bulunmustur.”;
}
else
cout<<“n Kayit Bulunamadi.”;
if(queue.dolu())
{
cout<<“n Kuyruk dolu”;
}
else
cout<<“n Kuyruk dolu degil”;
cout<<“n Kuyrugun sonundan cikan eleman:”<<queue.cikar();
cout<<“n Kuyrugun basindan cikan eleman:”<<queue.baslangic();
getch();
return 0;
}
[/c]

Benzer Yazılar

Henüz yorum yapılmamış

Yorum Yazın

Su elementleri kullanabilirsiniz : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Arama
RSS
Beni yukari isinla