Yığınla C++ Örnekle STL

std::stack nedir?

Yığın, LIFO (Son Giren İlk Çıkar) tekniğine dayalı olarak çalışan bir veri yapısıdır. std::stack, elemanların yalnızca bir uçtan eklenmesine ve çıkarılmasına izin verir.

std::stack sınıfı bir konteyner bağdaştırıcısıdır. Konteyner nesneleri benzer veri türündeki verileri tutar. Çeşitli sıra kaplarından bir yığın oluşturabilirsiniz. Hiçbir kapsayıcı sağlanmazsa, varsayılan olarak deque kapsayıcısı kullanılacaktır. Konteyner bağdaştırıcıları yineleyicileri desteklemediğinden verileri işlemek için kullanılamaz.

Yığın Söz Dizimi

Bir yığın oluşturmak için şunu eklemeliyiz: kodumuzda başlık dosyası. Daha sonra std::stack'ı tanımlamak için bu sözdizimini kullanırız:

template <class Type, class Container = deque<Type> > class stack;
  • Tip – std::stack'ta bulunan öğenin Türüdür. Herhangi bir geçerli olabilir C++ yazın ve hatta kullanıcı tanımlı bir tür.
  • Konteyner – Temeldeki konteyner nesnesinin Türüdür.

Üye Türleri

Yığın üye türleri şunlardır:

  • value_type- İlk şablon parametresi, T. Eleman türlerini belirtir.
  • Container_type- İkinci şablon parametresi Container. Temel konteyner türünü belirtir.
  • size_type- İmzasız integral türü.

OperaStack'teki işlemler

A C++ stack aşağıdaki temel işlemleri destekler:

  • push – Bir öğeyi yığına ekler/iter.
  • pop – Bir öğeyi yığından kaldırır/açar.
  • peek – Yığının en üstündeki öğeyi kaldırmadan döndürür.
  • isFull – Bir yığının dolu olup olmadığını kontrol eder.
  • isEmpty – Bir yığının boş olup olmadığını kontrol eder.

Yığın Uygulaması

Yığın Uygulaması

) 1 Adım Başlangıçta boş bir yığınımız var. Boş bir yığının tepesi -1 olarak ayarlanır.

) 2 Adım Daha sonra 5. elemanı yığına ittik. Yığının üst kısmı 5. öğeyi işaret edecektir.

) 3 Adım Daha sonra 50 numaralı elemanı yığına ittik. Yığının tepesi kayar ve 50 numaralı öğeyi işaret eder.

) 4 Adım Daha sonra üstteki öğeyi yığından kaldırarak bir pop işlemi gerçekleştirdik. 50 numaralı öğe yığından çıkarılır. Yığının tepesi artık 5. öğeyi işaret ediyor.

itme() ve pop()

Stack::Push() işlevleri, yığının en üstüne yeni öğe ekler. Yığın boyutu ekleme sonrasında 1 artırılır. İşlev şu sözdizimini alır:

stack.push(value)

Değer, yığına eklenecek öğedir.

Stack:: pop() işlevi, yığının en üst öğesini kaldırır. Bu yığının en yeni öğesi. Kaldırıldıktan sonra yığın boyutu 1 azaltılır. İşte fonksiyonun sözdizimi:

stack.pop()

Fonksiyon hiçbir parametre almaz.

Örnek 1:

#include <iostream> 
#include <stack> 
using namespace std;
int main() {
	stack<int> st;
	st.push(10);
	st.push(20);
	st.push(30);
	st.push(40);
	
         st.pop();
	st.pop();

	while (!st.empty()) {
		cout << ' ' << st.top();
		st.pop();
	}
}

Çıktı:

itme() ve pop()

İşte kodun ekran görüntüsü:

itme() ve pop()

Kod Açıklaması:

  1. İşlevlerini kullanmak için iostream başlık dosyasını kodumuza ekleyin.
  2. İşlevlerini kullanmak için yığın başlık dosyasını kodumuza ekleyin.
  3. Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza ekleyin.
  4. Main() işlevini çağırın. Bu fonksiyonun içerisine program mantığı eklenmelidir.
  5. Tamsayı değerlerini depolamak için bir yığın st oluşturun.
  6. Yığına 10 değerini eklemek için push() işlevini kullanın.
  7. Yığına 20 değerini eklemek için push() işlevini kullanın.
  8. Yığına 30 değerini eklemek için push() işlevini kullanın.
  9. Yığına 40 değerini eklemek için push() işlevini kullanın.
  10. Üstteki öğeyi (40) yığından kaldırmak için pop() işlevini kullanın. Üst öğe artık 30 olur.
  11. Üstteki öğeyi (30) yığından kaldırmak için pop() işlevini kullanın. Üst öğe artık 20 olur.
  12. Yığının boş OLMADIĞINI kontrol etmek için while döngüsünü ve empty() işlevini kullanın. ! NOT operatörüdür.
  13. Yığındaki mevcut içeriklerin konsolda yazdırılması.
  14. Yığındaki pop() işlevini çağırın.
  15. While döngüsünün gövdesinin sonu.
  16. main() işlev gövdesinin sonu.

