Stack adalah suatu urutan elemen yang elemennya dapat diambil dan ditambah hanya pada posisi akhir (top) saja. Contoh dalam kehidupan sehari-hari adalah tumpukan piring di sebuah restoran yang tumpukannya dapat ditambah pada bagian paling atas dan jika mengambilnya pun dari bagian paling atas pula.Operasi-operasi stack secara lengkap adalah sebagai berikut :
1. Pendeklarasian stack
Proses pendeklarasian stack adalah proses pembuatan struktur stack dalam memori. Karena stack dapat direpresentasikan dalam 2 cara, maka pendeklarasian stack pun ada 2 yaitu :
a. Pendeklarasian stack yang menggunakan array.
Suatu stack memiliki beberapa bagian yaitu
􀂃 top yang menunjuk posisi data terakhir (top)
􀂃 elemen yang berisi data yang ada dalam stack. Bagian ini lah yang berbentuk array.
􀂃 maks_elemen yaitu variable yang menunjuk maksimal banyaknya elemen dalam stack.
Dalam bahasa C, pendeklarasiannya adalah :
#define maks 100
//pendeklarasian struktur stack
struct tstack{
int top;
int maks_elemen;
int elemen[maks];
};
//pendeklarasian stack
tstack stack;
b. Pendeklarasian stack yang menggunakan single linked list
Adapun stack yang menggunakan single linked list, hanya memerlukan suatu pointer yang menunjuk ke data terakhir (perhatikan proses di halaman sebelumnya). Setiap elemen linked list mempunyai 2 field yaitu elemen datanya dan pointer bawah yang menunjuk posisi terakhir sebelum proses push.
Pendeklarasian dalam bahasa C adalah :
typedef struct TStack *PStack;
typedef struct TStack
{
int elemen;
PStack bawah;
};
// contoh pendeklarasian variable stack
PStack stack;//variable stack akan selalu menunjuk top.2. Inisialisasi
Inisialisasi stack adalah proses pembuatan suatu stack kosong. Adapun langkah-langkah proses tersebut berdasarkan jenis penyimpanannya adalah :
a. Inisialisasi stack yang menggunakan array.
Proses inisialisasi untuk stack yang menggunakan array adalah dengan mengisi nilai field top dengan 0 (nol) jika elemen pertama diawali dengan nomor 1. Kalau elemen pertama array dimulai dengan 0 (contoh bahasa C), maka top diisi dengan nilai -1.
Implementasinya dalam bahasa C adalah :
void inisialisasi(tstack *stack)
{
stack->top=-1;//karena dalam C array dimulai dgn 0
stack->maks_elemen=maks;
}
Cara pemanggilannya adalah
inisialisasi(&stack);
b. Inisialisasi stack yang menggunakan single linked list
Proses inisialisasi untuk stack yang menggunakan single linked list adalah dengan mengisi nilai pointer stack dengan NULL.
Implementasi dalam bahasa C adalah :
void inisialisasi(PStack *stack)
{
*stack=NULL;
}
Cara pemanggilannya adalah :
inisialisasi(&stack);3. Operasi IsEmpty
Operasi ini digunakan untuk memeriksa apakah stack dalam keadaan kosong. Operasi ini penting dilakukan dalam proses pop. Ketika suatu stack dalam keadaan kosong, maka proses pop tidak bisa dilakukan. Adapun langkah-langkah operasi ini adalah :
a. Operasi IsEmpty pada stack yang menggunakan array.
Operasi ini dilakukan hanya dengan memeriksa field top. Jika top bernilai 0 (untuk elemen yang dimulai dengan index 1) atau top bernilai -1 (untuk elemen yang dimulai dengan index 0), maka berarti stack dalam keadaan empty (kosong) yang akan me-return-kan true (1) dan jika tidak berarti stack mempunyai isi dan me-return-kan nilai false (0)
Implementasi dalam bahasa C adalah :
int isempty(tstack stack)
{
if (stack.top==-1)
return 1;
else
return 0;
}
Cara penggunaannya adalah :
//Penggunaan isempty dalam statement if
if( isempty(stack) ) …
b. Operasi IsEmpty pada stack yang menggunakan single linked list.
Operasi IsEmpty pada stack yang menggunakan single linked list adalah dengan memeriksa apakah pointer stack bernilai NULL. Jika stack bernilai NULL maka menandakan stack sedang keadaan empty (kosong) dan akan me-return-kan nilai 1 dan jika tidak NULL maka menandakan stack mempunyai isi (tidak kosong) sehingga operasi tersebut akan me-return-kan nilai false (0).
Implementasinya dalam bahasa C adalah :
int isempty(PStack stack)
{
if (stack==NULL)
return 1;
else
return 0;
}
Cara penggunaannya adalah
//Penggunaan isempty dalam statement if
if( isempty(stack) ) …4. Operasi IsFull
Operasi ini berguna untuk memeriksa keadaan stack apakah sudah penuh atau belum. Operasi ini akan menghasilkan nilai true (1) jika stack telah penuh dan akan menghasilkan nilai false (0) jika stack masih bisa ditambah. Langkah-langkah untuk operasi ini adalah :
a. Operasi IsFull pada stack yang menggunakan array.
Operasi ini akan memberikan nilai true (1) jika field top sama dengan field maks_elemen (untuk array yang elemennya dimulai dari posisi 1) atau top sama dengan maks_elemen-1 (unauk array yang elemennya dimulai dari posisi 0).
Implementasinya dalam bahasa C adalah :
int isfull(tstack stack)
{
if (stack.top==(stack.maks_elemen-1))
return 1;
else
return 0;
}
Cara pemanggilannya adalah :
//penggunaan isfull dalam statement if
if( !isfull(stack) ) … // jika stack tidak penuh
b. Operasi IsFull pada stack yang menggunakan single linked list.
Karena dalam linked list bersifat dinamis, maka pengecekan isFull adalah dengan memeriksa apakah memori masih dapat digunakan untuk alokasi sebuah elemen stack. Jika alokasi dapat dilakukan, maka berarti memori masih belum penuh dan proses push dapat dilakukan. Tetapi jika alokasi memori gagal dilakukan, maka berarti memori penuh dan tidak bisa menambah lagi elemen stack.
Implementasi dalam bahasa C adalah :
int isfull()
{
PStack test;
test=(PStack)malloc(sizeof(TStack));
if(test==NULL)//jika alokasi gagal
return 1;
else
{
free(test);
return 0;
}
}5. Operasi Push
Operasi push adalah operasi dasar dari stack. Operasi ini berguna untuk menambah suatu elemen data baru pada stack dan disimpan pada posisi top yang akan mengakibatkan posisi top akan berubah. Langkah operasi ini adalah :
a. Operasi push pada stack yang menggunakan array.
Langkah operasi push dalam array adalah dengan :
􀂃 Periksa apakah stack penuh (isfull). Jika bernilai false/0 (tidak penuh) maka proses push dilaksanakan dan jika pemeriksaan ini bernilai true/1 (stack penuh), maka proses push digagalkan.
􀂃 Proses push-nya sendiri adalah dengan menambah field top dengan 1, kemudian elemen pada posisi top diisi dengan elemen data baru.
Untuk lebih jelas, perhatikan lagi gambar 4 mengenai representasi stack dengan array..
Implementasinya dalam bahasa C adalah :
void push(tstack *stack, int baru)
{
if(!isfull(*stack))
{
stack->top++;
stack->elemen[stack->top]=baru;
}
else
{
printf(“Stack Full. Push Gagal.\n”);
}
}
Cara penggunaannya adalah :
push(&stack,5);// push 5 ke dalam stackContoh Implementasi Stack 1
Konversi Bilangan Desimal ke Bilangan Biner
Contoh nyata implementasi stack adalah proses pengkonversian dari bilangan decimal (basis 10) ke bilangan biner (basis 2).
Algoritmanya adalah :
1. Ambil sisa pembagian variable bilangan dengan angka 2, kemudian simpan dalam variable sisa. Kemudian simpan isi variable sisa ke dalam stack.
2. Bagi variable bilangan dengan angka 2.
3. Ulangi langkah 1 dan 2 selama bilangan tidak 0. Jika variable bilangan telah bernilai 0 maka lanjutkan ke langkah 4,
4. Lakukan perulangan untuk langkah 5 dan 6 selama stack masih mempunyai isi (tidak kosong).
5. ambil (pop) nilai yang ada di stack simpan di variable data.
6. Tulis isi variable data ke layar .
7. Selesai.
Untuk lebih jelasnya perhatikan operasi konversi dari decimal ke biner dengan variable bilangan yang akan dikonversi adalah 25.
Operasi
Representasi Array
Representasi
Single Linked List
Kondisi Awal
Operasi Stack :
inisialisasi(&stack)
?
10
?
9
?
?
?
4
?
3
?
2
?
1
Top=0
Maks_Elemen=10
Stack
Pointer Stak = NULL
c

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: