Tumpuk C++ STL dengan Contoh

โšก Ringkasan Cerdas

Tumpuk C++ STL mengimplementasikan adaptor kontainer LIFO yang menambahkan dan menghapus elemen dari satu ujung, membungkusping Sebuah wadah urutan dasar seperti deque, vector, atau list untuk mengelola data yang terurut.

  • ๐Ÿ”˜ Prinsip LIFO: std::stack mengikuti urutan Last In First Out (LIFO), sehingga elemen yang paling baru dimasukkan selalu menjadi elemen pertama yang dihapus.
  • ๐Ÿ“ฆ Adaptor kontainer: Stack membungkus kontainer sequence yang sudah ada dan secara default akan menggunakan deque jika tidak ada tipe kontainer yang ditentukan.
  • โž• Operasi inti: Fungsi push, pop, dan top masing-masing memasukkan item, mengeluarkan item teratas, dan membaca item teratas.
  • ๐Ÿ” Pemeriksaan negara bagian: Fungsi empty dan size melaporkan apakah tumpukan berisi elemen dan berapa banyak elemen yang saat ini tersimpan.
  • ๐Ÿ” Fungsi tambahan: Fungsi emplace dan swap membangun elemen di tempatnya dan menukar isi dari dua tumpukan.
  • ๐Ÿค– Bantuan AI: Asisten pengkodean AI seperti GitHub Copilot menghasilkan kode standar untuk push, pop, dan traversal stack dari komentar singkat.

Tumpuk C++ STL

Apa itu std::stack?

Tumpukan adalah struktur data yang beroperasi berdasarkan teknik LIFO (Last In First Out). std::stack memungkinkan elemen ditambahkan dan dihapus dari satu sisi saja.

Kelas std::stack adalah adaptor kontainer. Objek kontainer menyimpan data dengan tipe data yang serupa. Anda dapat membuat tumpukan dari berbagai kontainer urutan. Jika tidak ada kontainer yang disediakan, kontainer deque akan digunakan secara default. Adaptor kontainer tidak mendukung iterator, sehingga tidak dapat digunakan untuk memanipulasi data.

Sintaks Tumpukan

Untuk membuat tumpukan, kita harus menyertakan file header dalam kode kita. Kami kemudian menggunakan sintaks ini untuk mendefinisikan std::stack:

template <class Type, class Container = deque<Type> > class stack;
  • Tipe โ€“ adalah Jenis elemen yang terdapat dalam std::stack. Itu bisa valid apa saja C++ tipe atau bahkan tipe yang ditentukan pengguna.
  • Wadah โ€“ adalah Jenis objek kontainer yang mendasarinya.

Jenis Anggota

Berikut adalah tipe anggota tumpukan:

  • tipe_nilaiโ€“ Parameter templat pertama, T. Parameter ini menunjukkan tipe elemen.
  • jenis_kontainerโ€“ Parameter templat kedua, Kontainer. Ini menunjukkan tipe kontainer yang mendasarinya.
  • ukuran_jenisโ€“ Tipe bilangan bulat tak bertanda.

Operations di Stack

A C++ tumpukan mendukung operasi dasar berikut:

  • mendorong โ€“ Menambahkan/mendorong item ke dalam tumpukan.
  • pop โ€“ Fungsi ini menghapus/mengeluarkan item dari tumpukan.
  • mengintip โ€“ Mengembalikan item teratas dari tumpukan tanpa menghapusnya.
  • penuh โ€“ Memeriksa apakah sebuah stack sudah penuh.
  • kosong โ€“ Memeriksa apakah tumpukan kosong.

Implementasi Tumpukan

Langkah-langkah berikut menunjukkan bagaimana bagian atas tumpukan bergeser saat item dimasukkan dan kemudian dikeluarkan:

Langkah 1) Awalnya kita memiliki tumpukan kosong. Bagian atas tumpukan kosong diatur ke -1.

Langkah 2) Selanjutnya, kita telah memasukkan elemen 5 ke dalam tumpukan. Bagian atas tumpukan akan menunjuk ke elemen 5.

Langkah 3) Selanjutnya, kita telah memasukkan elemen 50 ke dalam tumpukan. Bagian atas tumpukan bergeser dan menunjuk ke elemen 50.

