• Tidak ada hasil yang ditemukan

Operasi – Operasi Utama dalam Double Stack

N/A
N/A
Protected

Academic year: 2018

Membagikan "Operasi – Operasi Utama dalam Double Stack"

Copied!
11
0
0

Teks penuh

(1)

Pengertian

Double stack merupakan bentuk pengembangan dari single stack. Hal ini dilakukan untuk dapat penghematan memori dalam komputer.

Prinsip utamanya : 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.

Ilustrasi :

Pendeklarasian Double Stack

a. Definisikan terlebih dahulu stack ( tumpukan ) dengan tipe data struct. #define MAX 12

dalam pemrograman bahasa C data dimulai dari 0. Jadi untuk max 12, berarti dapat menyimpan data dari 0 – 11.

b. Definisikan ujung dari stack 1 ( top1 ) dan ujung dari stack 2 ( top2 ) beserta jumlah maksimum untuk menyimpan banyaknya data yang akan diletakkan dalam double stack.

typedef struct STACK {

int top1; // untuk mendefiniskan ujung dari stack 1 int top2; // untuk mendefiniskan ujung dari stack2

DOUBLE STACK

Top 1

Stack 1 Stack 2

Top 2

(2)

};

c. Membuat variabel yang bertipe data STACK, yang berfungsi untuk mengimplementasikan stack dengan array secara nyata

STACK tumpukan;

Operasi – Operasi Utama dalam Double Stack

1. Inisialisasi Double Stack

Prinsip Utama : membuat double stack baru yang masih kosong.

Algoritma

- Definisikan untuk top1 sama dengan 0 dan top2 = max - 1. Ilustrasi

Listing Program

void Inisialisasi( ) {

tumpukan.top1 = 0; tumpukan.top2 = MAX - 1; }

2. Full

Prinsip Utama : mengecek apakah stack ( tumpukan ) dalam keadaan penuh

atau tidak. Algoritma

– Mengecek apakah bagian atas dari stack 1 ( TOP1 ) ditambah 1 sama dengan atau lebih besar dari jumlah bagian atas dari stack 2 ( TOP 2 )

Stack 1 Stack 2

(3)

Ilustrasi

Listing Program

int IsFull( void ) {

if ( top1 + 1 >= top2 ) {

return 1; }

else {

return 0; }

} 3. Empty

Prinsip Utama : mengecek apakah stack ( tumpukan ) dalam keadaan kosong

atau tidak. Ada dua buah kondisi yang harus dilihat : kondisi dari ujung stack1 ( top1 ) apakah sama dengan 0 dan kondisi dari ujung stack 2 ( top2 ) apakah sama dengan jumlah maksimal dari stack + 1.

Algoritma

– Mengecek apakah bagian atas dari stack1 ( top1 ) sama dengan 0 atau tidak

dan mengecek apakah bagian atas dari stack2 ( top2 ) sama dengan MAX - 1 atau tidak.

Top 1

C D E B

A F

Stack 1

Top 2

I J K H

G L

(4)

Ilustrasi

Listing Program

int IsEmpty ( int nomorstack )

{ switch (nomorstack)

{

case 1: if (top1==0) {

return 1; }

else {

return 0; }

break;

case 2: if (top2==MAX-1) {

return 1; }

else {

return 0; }

break;

default: printf(“Tidak bisa dilakukan operasi EMPTY \n”); break;

}

// nomorstack digunakan untuk mendefinisikan apakah yang dipilih stack 1 atau 2

Top 1

Stack 2 Stack 1

(5)

}

– Cek apakah stack dalam keadaan full atau tidak.

– Jika iya, tampilkan pesan bahwa stack overflow.

– Jika tidak,maka cek di stack mana data akan ditambahkan ( dengan variabel nomorstack ).

– Jika yang dipilih 1, berarti akan menambahkan data pada stack 1, yaitu dengan cara menambahkan nilai top1 dengan 1 dan masukkan item dalam posisi top1. Item yang baru dimasukkan akan menjadi top of stack1.

– Jika yang dipilih 2, berarti akan menambahkan data pada stack 2, yaitu dengan cara mengurangkan nilai top2 dengan 1 dan masukkan item dalam posisi top2. Item yang baru dimasukkan akan menjadi top of stack2.

(6)

Listing Program