boş(), boyut(), üst()

Yığınların, yığınla ve değerleriyle oynamak için kullanabileceğiniz yerleşik işlevleri vardır. Bunlar şunları içerir:

  • empty()- yığının boş olup olmadığını kontrol eder.
  • size()- yığının boyutunu, yani yığındaki öğe sayısını döndürür.
  • top()- üstteki yığın öğesine erişir.

Örnek 2:

#include <iostream> 
#include <stack>  
using namespace std;
void createStack(stack <int> mystack)
{
	stack <int> ms = mystack;
	while (!ms.empty())
	{
		cout << '\t' << ms.top();
		ms.pop();
	}
	cout << '\n';
}
int main()
{
	stack <int> st;
	st.push(32);
	st.push(21);
	st.push(39);
	st.push(89);
	st.push(25);

	cout << "The stack st is: ";
	createStack(st);
	cout << "\n st.size() : " << st.size();
	cout << "\n st.top() : " << st.top();
	cout << "\n st.pop() : ";
	st.pop();
	createStack(st);
	return 0;
}

Çıktı:

boş(),size(),top()

İşte kodun ekran görüntüsü:

boş(),size(),top()

Kod Açıklaması:

  1. Fonksiyonlarını kullanabilmek için iostream başlık dosyasını kodumuza ekleyin.
  2. İşlevlerini kullanabilmek için yığın başlık dosyasını kodumuza ekleyin.
  3. Sınıflarını çağırmadan kullanabilmek için programımıza std ad alanını ekleyin.
  4. Yığın mystack'ı oluşturmak için kullanabileceğimiz createStack işlevini oluşturun. Yığın bir dizi tamsayıyı tutacaktır.
  5. createStack işlevinin gövdesinin başlangıcı.
  6. Mystack veri tipinin bir örneğini oluşturun ve ona ms adını verin.
  7. Yığının boş olup olmadığını kontrol etmek için while döngüsünü ve empty() işlevini kullanın.
  8. While döngüsünün gövdesinin başlangıcı.
  9. Yığının en üstünde depolanan top() işlevini kullanın. \t karakteri yeni bir sekme oluşturacaktır.
  10. Yığının en üstündeki öğeyi silmek için pop() işlevini kullanın.
  11. While döngüsünün gövdesinin sonu.
  12. Konsola boş bir satır yazdırın.
  13. createStack işlevinin gövdesinin sonu.
  14. main() fonksiyonunu çağırın. Program mantığı main() fonksiyonunun gövdesine eklenmelidir.
  15. main() fonksiyonunun gövdesinin başlangıcı.
  16. Bir yığın nesnesi st oluşturun.
  17. 32 numaralı öğeyi yığına eklemek için push() işlevini kullanın.
  18. 21 numaralı öğeyi yığına eklemek için push() işlevini kullanın.
  19. 39 numaralı öğeyi yığına eklemek için push() işlevini kullanın.
  20. 89 numaralı öğeyi yığına eklemek için push() işlevini kullanın.
  21. 25 numaralı öğeyi yığına eklemek için push() işlevini kullanın.
  22. Konsola bir miktar metin yazdırın.
  23. Yukarıdaki ekleme işlemlerini yığına yürütmek için createStack işlevini çağırın.
  24. Konsoldaki yığının boyutunu diğer metinlerin yanında yazdırın.
  25. Öğeyi konsoldaki yığının en üstüne yazdırın.
  26. Konsola bir miktar metin yazdırın.
  27. Yığının en üstündeki öğeyi silin. Daha sonra yığında kalan elemanları döndürecektir.
  28. Yukarıdaki işlemleri yürütmek için createStack işlevini çağırın.
  29. Program başarılı bir şekilde tamamlandıktan sonra değeri döndürmelidir.
  30. main() fonksiyonunun gövdesinin sonu.

emplace() ve swap()

Bunlar diğer yerleşik yığın işlevleridir:

  • emplace()- yapılar daha sonra yığının üstüne yeni öğe ekler.
  • swap()- yığın içeriğini başka bir yığının içeriğiyle değiştirir.

Örnek 3:

#include <iostream>    
#include <stack>
#include <cstdlib>
using namespace std;
int main() {
	stack<int> st1;
	stack<int> st2;

	st1.emplace(12);
	st1.emplace(19);

	st2.emplace(20);
	st2.emplace(23);

	st1.swap(st2);

	cout << "st1 = ";
	while (!st1.empty()) {
		cout << st1.top() << " ";
		st1.pop();
	}

	cout << endl << "st2 = ";
	while (!st2.empty()) {
		cout << st2.top() << " ";
		st2.pop();
	}
}

Çıktı:

emplace()& swap()

İşte kodun ekran görüntüsü:

emplace()& swap()

