• Tidak ada hasil yang ditemukan

Struktur Data STACK

Dalam dokumen Pengenalan Algoritma dan Struktur Program (Halaman 35-48)

Sasaran Perkuliahan :

1) Mahasiswa dapat memahami mengenai stack

2) Mahasiswa dapat memahami istilah-istilah yang digunakan pada stack 3) Mahasiswa dapat memahami macam-macam stack

4) Mahasiswa dapat membuat program menggunakan stack

Stack terbagi kedalam dua macam, yaitu Single Stack dan Double Stack. 1. Single Stack

Single Stack disebut juga dengan tumpukan. Struktur data single stack ini dapat diilustrasikan seperti menyusun buku diatas meja. Seperti gambar berikut :

Dalam struktur stack dikenal dengan istilah PUSH, dan POP.

- PUSH adalah istilah yang digunakan untuk memasukkan, menyimpan, menulis atau menginsert data kedalam stack.

- POP adalah istilah yang digunakan untuk mengambil, membaca, mengeluarkan atau mendelete data dari stack.

- TOP adalah menunjukkan posisi elemen terakhir dari sebuah stack.

Prinsip yang digunakan pada stack adalah L I F O atau kepanjangan dari Last in First Out. Artinya data yang terakhir masuk kedalam stack, maka data tersebut akan pertama kali dikeluarkan dari stack.

Pada pemrograman, ilustrasi sebuah stack dapat dilihat dari gambar berikut yang menggunakan array 1 dimensi :

Dari gambar diatas dapat diketahui bahwa telah disiapkan sebuah array dengan nama S[]. Array tersebut mempunyai indeks sampai dengan 10. Artinya Array tersebut dapat menampung maksimal sampai dengan 10 data. Cara memasukkan dan mengambil data dari array tersebut menggunakan struktur Single Stack. Top menunjukkan posisi paling akhir dari elemen array yang mempunyai isi. Yang dimaksud dengan posisi terakhir adalah data yang dimasukkan terakhir kali, bukan yang pertama kali dimasukkan ke dalam array.

Beberapa kondisi yang dipunyai oleh single stack adalah sebagai berikut : a) Stack Kosong (IsEmpty)

Ciri stack dalam keadaan kosong adalah posisi Top kurang dari nol. Kondisi ini dapat dikatakan sebagai proses awal dari sebuah single stack. Dalam algoritma ciri stack kosong adalah :

Top = - 1

Stack kosong diilustrasikan sebagai berikut :

b) Stack Penuh (IsFull)

Ciri stack sudah dalam keadaan penuh adalah posisi Top berada pada indeks terakhir dari stack. Dalam algoritma ciri stack penuh adalah :

Top = n - 1

Stack penuh diilustrasikan sebagai berikut :

c) Stack dapat diisi

Ciri stack masih bisa diisi adalah posisi Top tidak berada pada indeks terakhir dari stack. Dalam Algoritma ciri stack masih bisa diisi adalah :

Top < n - 1

Algoritma & Struktur Data 1 - STMIK Atma Luhur 37 Okkita Rizan - Hamida

Atau :

d) Stack punya isi

Ciri stack masih mempunyai isi adalah posisi TOP tidak kurang dari nol. Dalam algoritma ciri stack masih mempunyai isi adalah :

Top > -1

Stack punya isi diilustrasikan sebagai berikut :

Atau :

Dari keempat kondisi pada stack tersebut mempengaruhi proses PUSH dan POP pada stack. - Pada proses PUSH, stack dapat disi apabila kondisi stack kosong dan bisa diisi.

Algoritma untuk proses PUSH adalah :

Top = Top + 1 ; S[Top] = X;

Pada saat stack penuh, maka proses PUSH tidak dapat dilakukan. Algoritma lengkap untuk proses PUSH adalah :

if ( Top < n-1 ) { Top = Top + 1; S[Top] = X; } else

Atau :

if ( Top == n-1 )

