Anda di halaman 1dari 20

MAKALAH

STRUKTUR DATA STACK

Disusun Oleh:
DINA ULI AISYAH SITOMPUL (19076092)
IKA MELINIA SAFITRI (19076102)
AMELIA ZAHRA (19076083)

JURUSAN PEND. TEKNIK INFORMATIKA DAN


KOMPUTER
FAKULTAS TEKNIK
UNIVERSITAS NEGERI PADANG
2020

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

2.4. Macam – macam


stack.............................................................................................................7
2.5. Kelebihan dan kekurangan stack.............................................................................................7
2.6. Representasi Stack dengan array…………………………………………………………….8
2.6.1. Single Stack………………………………………………………………………8
2.6.2. Double
Stack…………………………………………………………………….10
2.7. Representasi Stack dengan Single Linked
List……………………………………………..12
2.8. Contoh Coding stack.............................................................................................................14
8
8
3.1. Kesimpulan............................................................................................................................18
8
DAFTAR PUSTAKA…………………………………………………………………..19

BAB I
PENDAHULUAN

1.1. Latar Belakang

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

1.2. Rumusan Masalah

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 ?

1.3.  Tujuan Penulisan


Sejalan dengan rumusan masalah diatas, makalah ini disusun dengan tujuan untuk
mengetahui :
1.  Definisi stack
2.  Operasi yang digunakan dalam stack
3.  Mendeklarasikan Stack
4. Macam – macam stack

4
5. Kelebihan dan kekurangan stack
6. Contoh Coding stack

1.4.  Manfaat Penulisan


Sejalan dengan tujuan diatas, makalah ini disusun dengan manfaat untuk menambah
pengetahuan mengenai :
1.  Definisi stack
2.  Operasi yang digunakan dalam stack
3.  Mendeklarasikan Stack
4. Macam – macam stack
5. Kelebihan dan kekurangan stack
6. Contoh Coding stack

BAB II
PEMBAHASAN

2.1. Definisi Stack

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).

2.2. Operasi yang digunakan dalam Stack

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.

2.3. Mendeklarasikan Stuck

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.

2.4. Macam – macam dari Stack

1. Stack dengan Array

Sesuai dengan sifat stack, pengambilan atau penghapusan elemen dalam stack harus
dimulai dari elemen teratas.

2. Double Stack dengan Array


Metode ini adalah teknik khusus yang dikembangkan untuk menghemat pemakaian
memori dalam pembuatan dua stack dengan array. Intinya adalah penggunaan hanya
sebuah array untuk menampung dua stack.

2.5. Kelebihan dan kekurangan stack

Kelebihan stack yaitu penambahan dan penghapusan data dapat dilakukan


dengan cepat, yaitu selama memori masih tersedia penambahan data bisa terus
dilakukan. Dengan demikian tidak ada kekuatiran terjadinya stack overflow.
Kekurangan stack yaitu setiap sel tidak hanya menyimpan value saja, melainkan
juga pointer ke sel berikutnya. Hal ini menyebabkan implementasi stack memakai
linked list akan memerlukan memori yang lebih banyak daripada di implementasikan
dengan array. Setiap halaman pada linked list hanya bisa di akses dengan cara
sekuensial, sehingga lambat.

2.6. Representasi Stack dengan array

Bentuk penyajian stack menggunakan tipe data array sebenarnya kurang


tepat karena banyaknya elemen dalam array bersifat statis, sedangkan jumlah
elemen stack sangat bervariasi atau dinamis. Meskipun demikian, array dapat
digunakan untuk penyajian stack, tetapi dengan anggapan bahwa banyaknya

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.

2.6.1. Single 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 :

(1) Pendeklarasian stack

Proses pendeklarasian stack adalah proses pembuatan struktur stack dalam


memori. Suatu stack memiliki beberapa bagian yaitu :

a. top yang menunjuk posisi data terakhir (TOP)

b. elemen yang berisi data yang ada dalam stack. Bagian ini lah yang
berbentuk array.

c. maks_elemen yaitu variable yang menunjuk maksimal banyaknya


elemen dalam stack.

(2) Inisialisasi

Inisialisasi stack adalah proses pembuatan suatu stack kosong.


Proses inisialisasi untuk stack yang menggunakan array adalah dengan
mengisi nilai field top dengan 0 (nol).

(3) Operasi IsEmpty

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.

(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 top sama
dengan field maks_elemen.

(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. 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.

2.6.2. Double Stack


Double stack merupakan bentuk pengembangan single stack dengan maksud untuk
menghemat memori. Dalam double stack terdapat dua stack dalam satu array. Stack 1
bergerak ke kanan dan stack 2 bergerak ke kiri. Double stack dikatakan penuh apabila
puncak stack 1 bertemu dengan puncak stack 2.

Operasi-operasi stack pada single stack secara lengkap adalah sebagai berikut :

(1) Pendeklarasian stack


a. Top1 yang menunjuk posisi data terakhir (top1)
b. Top2 yang menunjuk posisi data terakhir (top2)
c. elemen yang berisi data yang ada dalam stack. Bagian ini lah yang
berbentuk array.
d. maks_elemen yaitu variable yang menunjuk maksimal banyaknya
elemen dalam stack.

(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.

2.7. Representasi Stack dengan Single Linked List

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 :

(1) Pendeklarasian stack

Proses pendeklarasian stack menggunakan single linked list, hanya memerlukan


suatu pointer yang menunjuk ke data terakhir. Setiap elemen linked list mempunyai 2
field yaitu datanya dan link yang menunjuk posisi terakhir sebelum proses push
seperti terlihat 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.

(3) Operasi IsEmpty

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).

(4) Operasi IsFull

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.

(5) Operasi Push

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.

2.8. Contoh Coding

#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 :

 True jika stack tersebut kosong atau dapat dikatakan NOEL(S) = 0.


 False jika stack tersebut tidak dalam kondisi kosong atau dapat dikatakan
NOEL(S)
 Push(Stack, Elemen)

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

Anda mungkin juga menyukai