Kod Açıklaması:

  1. İşlevlerini kullanmak için iostream başlık dosyasını kodumuza ekleyin.
  2. İşlevlerini kullanmak için yığın başlık dosyasını kodumuza ekleyin.
  3. İşlevlerini kullanmak için cstdlib başlık dosyasını kodumuza ekleyin.
  4. Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza ekleyin.
  5. main() fonksiyonunu çağırın. Program mantığı bu fonksiyonun gövdesine eklenecektir.
  6. Tamsayı değerlerini depolamak için st1 adında bir yığın bildirin.
  7. Tamsayı değerlerini depolamak için st2 adında bir yığın bildirin.
  8. 12 tamsayısını st1 adlı yığına eklemek için emplace() işlevini kullanın.
  9. 19 tamsayısını st1 adlı yığına eklemek için emplace() işlevini kullanın.
  10. 20 tamsayısını st2 adlı yığına eklemek için emplace() işlevini kullanın.
  11. 23 tamsayısını st2 adlı yığına eklemek için emplace() işlevini kullanın.
  12. İki yığının (st1 ve st2) içeriğini değiştirmek için swap() işlevini kullanın. St1 yığınının içeriği st2 yığınına taşınmalıdır. St2 yığınının içeriği st1 yığınına taşınmalıdır.
  13. Konsola bir miktar metin yazdırın.
  14. ST1 yığınının boş olup olmadığını kontrol etmek için while ifadesini ve empty() işlevini kullanın.
  15. St1 yığınının içeriğini konsola yazdırın. " ", yığın öğelerini konsolda yazdırırken arasına boşluk ekler.
  16. Üstteki öğeyi kaldırmak için st1 yığınında pop() işlevini yürütün.
  17. while ifadesinin gövdesinin sonu.
  18. Konsola bir miktar metin yazdırın. Sonu bir C++ bitiş çizgisi için anahtar kelime. Yazdırmaya oradan başlamak için fare imlecini bir sonraki satıra taşır.
  19. ST2 yığınının boş olup olmadığını kontrol etmek için while ifadesini ve empty() işlevini kullanın.
  20. St2 yığınının içeriğini konsola yazdırın. " ", yığın öğelerini konsolda yazdırırken arasına boşluk ekler.
  21. Üstteki öğeyi kaldırmak için st2 yığınında pop() işlevini yürütün.
  22. while ifadesinin gövdesinin sonu.
  23. Main() işlevinin gövdesinin sonu.

STL'de yığın

STL (Standart Şablon Kitaplığı), ortak özellikler sağlayan şablon sınıflarıyla birlikte gelir. C++ veri yapıları. Bu nedenle STL'de bir yığın da uygulanabilir. Bu kütüphaneyi kodumuza dahil ediyoruz ve onu bir yığın tanımlamak için kullanıyoruz.

stack<T> st; 

Yukarıdaki sözdizimi, T veri türündeki elemanlara st yığınını bildirir.

Örnek 4:

#include <iostream>      
#include <stack>
#include <cstdlib>
using namespace std;
int main() {
	stack<int> st;
	st.push(12);
	st.push(19);
	st.push(20);
	cout << st.top();   
	cout << st.size();  
}

Çıktı:

STL'de yığın

İşte kodun ekran görüntüsü:

STL'de yığın

Kod Açıklaması:

  1. İşlevlerini kullanmak için iostream başlık dosyasını kodumuza ekleyin.
  2. İşlevlerini kullanmak için yığın başlık dosyasını kodumuza ekleyin.
  3. İşlevlerini kullanmak için cstdlib başlık dosyasını kodumuza ekleyin.
  4. Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza ekleyin.
  5. main() fonksiyonunu çağırın. Program mantığı bu fonksiyonun gövdesine eklenmelidir.
  6. Tamsayı verilerini depolamak için bir yığın st bildirin.
  7. 12. elemanı yığına ekleyin.
  8. 19. elemanı yığına ekleyin.
  9. 20. elemanı yığına ekleyin.
  10. Öğeyi konsoldaki yığının en üstüne yazdırın.
  11. Konsoldaki yığının boyutunu yazdırın.
  12. main() fonksiyonunun gövdesinin sonu.

ÖZET

  • Yığın, LIFO (Son Giren İlk Çıkar) tekniğine dayalı olarak çalışan bir veri yapısıdır.
  • std::stack yalnızca öğelerin bir uçtan eklenmesine ve kaldırılmasına izin verir.
  • std::stack sınıfı, benzer veri tipindeki öğeleri tutan bir konteyner bağdaştırıcısıdır.
  • Çeşitli dizi kapsayıcılarından bir yığın oluşturulabilir.
  • Bir kapsayıcı sağlamazsanız varsayılan olarak deque kapsayıcısı kullanılacaktır.
  • Push() işlevi yığına öğe eklemek içindir.
  • pop() işlevi adımın en üstündeki öğeyi kaldırmak içindir.
  • Empty() fonksiyonu bir yığının boş olup olmadığını kontrol etmek içindir.