C++'da Dairesel Tampon Örnekleri

C Da Dairesel Tampon Ornekleri



Dairesel tampon veya Dairesel kuyruk, son indeks ve kuyruk indeksinin dairesel bir yapıda bağlandığı normal kuyruğun gelişmiş versiyonudur. C++'daki dairesel arabellek iki yöntemi izler: enqueue() ve dequeue(). Bu yöntemlere göre dairesel tampon veya dairesel kuyruk işlemini gerçekleştiriyoruz.

  • enqueue() yöntemi arabelleğin dolu olup olmadığını kontrol eder. Aksi takdirde, bitiş dizininin son dizin olduğunu doğrulayın. Eğer öyleyse, kuyruk değerini 0 olarak ayarlayın. Değilse, kuyruk değerini o indeksteki değer kadar artırın.
  • dequeue() işlevi, değeri dairesel kuyruktaki ön dizinden alır. Kuyruk boşsa, boş kuyruk bir mesajla görüntülenecektir. Aksi takdirde son değeri alır ve kuyruktan siler.

C++'da Dairesel Tampon Uygulama Programı

Bahsedilen iki yöntemi takip ederek dairesel tamponu C++'da uyguluyoruz. C++'da döngüsel kuyruk uygulamasına yönelik tüm adımları ele alalım.







#include

ad alanı std'sini kullanma;

MyQueue'yu yapılandır

{

int KAFA , kuyruk ;

int Qsize;



int * YeniArr;



Sıram ( dahili hayır ) {



KAFA = kuyruk = -1 ;

Qsize = boyut;

NewArr = yeni int [ S ] ;

}



geçersiz kuyruk ( dahili değer ) ;



int deQueue ( ) ;



geçersiz gösteri kuyruğu ( ) ;



} ;



Koddan başlayarak ilk olarak head ve tail değişkenlerini başlatmak için “MyQueue” yapısını oluşturuyoruz. Head değişkeni ön indeksleri, kuyruk ise dizinin arka arka indekslerini temsil eder. Daha sonra “Qsize” değişkeni ile gösterilen dairesel kuyruğun boyutu tanımlanır.



Daha sonra döngüsel kuyruğun değerlerini saklayan dinamik olarak tahsis edilmiş “NewArr” dizisini tanımlıyoruz. Daha sonra bir yapıcı olan MyQueue() metodunu çağırıyoruz ve dairesel kuyruk boyutu için “sz” parametresini geçiyoruz. MyQueue() yapıcısının içinde baş ve kuyruk işaretçilerine “-1” değerini atarız. Bu negatif değer kuyruğun şu anda boş olduğunu gösterir. Devam ederek dairesel kuyruğun boyutunu temsil eden “sz” değerini atadık. 'NewArr' dairesel kuyruğu, belirtilen 'sz' boyutunda tamsayılar dizisini oluşturmak için yeni bir anahtar kelimeyle ayarlanır.





Daha sonra enQueue() ve dequeue() fonksiyonlarını tanımlıyoruz. enqueue(), değerleri kuyruktan tanımlanmış dairesel kuyruğa ekler. Ancak dairesel kuyruğun başlığındaki öğeler dequeue() işlevi tarafından ortadan kaldırılır. showQueue() üye işlevi dairesel kuyruğun değerlerini görüntüler.

Adım 1: Öğeleri Dairesel Arabelleğe Eklemek için Bir İşlev Oluşturun



Önceki adımda, özel üyelerin başlatıldığı ve özel üye işlevlerinin döngüsel kuyruğu uygulayacak şekilde ayarlandığı bir sınıf belirledik. Şimdi, fonksiyonu dairesel kuyruğu oluşturacak ve algoritmayı kullanarak değerleri dairesel kuyruğun içine yerleştirecek şekilde ayarladık.

geçersiz MyQueue::enQueue ( dahili değer )

{

eğer ( ( KAFA == 0 && kuyruk == Qsize - 1 ) || ( kuyruk == ( KAFA - 1 ) % ( Qsize - 1 ) ) )

{

cout << ' \N Sıra Doldu' ;

geri dönmek ;

}



başka eğer ( KAFA == - 1 )

{

KAFA = kuyruk = 0 ;

YeniArr [ kuyruk ] = değer;

}



başka eğer ( kuyruk == Qsize - 1 && KAFA ! = 0 )

{

kuyruk = 0 ;

YeniArr [ kuyruk ] = değer;

}



başka {

kuyruk ++;

YeniArr [ kuyruk ] = değer;

}

}