{ cout << “Stack Penuh”; else

{

Top = Top + 1; S[Top] = X; }

- Pada proses POP, stack dapat diambil isinya apabila kondisi stack penuh dan stack

punya isi. Algoritma untuk proses POP adalah :

X = S[Top] ; Top = Top - 1 ;

Pada saat stack kosong, maka proses POP tidak dapat dilakukan. Algoritma lengkap untuk proses POP adalah :

if ( Top < -1 ) { X = S[Top]; Top = Top - 1; } else

{ cout << “Stack Kosong”; }

Atau :

if ( Top == -1 )

{ cout << “Stack Kosong”; else

{

X = S[Top]; Top = Top - 1; }

Algoritma & Struktur Data 1 - STMIK Atma Luhur 39 Okkita Rizan - Hamida

Nama Program : singlestack.cpp

Penjelasan Program :

- Int S[n], proses deklarasi sebuah array satu dimensi dengan nama S[] dan bertipe data integer. Untuk indeks array tersebut menggunakan variabel n yang sudah dijadikan konstanta pada bagian #define n 7.

- Top = -1, merupakan proses inisialisasi awal pada stack. Perintah tersebut menandakan juga stack masih dalam keadaan kosong.

Output Program :

2. Double Stack

Double stack dapat diilustrasikan sebagai gabungan dua buah stack menggunakan array yang sama. Prinsip pada double stack sama dengan single stack yaitu LIFO (Last In First

Out) baik untuk stack yang pertama maupun stack yang kedua pada double stack tersebut.

Adapun ilustrasi dari double stack seperti gambar berikut ini :

Dari gambar tersebut dapat diketahui bahwa, stack mempunyai dua buah pointer TOP yaitu

Top1 dan Top2. Top1 mewakili stack yang pertama. Arah pergerakannya dari kiri ke kanan

(dari ilustrasi gambar diatas). Top2 mewakili stack yang kedua. Arah pergerakannya dari kanan ke kiri (dari ilustrasi gambar diatas).

Beberapa kondisi yang dimiliki oleh double stack adalah sebagai berikut : a) Double stack kosong (IsEmpty)

Ciri dari double stack kosong adalah posisi dari Top1 kurang dari nol dan Top2 berada di indeks trakhir dari stack. Kondisi ini dapat dikatakan sebagai proses awal (inisialisasi) dari sebuah double stack. Dalam Algoritma ciri double stack kosong adalah :

Top1 = - 1

Top2 = n

Double stack kosong diilustrasikan sebagai berikut :

b) Stack Penuh (IsFull)

Ciri double stack penuh apabila posisi Top1 dengan Top2 betul-betul bersebelahan atau dengan kata lain apabila Top2 dikurangi dengan Top1 hasilnya adalah 1. Dalam algoritma ciri double stack penuh adalah :

Top2 - Top1 = 1

Double stack penuh diilustrasikan sebagai berikut :

Algoritma & Struktur Data 1 - STMIK Atma Luhur 41 Okkita Rizan - Hamida

c) Stack dapat diisi

Ciri stack masih dapat diisi apabila posisi Top1 dengan Top2 tidak bersebelahan, atau apabila Top2 dikurangi dengan Top1 hasilnya tidak sama dengan 1 (satu), tepatnya lebih besar dari 1 (satu). Dalam algoritma ciri stack masih bisa diisi adalah :

Top2 - Top1 > 1

Double stack dapat diisi diilustrasikan sebagai berikut :

Atau : Atau : Atau : Top1 Top2 Top1 Top2 Top1 Top2 Top1 Top2 Top1 Top2

d) Stack punya isi

Ciri double stack masih mempunyai isi pada double stack memiliki beberapa ciri yaitu : - Top1 tidak kurang dari nol dan Top2 sama dengan indeks.

- Top1 sama dengan nol dan Top2 tidak sama dengan indeks. - Top1 tidak kurang dari nol dan Top2 tidak sama dengan indeks. Dalam algoritma ciri stack masih mempunyai isi adalah :

