STACK
Bagi yang mengikuti
matakuliah Algoritma dan Struktur Data maupun Praktikum Algoritma dan Struktur
Data. Pada mata kuliah tersebut, pasti menemukan materi seperti Stack, Queue,
Single Linked List, Double Linked List, dan lain-lain. Tapi disini aku mau
bahas dulu apa itu Stack dan Queue.
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. Lihat gambar 1.
Ada 2 operasi paling dasar dari stack yang dapat dilakukan, yaitu
:
1. Operasi push yaitu operasi menambahkan elemen pada urutan terakhir (paling atas).
2. Operasi pop yaitu operasi mengambil sebuah elemen data pada urutan terakhir dan menghapus elemen tersebut dari stack.
Sebagai contoh, misalkah ada data sebagai berikut : 1 3 5 6, maka data tersebut dapat tersimpan dalam bentuk sebagai berikut :
1. Operasi push yaitu operasi menambahkan elemen pada urutan terakhir (paling atas).
2. Operasi pop yaitu operasi mengambil sebuah elemen data pada urutan terakhir dan menghapus elemen tersebut dari stack.
Sebagai contoh, misalkah ada data sebagai berikut : 1 3 5 6, maka data tersebut dapat tersimpan dalam bentuk sebagai berikut :
Contoh lain adalah ada sekumpulan perintah stack yaitu push(5), push(7), pop, push(3), pop. Jika dijalankan, maka yang akan terjadi adalah :
Selain operasi dasar stack (push dan stack), ada lagi operasi lain yang dapat terjadi dalam stack yaitu:
1. Proses deklarasi yaitu proses pendeklarasian stack.
2. Proses isempty yaitu proses pemeriksaan apakah stack dalam keadaan kosong.
3. Proses isfull yaitu proses pemeriksaan apakah stack telah penuh.
4. Proses inisialisasi yaitu proses pembuatan stack kosong, biasanya dengan pemberian nilai untuk top.
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 :
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 :
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 :
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 :
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;
}
{
if (stack.top==-1)
return 1;
else
return 0;
}
Cara penggunaannya adalah :
//Penggunaan isempty dalam statement if
if( isempty(stack) ) ...
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;
}
{
if (stack==NULL)
return 1;
else
return 0;
}
Cara penggunaannya adalah
//Penggunaan isempty dalam statement
if
if( isempty(stack) ) ...
if( isempty(stack) ) ...
==========================
CONTOH PROGRAM STACK C
==========================
#include <stdio.h>
==========================
#include <stdio.h>
#include
<conio.h>
#define max 5
typedef struct {
int top;
int data[max+1];
}stack;
stack tumpukan;
void createEmpty();
int IsEmpty();
int IsFull();
void push(int x);
void pop();
main(){
int lagi;
int input;
int pilih;
createEmpty();
pilih = 0;
puts("-----IKA
SANJAYA (140010048)-----");
while (pilih != 5){
puts("=====================================");
puts(" MENU UTAMA");
puts("=====================================");
puts("1. Cek kondisi
Stack");
puts("2. Tambah
data");
puts("3. Keluarkan
isi stack");
puts("4. Kosongkan
stack");
puts("5.
Keluar");
printf("Pilihan:
");
scanf("%d",&pilih);
switch(pilih){
case 1: if (IsFull() ==
1)
puts("Stack sudah
penuh.");
else
{
printf("Masukkan
data: ");
scanf("%d",&input);
push(input);
printf("%d",tumpukan.top);
printf("%d",IsFull());
printf("%d",IsEmpty());
}
break;
case 2: if (IsEmpty()
== 1)
puts("Stack masih
kosong");
else if ((IsEmpty() ==
0) && (IsFull() == 0))
puts("Stack sudah
terisi, tapi belum penuh");
else
puts("Stack sudah
penuh");
getch();
break;
case 3: while
(IsEmpty() == 0)
{
printf("%d
\n",tumpukan.data[tumpukan.top]);
pop();
}
getch();
break;
case 4: createEmpty();
puts("Stack sudah
kosong. Top = 0");
getch();
break;
case 5:
puts("Sayonara ^_^"); getch();
break;
}
}
}
void createEmpty(){
tumpukan.top = 0;
}
int IsEmpty(){
if (tumpukan.top == 0)
return 1;
else
return 0;
}
int IsFull(){
if (tumpukan.top ==
max)
return 1;
else
return 0;
}
void push(int x){
tumpukan.top =
tumpukan.top + 1;
tumpukan.data[tumpukan.top]
= x;
}
void pop(){
tumpukan.top =
tumpukan.top - 1;
}
Sumber Referensi Dari :
http://www.inilahjalanku.com/stack-pada-bahasa-pemrograman-c/
Tidak ada komentar:
Posting Komentar