Burada kuyruğun boş olması veya akışın az olması durumunda elemanı dairesel kuyruğa eklemek için “MyQueue” sınıfından “enqueue()” fonksiyonunu çağırıyoruz. “enqueue()” fonksiyonu “val” parametresi ile geçirilir ve döngüsel kuyruğun kuyruğundan değer eklenir. Bunun için değerleri döngüsel kuyruğa eklemek için “if-else” koşulunu ayarladık. İlk “if” ifadesi olan “if ((head == 0 && tail == Qsize – 1) || (tail == (head – 1) % (Qsize – 1)))”, kafanın olup olmadığını iki koşulu kontrol eder. dairesel kuyruğun başlangıç ​​konumunda, kuyruk ise bitiş konumundadır. Daha sonra kuyruğun baş pozisyonunun arkasında bir pozisyonda olup olmadığını kontrol eder. Bu koşullardan herhangi biri yerine getirilirse kuyruk boş değildir ve istem mesajı üretir.

Daha sonra kuyruğun boş olup olmadığını belirleyen 'else-if' koşulu var. Eğer öyleyse, değer kuyruğa eklenir. Kafanın -1'e eşit tutulması kuyruğun boş olduğunu ve değerin dairesel kuyruğa eklenmesi gerektiğini gösterir. Bunun için head ve tail’i 0’a eşitliyoruz. Daha sonra tail konumundan değeri “NewArr” dairesel kuyruğuna ekliyoruz.

Ardından, kuyruğun kuyruğun son konumunda olup olmadığını ve kafanın kuyruğun başlangıç ​​konumunda olup olmadığını kontrol eden üçüncü 'else-if' koşulumuz var. Bu koşul, kuyruğun sonuna ulaştığında ve başlangıç ​​pozisyonunda hala boşluk bulunduğunda geçerlidir. Bunun için head'i 0'a ayarlamamız gerekiyor ve elementi tail konumundan ekliyoruz. Son olarak, verilen tüm koşullar karşılanmazsa kuyruk ne boş ne de dolu olur. Bu durumda kuyruğu 1 arttırıyoruz ve değer yeni kuyruk konumundan ekleniyor.

Adım 2: Dairesel Arabellekten Öğeleri Silmek için bir işlev oluşturun

Enqueue() işlevini kullanarak öğeleri oluşturmak ve dairesel sıraya eklemek için önceki kodu ayarladık. Şimdi, taşması durumunda elemanların dairesel ara bellekten kaldırılması uygulamasını tanımlıyoruz.

int MyQueue::deQueue ( )

{

eğer ( KAFA == - 1 )

{

cout << ' \N Sıra Ücretsiz' ;

geri dönmek INT_MIN;

}



int Verilerim = YeniArr [ KAFA ] ;

YeniArr [ KAFA ] = -1 ;



eğer ( KAFA == kuyruk )

{

KAFA = -1 ;

kuyruk = -1 ;

}



başka eğer ( KAFA == Qsize - 1 )

KAFA = 0 ;



başka

KAFA ++;



geri dönmek Benim verim;



}

Verilen kodda elementi head indeksinden çıkarmak için “Myqueue” sınıfından dequeue() fonksiyonunu çağırıyoruz. Yani kuyruğun boş olup olmadığını kontrol eden “if” ifadesine sahibiz. Başlık boş kuyruğu temsil eden “-1” değeri ile ayarlanır. Kuyruğun boş olduğunu bildiren mesaj oluşturulur ve ardından int için sabit minimum değer olan INT_MIN değeri döndürülür. “İf” ifadesi kuyruğun boş olup olmadığını belirler. Bunun için “MyData” değişkenini tanımlıyoruz ve elemanın değerini sıranın başında ayarlıyoruz. Daha sonra head'i -1 konumuna getiriyoruz bu da bu değerin kuyruktan kaldırıldığını gösteriyor. Bundan sonra baş ve kuyruğun eşit olup olmadığını kontrol ediyoruz. Her ikisi de eşitse boş dairesel kuyruğu temsil eden “-1” değerini her ikisine de atarız. Son olarak, kafa kuyruğun son dizinindeyse dequeue() işlevinin çalışıp çalışmadığını kontrol ederiz. Bunun için dizinin başında döngü yapan “0” değerini ayarladık. Verilen koşullardan hiçbiri doğru değilse, başlığın değeri artırılır ve kuyruğundan çıkarılan öğe döndürülür.

