Stack

Stack adalah salah satu template container yang terdapat dalam STL. Stack menggambarkan tumpukan yang hanya bisa ditambah dan diambil bagian atasnya. Metode keluar masuknya barang atau data ke dalam tumpukan disebut juga dengan LIFO (Last In First Out). 

Stack umumnya digunakan untuk penyimpanan sementara. Saat kalian menggunakan function, parameter dan variabel lokal disimpan dalam stack, walaupun dalam bentuk yang berbeda dengan stack STL. Karena itu, stack kadang jadi alternatif saat programmer ingin menghindari penggunaan rekursi.

Untuk menggunakan stack kalian perlu menambahkan "#include <stack>". Selain itu, kalian perlu menggunakan std jika tidak ada "using namespace std". 

Berikut ini adalah contoh kode programnya.

#include <iostream>
#include <stack>

using namespace std;

int main(){
stack<int> tumpukan;

    //Isi stack
    tumpukan.push(1);
    tumpukan.push(2);
    tumpukan.push(3);
    tumpukan.pop();

    cout << "Jumlah data : " << tumpukan.size();
    cout << endl;
    
    cout << "Data teratas : ";
    cout << tumpukan.top() << " ";

    return 0;
}
Output
Jumlah data : 2
Data teratas : 2

Contoh kode program di atas menggunakan stack dengan tipe data int. Tipe data pada deklarasi stack diapit dengan tanda "<" dan ">". Pada kode program di atas, data ditambahkan pada stack dengan menggunakan beberapa push. Data yang terakhir dimasukkan dihapus dengan method pop.

#include <iostream>
#include <stack>

using namespace std;

int main(){
    stack<float> tumpukan;
    tumpukan.push(3.5);
    tumpukan.push(4.5);
    tumpukan.push(5);
    tumpukan.push(5.5);

    cout << "Stack : " << endl;
    while(!tumpukan.empty()){
        cout<<tumpukan.top() << endl;
        tumpukan.pop();
    }
    return 0;
}
Output
Stack :
5.5
5
4.5
3.5

Stack tidak bisa diinisialisasi isinya saat deklarasi variabel. Karena itu, kalian perlu menggunakan push untuk menambahkan data satu persatu. 

Setelah semua data ditambahkan, kalian bisa menggunakan while untuk menampilkan isi stack sambil mengosongkannya dengan pop. Data akan ditampilkan mulai dari data yang terakhir dimasukkan sesuai konsep LIFO. Untuk memastikan stack kosong, kalian bisa menggunakan method empty.

Beberapa method yang biasa digunakan dalam stack adalah sebagai berikut :

  1. push => Menambahkan data.
  2. pop => Menghapus data paling akhir.
  3. top => Menunjukkan nilai data pada elemen terakhir dalam stack. 
  4. size => Mengembalikan nilai berupa ukuran stack.
  5. empty => mengecek apakah stack sudah kosong atau belum.
Kalian juga bisa menggunakan function swap untuk menukar isi stack dengan stack lain yang isinya punya tipe data sejenis.