{Kurung Kurawal}

“Stack” dengan C++

Seorang kerabat bertanya dan berdiskusi mengenai cara membuat program sederhana yang memanipulasi sebuah “Stack”. Sebelumnya, Stack adalah sebuah struktur data yang bersifat LIFO, Last In First Out, yaitu sesuai dengan namanya, yang masuk belakangan akan keluar duluan. Manipulasi data pada Stack hanya ada 3, pop, push dan stack top. Namun yang benar-benar mengubah keadaan stack itu sendiri hanyalah operasi pop dan push. Push akan menambahkan object ke dalam stack, atau menginisialisasi stack jika dalam keadaan kosong. Pop akan mengambil data yang terakhir masuk dari stack, sekaligus mengurangi isi dari stack. Sedangkan stack top hanya mirip dengan Pop, mengambil data dari posisi terakhir, hanya saja tidak menghapus object yang diambil tersebut.

Berikut adalah contoh source code sederhana implementasi stack dengan menggunakan bahasa pemrograman C++. Source code dibawah sudah diujicoba pada Visual Studio 2008, sistem operasi Windows, dan juga dengan g++ compiler pada sistem operasi openSuse (LINUX) 11.3. Stack top tidak diimplementasikan.

Tentu saja, source-code dibawah hanya mencoba memberikan gambaran tentang sebuah “STACK”, tidak dapat diaplikasikan sebagai sebuah program yang benar-benar bebas bug atau sesuai dengan kebutuhan.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <string>
#include <iostream>
 
using namespace std;
 
int top = -1;
char stack[128]; // secara program, jika stack sudah berisi lebih dari 128 item, ERROR.
char x;
 
void push()
{
    cout << "Masukkan satu karakter ";
    cin >> x;
 
    top++;
    stack[top] = x;
 
    cin.clear();
    cin.ignore(1, '\n');
}
 
void pop()
{
    if(top < 0)
    {
        cout << "Stack kosong" << endl;
        return;
    }
 
    x = stack[top];
    top--;
 
    cout << "Karakter yang terakhir masuk adalah " << x << endl;
}
 
void cetak()
{
    if(top < 0)
    {
        cout << "Stack kosong" << endl;
        return;
    }
 
    int i = 0;
    for(i = top; i >= 0; i--)
        cout << stack[i] << endl;
 
    // kalo mau dicetak dari yang pertama masuk pakai script dibawah
    //for(i = 0; i <= top; i++)
    //    cout << stack[i] << endl;
}
 
int main()
{
    string input = "";
    cout << "Pilihan yang dikenal adalah" << endl;
    cout << "\tpush" << endl;
    cout << "\tpop" << endl;
    cout << "\tcetak stack" << endl;
    cout << "\tquit" << endl;
 
    while(true)
    {
        cout << "Masukkan pilihan: ";
 
        getline(cin, input);
 
        if(input == "push")
        {
            push();
        }
        else if(input == "pop")
        {
            pop();
        }
        else if(input == "cetak stack")
        {
            cetak();
        }
        else if(input == "quit")
        {
            break;
        }
        else
        {
            cout << "Perintah '" << input << "' tidak dikenal" << endl;
        }
    }
 
    cout << "Program Akan berhenti" << endl;
}

Dan berikut screenshot hasil programnya, sebelah kiri adalah linux-console, dan sebelah kanan dijalankan dari Command prompt – Windows.