Langkah 4) Kita kemudian melakukan operasi pop, yaitu mengeluarkan elemen teratas dari tumpukan. Elemen 50 dikeluarkan dari tumpukan. Puncak tumpukan sekarang menunjuk ke elemen 5.

Implementasi Tumpukan

dorong() dan pop()

Fungsi `stack::push()` menambahkan item baru ke bagian atas tumpukan. Ukuran tumpukan bertambah 1 setelah penambahan. Fungsi ini menggunakan sintaks berikut:

stack.push(value)

Nilainya adalah item yang akan dimasukkan ke dalam tumpukan.

Fungsi `stack::pop()` menghapus elemen teratas dari tumpukan. Ini adalah item terbaru dalam tumpukan. Ukuran tumpukan berkurang 1 setelah penghapusan. Berikut sintaks fungsinya:

stack.pop()

Fungsi ini tidak memerlukan parameter.

Contoh 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();
	}
}

Keluaran:

dorong() dan pop()

Berikut ini tangkapan layar kodenya:

dorong() dan pop()

Code Penjelasan:

  1. Sertakan file header iostream dalam kode kita untuk menggunakan fungsinya.
  2. Sertakan file header tumpukan dalam kode kami untuk menggunakan fungsinya.
  3. Sertakan namespace std dalam kode kita untuk menggunakan kelasnya tanpa memanggilnya.
  4. Panggil fungsi main(). Logika program harus ditambahkan dalam fungsi ini.
  5. Buat tumpukan st untuk menyimpan nilai integer.
  6. Gunakan fungsi push() untuk memasukkan nilai 10 ke dalam tumpukan.
  7. Gunakan fungsi push() untuk memasukkan nilai 20 ke dalam tumpukan.
  8. Gunakan fungsi push() untuk memasukkan nilai 30 ke dalam tumpukan.
  9. Gunakan fungsi push() untuk memasukkan nilai 40 ke dalam tumpukan.
  10. Gunakan fungsi pop() untuk menghapus elemen teratas dari tumpukan, yaitu 40. Elemen teratas sekarang menjadi 30.
  11. Gunakan fungsi pop() untuk menghapus elemen teratas dari tumpukan, yaitu 30. Elemen teratas sekarang menjadi 20.
  12. Gunakan while loop dan fungsi empty() untuk memeriksa apakah tumpukan TIDAK kosong. ! adalah operator NOT.
  13. Mencetak isi tumpukan saat ini di konsol.
  14. Panggil fungsi pop() pada tumpukan.
  15. Akhir dari badan perulangan while.
  16. Akhir dari isi fungsi main().

kosong(), ukuran(), atas()

Tumpukan memiliki fungsi bawaan yang dapat Anda gunakan untuk bermain-main dengan tumpukan dan nilainya. Ini termasuk:

  • kosong()โ€“ memeriksa apakah tumpukan kosong atau tidak.
  • ukuran()โ€“ Mengembalikan ukuran tumpukan, yaitu jumlah elemen dalam tumpukan.
  • puncak()โ€“ mengakses elemen tumpukan di bagian atas.

Contoh 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;
}

Keluaran:

kosong(), ukuran(), atas()

Berikut ini tangkapan layar kodenya:

kosong(), ukuran(), atas()