Adım 3: Dairesel Arabelleğin Öğelerini Gösterecek Bir İşlev Oluşturun

Bu bölümde “NewArr” dairesel kuyruğunun elemanlarını görüntülemek için showQueue() fonksiyonunu çağırıyoruz.

geçersiz MyQueue::showQueue ( )

{

eğer ( KAFA == - 1 )

{

cout << ' \N Sıra Ücretsiz' ;

geri dönmek ;

}



cout << ' \N Dairesel Kuyruk öğeleri: ' ;



eğer ( kuyruk > = KAFA )

{

için ( int ben = KAFA ; Ben < = kuyruk ; i++ )

cout << YeniArr [ Ben ] << ' ' ;

}



başka

{

için ( int ben = KAFA ; Ben < Qsize; i++ )

cout << YeniArr [ Ben ] << ' ' ;



için ( int ben = 0 ; Ben < = kuyruk ; i++ )

cout << YeniArr [ Ben ] << ' ' ;

}

}

Önce kuyruğun boş durumu doğrulanır. Kuyruk boşsa, dairesel kuyruğun boş olduğuna dair bir gösterge görüntülenir. Aksi halde fonksiyon dairesel kuyruğun elemanlarını gösterecektir. Bunun için kuyruğumuzun kafadan büyük veya ona eşit olduğu “if” ifadesini tanımlıyoruz. Bu koşul, dairesel kuyruğun tamamlanmadığı durumu ele alacak şekilde ayarlanır.

Bu durumda baştan sona yineleme yapmak ve dairesel kuyruğun değerlerini yazdırmak için 'for' döngüsünü kullanırız. Bir sonraki durum dairesel kuyruğun tamamlandığı yerdir. Bunun için kuyruğun baştan küçük olduğu “if” koşulunu kullanarak kontrol ediyoruz. Daha sonra, ilkinin kuyruğun başından sonuna kadar yinelendiği ve ikincisinin kuyruğun başından itibaren yinelendiği iki döngü kullanmamız gerekir.

Adım 4: Döngüsel Kuyruk Programının Main() İşlevini Oluşturun

Son olarak programın main() fonksiyonunu oluşturuyoruz, burada dairesel kuyruğa beş tam sayı yerleştiriyoruz ve kuyruğun tam sayılarını görüntülüyoruz. Daha sonra dequeue() fonksiyonunu çağırarak dairesel kuyruktan silinen tamsayıları gösteriyoruz. Birkaç elemanı kuyruktan çıkardıktan sonra, enqueue() fonksiyonunu kullanarak yeni elemanları ekleyerek kuyruğu tekrar dolduruyoruz.

int ana ( )

{

MyQueue ( 5 ) ;



// Öğe ekleme içinde Dairesel Sıra

que.enQueue ( on bir ) ;

que.enQueue ( 12 ) ;

que.enQueue ( 13 ) ;

que.enQueue ( 14 ) ;

que.enQueue ( on beş ) ;



// Mevcut ekran öğeleri içinde Dairesel Sıra

que.showQueue ( ) ;



// Dairesel Kuyruktan öğeleri silme

cout << ' \N Silinen Öğe = ' << que.deQueue ( ) ;

cout << ' \N Silinen Öğe = ' << que.deQueue ( ) ;



que.showQueue ( ) ;



que.enQueue ( 16 ) ;

que.enQueue ( 17 ) ;

que.enQueue ( 18 ) ;



que.showQueue ( ) ;



geri dönmek 0 ;



}

Çıktı:

Döngüsel kuyruk uygulamasının sonuçları C++ bilgi istemi ekranında gösterilir.

Çözüm

Sonuç olarak bu makalede dairesel tampon konusu derinlemesine anlatılmıştır. Önce dairesel tamponu oluşturduk, ardından dairesel kuyruktan nasıl silineceğini anlattık ve ardından C++'da dairesel elemanları görüntüledik.