Push ( char databaru, int nomorstack ) {

if ( IsFull( ) != 1 ) {

switch ( nomorstack ) {

case 1 : tumpukan.top1 ++;

tumpukan.data[tumpukan.top] = databaru; break;

case 2 : tumpukan.top2 --;

tumpukan.data[tumpukan.top] = databaru; break;

default : printf(“Tidak bisa dilakukan Operasi PUSH \n”); break;

} } else

{

printf(“ Stack dalam keadaan Overflow ( Penuh ).\n”); }

}

5. Pop

Prinsip Utama : mengambil sebuah item ( elemen / data ) pada salah satu

Top 2 Top 1

C D E B

A F

Stack 1

L

0 1 2 3 4 5 6 7 8 9 10 11

K

(7)

tumpukan stack yang paling atas ( TOP ), dengan syarat apabila stack tidak dalam keadaan empty ( kosong ). Jika dalam keadaan empty tetap dilakukan operasi POP, maka stack akan mengalami underflow.

Algoritma

– Cek apakah stack dalam keadaan empty atau tidak.

– Jika iya, tampilkan pesan bahwa stack underflow.

– Jika tidak,maka cek di stack mana data akan dihapus ( dengan variabel nomorstack ).

– Jika yang dipilih 1, berarti akan menghapus data pada ujung stack1, yaitu dengan cara definisikan terlebih dahulu top1 dengan variabel ambil untuk mengambil data yang paling atas dari stack1 dan kemudian kurangkan nilai top1 dengan 1.

(8)

Listing Program

Push ( char databaru, int nomorstack ) {

if ( IsEmpty( nomorstack ) != 1 ) {

switch ( nomorstack ) {

case 1 : ambil = tumpukan.data[tumpukan.top] ; tumpukan.top1 --;

return ( ambil ); break;

case 2 : ambil = tumpukan.data[tumpukan.top] ; tumpukan.top2 ++;

return ( ambil ); break;

default : printf(“Nomor stack invalid\n”); break;

} } else

{

printf(“ Stack dalam keadaan Underflow ( Kosong ).\n”); }

}

Top 2 Top 1

C D E B

A F

Stack 1

L

0 1 2 3 4 5 6 7 8 9 10 11

(9)

6. Cetak

Prinsip Utama : mencetak setiap item ( elemen / data ) pada tumpukan, untuk stack1 bisa dimulai item yang paling atas ( top1 ) dan untuk stack2 bisa dimulai item yang paling atas ( top2 ).

Algoritma

– Lakukan proses mencetak stack1 dengan perulangan secara menurun dari nilai top, untuk mencetak setiap item ( data ) dari top sampai ke – 0. Kemudian baru dicetak untuk stack 2 dengan perulangan secara menurun dari nilai maksimum, untuk mencetak setiap item ( data ) dari max sampai ke top2.

Ilustrasi

Listing Program

void Cetak ( ) {

printf(“ Isi dari Stack 1 : \n ”);

for ( int a = tumpukan.top1 ; a >= 0 ; a-- ) {

printf(“ Data : % s “, tumpukan.data[a] ); }

printf(“ Isi dari Stack 2 : \n ”);

for ( int b = MAX; b >= tumpukan.top2 ; b-- ) {

Top 1

C D E B

A F

Stack 1

Top 2

I J K H

G L

(10)

}

7. Clear

Prinsip Utama : mengosongkan salah satu stack ( tumpukan ). Algoritma

– Jika yang dikosongkan stack 1, maka buat top of stack1 ( top1 ) = 0

– Jika yang dikosongkan stack 2, maka buat top of stack2 ( top2 ) = maksimum

- 1.

Ilustrasi

Listing Program

Clear ( int nomorstack ) {

switch ( nomorstack ) {

case 1 : tumpukan.top1 = 0; break;

case 2 : tumpukan.top2 = MAX - 1; break;

default : printf(“Tidak bisa dilakukan Operasi CLEAR \n”); break;

} }

Top 1

Stack 2 Stack 1

(11)

Tugas Kelompok

1. Cari dan Diskusikan contoh kasus untuk aplikasi Single Stack atau Double Stack. Untuk Kelompok Ganjil : Double Stack dan untuk Kelompok Genap : Single Stack. Setiap Kelompok Kasusnya harus berbeda.

2. Laporan terdiri dari : a. deskripsi Kasus

b. Analisa kasus ( apa permasalahannya, bagaimana algoritma penyelesaiannya, bagaimana penerapan dengan Stack, sertakan ilustrasi dengan gambar ).

Referensi

Dokumen terkait