Code Penjelasan:

  1. Sertakan file header iostream dalam kode kita untuk menggunakan fungsinya.
  2. Sertakan file header tumpukan dalam kode kita untuk menggunakan fungsinya.
  3. Sertakan namespace std dalam program kita untuk menggunakan kelasnya tanpa memanggilnya.
  4. Buat fungsi createStack yang bisa kita gunakan untuk membuat stack mystack. Tumpukan akan menampung satu set bilangan bulat.
  5. Awal dari isi fungsi createStack.
  6. Buat sebuah instance dari tipe data mystack dan beri nama ms.
  7. Gunakan perulangan while dan fungsi kosong() untuk memeriksa apakah tumpukan kosong.
  8. Awal dari badan perulangan while.
  9. Gunakan fungsi top() yang disimpan di bagian atas tumpukan. Karakter \t akan membuat tab baru.
  10. Gunakan fungsi pop() untuk menghapus elemen di bagian atas tumpukan.
  11. Akhir dari badan perulangan while.
  12. Cetak baris kosong di konsol.
  13. Akhir dari isi fungsi createStack.
  14. Panggil fungsi main(). Logika program harus ditambahkan di dalam isi fungsi main().
  15. Awal dari isi fungsi main().
  16. Buat objek tumpukan st.
  17. Gunakan fungsi push() untuk memasukkan elemen 32 ke dalam tumpukan.
  18. Gunakan fungsi push() untuk memasukkan elemen 21 ke dalam tumpukan.
  19. Gunakan fungsi push() untuk memasukkan elemen 39 ke dalam tumpukan.
  20. Gunakan fungsi push() untuk memasukkan elemen 89 ke dalam tumpukan.
  21. Gunakan fungsi push() untuk memasukkan elemen 25 ke dalam tumpukan.
  22. Cetak beberapa teks di konsol.
  23. Panggil fungsi createStack untuk mengeksekusi operasi penyisipan di atas ke dalam tumpukan.
  24. Cetak ukuran tumpukan di konsol bersama teks lainnya.
  25. Cetak elemen di bagian atas tumpukan di konsol.
  26. Cetak beberapa teks di konsol.
  27. Hapus elemen di bagian atas tumpukan. Ini kemudian akan mengembalikan elemen yang tersisa di tumpukan.
  28. Panggil fungsi createStack untuk menjalankan operasi di atas.
  29. Program harus mengembalikan nilai setelah berhasil diselesaikan.
  30. Akhir dari isi fungsi main().

emplace() dan menukar()

Ini adalah fungsi tumpukan bawaan lainnya:

  • menempatkan()โ€“ membuat konstruksi lalu memasukkan elemen baru ke bagian atas tumpukan.
  • menukar()โ€“ Bertukar isi tumpukan dengan isi tumpukan lain.

Contoh 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();
	}
}

Keluaran:

emplace() dan menukar()

Berikut ini tangkapan layar kodenya:

emplace() dan menukar()

Code Penjelasan:

  1. Sertakan file header iostream dalam kode kita untuk menggunakan fungsinya.
  2. Sertakan file header tumpukan dalam kode kami untuk menggunakan fungsinya.
  3. Sertakan file header cstdlib dalam kode kami untuk menggunakan fungsinya.
  4. Sertakan namespace std dalam kode kita untuk menggunakan kelasnya tanpa memanggilnya.
  5. Panggil fungsi main(). Logika program akan ditambahkan ke dalam isi fungsi ini.
  6. Deklarasikan tumpukan bernama st1 untuk menyimpan nilai integer.
  7. Deklarasikan tumpukan bernama st2 untuk menyimpan nilai integer.
  8. Gunakan fungsi emplace() untuk memasukkan bilangan bulat 12 ke dalam tumpukan bernama st1.
  9. Gunakan fungsi emplace() untuk memasukkan bilangan bulat 19 ke dalam tumpukan bernama st1.
  10. Gunakan fungsi emplace() untuk memasukkan bilangan bulat 20 ke dalam tumpukan bernama st2.
  11. Gunakan fungsi emplace() untuk memasukkan bilangan bulat 23 ke dalam tumpukan bernama st2.
  12. Gunakan fungsi swap() untuk menukar isi dua tumpukan, st1 dan st2. Isi tumpukan st1 harus dipindahkan ke tumpukan st2. Isi tumpukan st2 harus dipindahkan ke tumpukan st1.
  13. Cetak beberapa teks di konsol.
  14. Gunakan pernyataan while dan fungsi kosong() untuk memeriksa apakah tumpukan st1 tidak kosong.
  15. Cetak isi tumpukan st1 di konsol. Tanda โ€ โ€ menambah ruang di antara elemen tumpukan saat mencetaknya di konsol.
  16. Jalankan fungsi pop() pada tumpukan st1 untuk menghapus elemen teratas.
  17. Akhir dari isi pernyataan while.
  18. Cetak beberapa teks di konsol. Ujungnya adalah a C++ kata kunci untuk garis akhir. Ini memindahkan kursor mouse ke baris berikutnya untuk mulai mencetak dari sana.
  19. Gunakan pernyataan while dan fungsi kosong() untuk memeriksa apakah tumpukan st2 tidak kosong.
  20. Cetak isi tumpukan st2 di konsol. Tanda โ€ โ€ menambah ruang di antara elemen tumpukan saat mencetaknya di konsol.
  21. Jalankan fungsi pop() pada tumpukan st2 untuk menghapus elemen teratas.
  22. Akhir dari isi pernyataan while.
  23. Akhir dari isi fungsi main().