Top1 > -1 Top2 < n

Double stack punya isi diilustrasikan sebagai berikut :

Atau : Atau : Atau : Atau : Atau : Top1 Top2 Top1 Top2 Top2 Top1 Top1 Top2 Top1 Top2 Top1 Top2

Algoritma & Struktur Data 1 - STMIK Atma Luhur 43 Okkita Rizan - Hamida

Sama seperti single stack, kondisi tersebut juga mempengaruhi proses PUSH dan POP pada double stack.

a) PUSH

Proses PUSH dapat dilakukan selama stack dalam kondisi kosong atau masih dapat diisi. Algoritma dasar proses PUSH pada stack yang pertama adalah :

Top1 = Top1 + 1 ; S[Top1] = X;

Algoritma dasar proses PUSH pada stack yang kedua adalah :

Top2 = Top2 - 1 ; S[Top2] = X;

Proses PUSH tidak dapat dilakukan apabila stack dalam kondisi penuh. Algoritma lengkap untuk proses PUSH pada double stack adalah :

- Algoritma lengkap proses PUSH untuk stack yang pertama adalah

if ( Top2 - Top1 >1 ) { Top1 = Top1 + 1; S[Top1] = X; } else

{ cout << “Stack1 Penuh”; }

Atau :

if ( Top2 - Top1 == 1 ) {

cout << “Stack1 Penuh”; } else { Top1 = Top1 + 1; S[Top1] = X; }

- Algoritma lengkap proses PUSH untuk stack yang kedua adalah if ( Top2 - Top1 >1 ) { Top2 = Top2 - 1; S[Top2] = X; } else

{ cout << “Stack2 Penuh”; }

Atau :

if ( Top2 - Top1 == 1 ) {

cout << “Stack2 Penuh”; } else { Top2 = Top2 - 1; S[Top2] = X; } b) POP

Proses POP dapat dilakukan selama stack dalam kondisi penuh atau masih mempunyai isi. Algoritma dasar proses POP pada stack yang pertama adalah :

X = S[Top1] ; Top1 = Top1 - 1 ;

Algoritma dasar proses POP pada stack yang kedua adalah :

X = S[Top2] ; Top2 = Top2 + 1 ;

Algoritma & Struktur Data 1 - STMIK Atma Luhur 45 Okkita Rizan - Hamida

Proses POP tidak dapat dilakukan apabila stack dalam kondisi kosong. Algoritma lengkap untuk proses POP pada double stack adalah :

- Algoritma lengkap untuk proses POP stack yang pertama adalah :

if ( Top1 < -1 ) { X = S[Top1]; Top1 = Top1 - 1; } else {

cout << “Stack1 Kosong”; }

Atau :

if ( Top1 == -1 )

{ cout << “Stack1 Kosong”; else

{

X = S[Top1];

Top1 = Top1 - 1; }

- Algoritma lengkap proses POP stack yang kedua adalah :

if ( Top2 < n ) { X = S[Top2]; Top2 = Top2 + 1; } else {

cout << “Stack2 Kosong”; }

Atau :

if ( Top2 == n )

{ cout << “Stack2 Kosong”; else

{

X = S[Top2];

Top2 = Top2 + 1; }

Contoh program double stack adalah sebagai berikut : Nama Program : doublestack.cpp

Algoritma & Struktur Data 1 - STMIK Atma Luhur 47 Okkita Rizan - Hamida

Penjelasan Program :

- Double stack dibuat dengan nama S[] dengan elemen sebanyak 10.

- Proses PUSH pada stack yang pertama hanya dibatasi sebanyak 5 kali. Pada program algoritmanya : Top2 - Top1 > 1 && Top1 < 4.

- Proses PUSH pada stack yang kedua dilakukan selama stack belum penuh. Output Program :

Materi IX

Dalam dokumen Pengenalan Algoritma dan Struktur Program (Halaman 35-48)

Dokumen terkait