Disusun Oleh:
DINA ULI AISYAH SITOMPUL (19076092)
IKA MELINIA SAFITRI (19076102)
AMELIA ZAHRA (19076083)
1
KATA PENGANTAR
Puji syukur kehadirat Tuhan Yang Maha Kuasa atas segala limpahan Rahmat,
Inayah, Taufik dan Hidayahnya sehingga saya dapat menyelesaikan penyusunan
makalah ini dalam bentuk maupun isinya yang sangat sederhana. Harapan saya semoga
makalah ini membantu menambah pengetahuan dan pengalaman bagi para pembaca,
sehingga saya dapat memperbaiki bentuk maupun isi makalah ini sehingga kedepannya
dapat lebih baik.
Makalah ini saya akui masih banyak kekurangan karena pengalaman yang saya
miliki sangat kurang. Oleh kerena itu saya harapkan kepada para pembaca untuk
memberikan masukan-masukan yang bersifat membangun untuk kesempurnaan
makalah ini.
Padang, 13 2020
Penyusun
2
DAFTAR ISI
BAB I
PENDAHULUAN
Sering munculnya kata – kata Stack dalam saat mempelajari Sruktur Data. Yang
dimana Stack juga merupakan salah satu konsep penting di dalam dunia ilmu komputer.
3
Dengan makalah ini kami mencobakan menguraikan apa itu Stack dan bagian – bagian
nya
Sejalan dengan latar belakang masalah diatas, penulis merumuskan masalah sebagai
berikut.
1. Pengertian dari stack ?
2. Operasi apa saja yang digunakan dalam stack ?
3. Dimana mendeklarasikan stack ?
4. Apa saja macam – macam stack ?
5. Kelebihan dan kekurangan stack ?
6. Contoh coding Stack ?
4
5. Kelebihan dan kekurangan stack
6. Contoh Coding stack
BAB II
PEMBAHASAN
Stack bisa diartikan sebagai suatu kumpulan data yang seolah-olah ada data
yang diletakkan di atas data yang lain. Di dalam stack, kita dapat
5
menambahkan/menyisipkan dan mengambil/menghapus data melalui ujung yang
sama yang disebut sebagai puncak stack (top of stack). Stack mempunyai sifat LIFO
(Last In First Out), artinya data yang terakhir masuk adalah data yang pertama keluar.
Tumpukan digunakan dalam algoritma pengimbas (parsing), algoritma penilaian
(evaluation) dan algoritma penjajahan balik (backtrack). Elemen-elemen di dalam
tumpukan dapat bertipe integer, real, record dalam bentuk sederhana atau terstruktur.
Stack adalah suatu tumpukan dari benda. Konsep utamanya adalah LIFO (Last In
First Out), benda yang terakhir masuk dalam stack akan menjadi benda pertama yang
dikeluarkan dari stack. Tumpukan disebut juga “Push Down Stack” yaitu penambahan
elemen baru (PUSH)ndan penghapusan elemen dari tumpukann(POP). Contoh pada
PDA (Push Down Automaton). Sistem pada pengaksesan pada tumpukan menggunakn
system LIFO (Last In First Out), artinya elemen yang terakhir masuk itu yang akan
pertama dikeluarkan dari tumpukan (Stack). Ilustrasi tumpukan (Stack) dapat
digambarkan seperti tumpukan CD atau tumpukan sate. Stack merupakan suatu susunan
koleksi data dimana dapat ditambahkan dan dihapus selalu dilakukan pada bagian akhir
data, yang disebut dengan Top Of Stack.
Sebelum struktur data tumpukan ini bisa digunakan, harus dideklarasikan dahulu
dalam kamus data. Ada beberapa cara pendeklarasian struktur data ini, salah satunya
dengan menggunakan tata susunan linear (larik) dan sebuah variable, yang dikemas
dalam tipe data record. Stack (tumpukan) adalah struktur data bertipe record yang terdiri
dari field elemen, bertipe larik/array dengan indek dari 1 sampai dengan MaksTum
(Maksimum Tumpukan), atas, bertipe interger berkisar dari 0 (saat kosong) sampai
dengan MaksTum (Maksimum Tumpukan).
Operasi yang sering diterapkan pada struktur data Stack (Tumpukan) adalah
Push dan Pop. Operasi – operasi yang dapat diterapkan adalah sebagai berikut :
1. Push : digunakan untuk menembah item pada Stack pada Tumpukan paling atas.
2. Pop : digunakan untuk mengambil item pada Stack pada Tumpukan paling atas.
3. Clear : digunakan untuk mengosongkan Stack.
6
4.Create Stack : membuat Tumpukan baru S, dengan jumlah elemen kosong.
5. MakeNull : mengosongkan Tumpukan S, jika ada elemen maka semua elemen
dihapus.
6. IsEmpty : fungsi yang digunakan untuk mengecek apakah Stack sudah kosong.
7. Isfull : fungsi yang digunakan untuk mengecek apakah Stack sudah penuh.
Pada proses Push, Tumpukan (Stack) harus diperiksa apakah jumlah elemen
sudah mencapai masimum atau tidak. Jika sudah mencapai maksimum maka
OVERFLOW, artinya Tumpukan penuh tidak ada elemen yang dapat dimasukkan ke
dalam Tumpukan. Sedangkan pada proses Pop, Tumpukan harus diperiksa apakah ada
elemen yang hendak dikeluarkan atau tidak. Jika tidak ada maka UNDERFLOW,
artinya tumpukan kosong tidak ada elemen yang dapat diambil.
Sebelum struktur data tumpukan ini bisa digunakan, harus dideklarasikan dahulu
dalam kamus data. Ada beberapa cara pendeklarasian struktur data ini, salah satunya
dengan menggunakan tata susunan linear (larik) dan sebuah variable, yang dikemas
dalam tipe data record. Stack (tumpukan) adalah struktur data bertipe record yang terdiri
dari field elemen, bertipe larik/array dengan indek dari 1 sampai dengan MaksTum
(Maksimum Tumpukan), atas, bertipe interger berkisar dari 0 (saat kosong) sampai
dengan MaksTum (Maksimum Tumpukan).
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.
7
4. Proses inisialisasi yaitu proses pembuatan stack kosong, biasanya dengan
pemberian nilai untuk top.
Sesuai dengan sifat stack, pengambilan atau penghapusan elemen dalam stack harus
dimulai dari elemen teratas.
8
elemen maksimal suatu stack tidak melebihi batas maksimum banyaknya array.
Pada suatu saat ukuran stack akan sama dengan ukuran array. Bila diteruskan
menambah data, maka akan terjadi overflow. Oleh karena itu, perlu
ditambahkan data untuk mencatat posisi ujung stack.
Ada dua jenis bentuk stack menggunakan array, yaitu single stack dan
double stack.
Single stack dapat dianalogikan dengan sebuah wadah yang diisi benda melalui
satu jalan keluar dan masuk.
Operasi-operasi stack pada single stack secara lengkap adalah sebagai berikut :
b. elemen yang berisi data yang ada dalam stack. Bagian ini lah yang
berbentuk array.
(2) Inisialisasi
9
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.
Operasi ini dilakukan hanya dengan memeriksa field top. Jika top bernilai
0, maka berarti stack dalam keadaan empty (kosong) yang akan
menghasilkan nilai true (1) pada function IsEmpty dan jika tidak berarti
stack mempunyai isi dan menghasilkan nilai false (0) pada function
IsEmpty.
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. 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.
b. Proses push-nya sendiri adalah dengan menambah field top dengan 1,
kemudian elemen pada posisi top diisi dengan elemen data baru.
(6) Operasi Pop
Operasi pop adalah salah satu operasi paling dasar dari stack. Operasi ini
berguna untuk mengambil elemen terakhir (top) dan kemudian menghapus elemen
tersebut sehingga posisi top akan berpindah. Operasi ini biasanya menghasilkan
nilai sesuai data yang ada di top. Langkah operasi pop pada stack yang
menggunakan array adalah :
10
a. terlebih dahulu memeriksa apakah stack dalam keadaan keadaan
kosong, jika tidak kosong maka data diambil pada posisi yang ditunjuk
oleh posisi top, kemudian simpan dalam variable baru dengan nama
data, kemudian posisi top dikurangi 1,
b. kemudian nilai pada variable data dikembalikan ke function.
Operasi-operasi stack pada single stack secara lengkap adalah sebagai berikut :
(2) Inisialisasi
Inisialisasi double stack adalah proses pembuatan suatu double stack
kosong. Proses inisialisasi untuk double stack yang menggunakan array
adalah dengan mengisi nilai field top1 dengan 0 (nol) dan mengisi nilai field
top2 dengan nilai maksimum ditambah 1.
(3) Operasi IsEmpty
11
Operasi ini digunakan untuk memeriksa apakah double stack dalam
keadaan kosong. Operasi ini penting dilakukan dalam proses pop. Ketika
suatu double stack dalam keadaan kosong, maka proses pop tidak bisa
dilakukan. Operasi ini dilakukan hanya dengan memeriksa field top1 dan
top2. Jika top1 bernilai 0 dan top2 bernilai maks_elemen ditambah 1, maka
berarti stack dalam keadaan empty (kosong) yang akan menghasilkan nilai
true (1) dan jika tidak berarti stack mempunyai isi dan menghasilkan nilai
false (0).
(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.
Operasi ini akan memberikan nilai true (1) jika field top1 lebih besar dari
field top2.
(5) Operasi Push
Operasi push berguna untuk menambah suatu elemen data baru pada
salah satu stack.
(6) Operasi Pop
Operasi pop berguna untuk mengambil elemen terakhir (top) dan
kemudian menghapus elemen tersebut sehingga posisi top akan berpindah.
Bentuk penyajian stack menggunakan single linked list sangat tepat karena
banyaknya elemen dalam list bersifat dinamis, sedangkan jumlah elemen stack juga
sangat bervariasi atau dinamis.
12
Representasi stack mengunakan single linkd list dapat dilihat pada gambar berikut :
Pada reprsentasi stack menggunakan single linked list TOP selalu berada di
penunjuk pointer awal.
(2) Inisialisasi
Proses inisialisasi untuk stack yang menggunakan single linked list adalah dengan
mengisi nilai pointer stack dengan Nil.
Operasi IsEmpty pada stack yang menggunakan single linked list adalah dengan
memeriksa apakah pointer stack bernilai NIL. Jika stack bernilai NIL maka
menandakan stack sedang keadaan empty (kosong) dan akan me-return-kan nilai 1
dan jika tidak Nil maka menandakan stack mempunyai isi (tidak kosong) sehingga
operasi tersebut akan me-return-kan nilai false (0).
13
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.
Operasi push pada stack yang menggunakan single linked list adalah sama dengan
proses tambahawal pada operasi linked list. Langkah-langkahnya adalah :
a. Periksa apakah memori 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.
b. Proses push-nya sendiri adalah dengan cara mengalokasikan suatu elemen
linked list (disebut variable baru), kemudian periksa jika stack dalam keadaan
kosong maka pointer yang menunjuk ke awal stack diisi dengan pointer baru,
dan jika dengan menambah field top dengan 1, kemudian elemen pada posisi
top diisi dengan elemen data baru. Tetapi jika pointer penunjuk stack sudah
menunjuk ke suatu data, maka sambungkan field pointer link (penunjuk ke
data sebelumnya) dari pointer baru ke pointer penunjuk posisi akhir stack
(top) dan kemudian pindahkah pointer penunjuk posisi akhir stack ke pointer
baru.
(6)Operasi Pop
Langkah operasi pop pada stack yang menggunakan single linked list
adalah sama dengan proses hapus awal pada operasi single linked list. Prosesnya
adalah :
a. Periksa apakah.stack kosong (isempty), jika kosong maka proses pop tidak
bisa dilakukan. Jika stack tidak kosong maka proses pop dijalankan.
b. Proses pop-nya sendiri adalah mengambil elemen yang ditunjuk oleh pointer
stack kemudian simpan dalam variable data. Kemudian buat variable pointer
14
bantu yang diisi dengan pointer penunjuk stack yang nantinya akan dihapus
dari memori. Kemudian pointer penunjuk stack dipindahkan ke posisi yang
ditunjuk oleh field pointer bawah dari variable bantu.
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#define max 5
struct tumpukan{
int atas; //untuk mencacah indeks dari stack
int data[max+1];
}t;
void createEmpty();
int IsEmpty();
int IsFull();
void push(int x);
void pop();
main()
{
int lagi;
int input;
int pilih;
createEmpty();
pilih = 0;
while (pilih != 5){
system("cls");
puts("=====================================");
puts(" MENU UTAMA");
puts("=====================================");
15
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 (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 2: if (IsFull() == 1)
puts("Stack sudah penuh.");
else
{
printf("Masukkan data: ");
scanf("%d",&input);
push(input);
printf("%d",t.atas);
printf("%d",IsFull());
printf("%d",IsEmpty());
}
break;
case 3: while (IsEmpty() == 0)
{
printf("%d \n",t.data[t.atas]);
16
pop();
}
getch();
break;
case 4: createEmpty();
puts("Stack sudah kosong. Top = 0");
getch();
break;
case 5: puts("Byeee");
getch();
break;
}
}
}
//DEKLARASI OPERASI-OPERASI DASAR STACK
void createEmpty(){
t.atas = 0;
}
int IsEmpty(){
if (t.atas == 0)
return 1;
else
return 0;
}
int IsFull(){
if (t.atas == max)
return 1;
else
return 0;
}
void push(int x){
17
t.atas = t.atas + 1;
t.data[t.atas] = x;
}
void pop(){
t.atas = t.atas - 1;
}
BAB III
PENUTUP
18
3.1. Kesimpulan
Stack adalah suatu koleksi atau kumpulan item data yang terorganisasi dalam bentuk
urutan linier, yang operasi pemasukan dan penghapusan datanya dilakukan pada salah
satu sisinya. Pada stack, jarang sekali dilakukan traversal, karena keunikan stack justru
pada operasi yang hanya menyangkut elemen TOP. Namun dibutuhkan traversal
misalnya untuk mencetak isi stack. Pada stack, elemen yang diproses hanya elemen
pada TOP. Maka hampir tidak pernah dilakukan search atau bersifat LIFO (Last In First
Out). Operasi-operasi pada Stack :
Create(Stack)Operasi Create(Stack) digunakan untuk membuat suatu stack baru dengan
nama stack, yang nilai elemen saat stack tersebut dibuat adalah NOEL(S) = 0, TOP(S) =
NULL (tidak terdefinisikan).IsEmpty(Stack)Operasi ini merupakan operasi untuk
mencek isi dari suatu stack dalam keadaan kosong atau berisi.Operasi ini memiliki
kondisi boolean yaitu :
Operasi ini merupakan operasi untuk menambahkan satu elemen dengan nilai X pada
puncak suatu stack, sehingga posisi TOP(S) akan bernilai X, penerapan operasi push
pasa suatu stack S akan berakibat overflow jika NOEL(S) dari stack tersebut telah
bernilai maksimum.
3.2. Saran
Penulis menyadari bahwa dalam pembuatan makalah ini masih banyak
kesalahan dan kekurangan, baik dari segi penulisan maupun dari segi pemaparan. Maka
dari itu pemakalah menerima dan mengharapkan kritik dan saran dari pembaca yang
sifatnya membangun, agar makalah ini dapat menjadi lebih baik dan menjadi rujukan
bagi pembaca nantinya
DAFTAR PUSTAKA
19
Aho , A., J.Hopcroft and J. Ulman, 1988, Data Structure and Algorithms, Adison Wesley
Bambang, W., 2004, Pengantar Struktur Data Dan Algoritma, Andi Yogyakarta
Brassard, G., and Bratley, P., 1996, Fundamentals of Algorithmics, Prentice Hall,
Englewood Cliffs, New Jersey.
Fadilah, R., 2008, Algoritma & Struktur Data,
http://rijalfadilah.files.wordpress.com
20