Tumpuk di STL

STL (Standard Template Library) hadir dengan kelas template yang menyediakan kesamaan C++ struktur data. Oleh karena itu, tumpukan juga dapat diimplementasikan di STL. Kami cukup memasukkan perpustakaan ini ke dalam kode kami dan menggunakannya untuk mendefinisikan tumpukan.

stack<T> st; 

Sintaks di atas mendeklarasikan tumpukan st untuk elemen bertipe data T.

Contoh 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();  
}

Keluaran:

Tumpuk di STL

Berikut ini tangkapan layar kodenya:

Tumpuk di STL

Code Penjelasan:

  1. Sertakan file header iostream dalam kode kita untuk menggunakan fungsinya.
  2. Sertakan file header tumpukan dalam kode kami untuk menggunakan fungsinya.
  3. Sertakan file header cstdlib dalam kode kami untuk menggunakan fungsinya.
  4. Sertakan namespace std dalam kode kita untuk menggunakan kelasnya tanpa memanggilnya.
  5. Panggil fungsi main(). Logika program harus ditambahkan dalam isi fungsi ini.
  6. Deklarasikan tumpukan st untuk menyimpan data integer.
  7. Tambahkan elemen 12 ke tumpukan.
  8. Tambahkan elemen 19 ke tumpukan.
  9. Tambahkan elemen 20 ke tumpukan.
  10. Cetak elemen di bagian atas tumpukan di konsol.
  11. Cetak ukuran tumpukan di konsol.
  12. Akhir dari isi fungsi main().

Pertanyaan Umum Demo Slot

Stack mengikuti urutan Last In First Out (LIFO), sehingga elemen terbaru dihapus terlebih dahulu. Queue mengikuti urutan First In First Out (FIFO), menghapus elemen terlama terlebih dahulu. Masing-masing sesuai dengan kebutuhan pemrosesan yang berbeda.

Ya. std::stack menerima kontainer urutan apa pun sebagai argumen templat keduanya, seperti std::stack. >. Deque standar cocok untuk sebagian besar kasus, sedangkan vektor dapat meningkatkan lokalitas memori ketika tumpukan tumbuh secara terprediksi.

Baik operasi push maupun pop berjalan dalam waktu konstan O(1) karena tumpukan hanya menyentuh elemen teratasnya. Deque yang mendasarinya menambahkan item tanpa menggeser item yang sudah ada, sehingga kinerja tetap dapat diprediksi terlepas dari ukuran tumpukan.

std::stack tidak mengekspos iterator, sehingga perulangan berbasis rentang tidak akan terkompilasi. Untuk membaca setiap nilai, salin tumpukan dan panggil top() dan pop() berulang kali pada salinan tersebut, atau pilih deque ketika traversal diperlukan.

Fungsi pop() memang sengaja mengembalikan nilai void, memisahkan penghapusan dari akses demi keamanan terhadap pengecualian. Membaca dan menghapus dalam satu langkah dapat menyebabkan kehilangan data jika proses penyalinan menimbulkan kesalahan, jadi Anda memanggil top() terlebih dahulu, kemudian pop().

Tidak. std::stack tidak menawarkan sinkronisasi bawaan, sehingga panggilan push dan pop secara bersamaan dari beberapa thread menyebabkan kondisi race data. Lindungi akses bersama dengan mutex atau mekanisme penguncian lainnya sebelum menggunakan satu stack di beberapa thread.

Ya. Asisten pengkodean AI membaca komentar atau nama fungsi dan menghasilkan deklarasi std::stack, loop push dan pop, serta logika penelusuran. RevMelihat pemeriksaan batas yang dihasilkan, seperti pengujian empty() sebelum pop(), tetap penting untuk program yang aman.

Ya. Kopilot GitHub Menyelesaikan panggilan push, pop, top, dan empty() saat Anda mengetik dan menyarankan pilihan kontainer. Ini tahun 2026 C++ Kecerdasan kode menambahkan kesadaran simbol, sehingga saran tumpukan multi-file tetap konsisten.

Ringkaslah postingan ini dengan: