Operasi – Operasi Utama dalam Double Stack
Hand Out Advance Programming
by Gregorius Hendita Artha Kusuma,S.Si
DOUBLE STACK
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 :
Top 1
Top 2
Stack 1
Stack 2
maksimal
awal dari kiri ke kanan
dari kanan ke kiri
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
char data[5] [MAX]; /* data adalah array of string berjumlah 12 data,
masing-masing string menampung maksimal 5 karakter */
1
Hand Out Advance Programming
by Gregorius Hendita Artha Kusuma,S.Si
};
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
Top 1
Top 2
Stack 1
Stack 2
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 )
2
Hand Out Advance Programming
by Gregorius Hendita Artha Kusuma,S.Si
Ilustrasi
Top 1
Top 2
A B C D E F G H I J K L
Stack 1
Stack 2
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.
3
Hand Out Advance Programming
by Gregorius Hendita Artha Kusuma,S.Si
Ilustrasi
Top 1
Top 2
Stack 1
Stack 2
Listing Program
int IsEmpty ( int nomorstack )
{
switch (nomorstack)
// nomorstack digunakan untuk mendefinisikan
apakah yang dipilih stack 1 atau 2
{
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;
}
4
Hand Out Advance Programming
by Gregorius Hendita Artha Kusuma,S.Si
}
4. Push
Prinsip Utama : menambahkan sebuah item ( elemen / data ) pada salah satu
stack ( tumpukan ), dengan syarat apabila stack tidak dalam
keadaan full ( penuh ). Jika dalam keadaan full, item
ditambahkan maka stack akan mengalami overflow.
Algoritma
–
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.
–
Jika yang dipilih bukan 1 atau 2, maka tampilkan pesan bahwa tidak bisa
dilakukan operasi PUSH.
Ilustrasi
0 1
2 3
Top 1
4 5 6
7 8
Top 2
9 10 11
A B C D E F
Stack 2
Stack 1
0 1
2 3
L
Top 1
4 5 6
7 8
Top 2
9 10 11
A B C D E F
Stack 1
L
Stack 2
5
PUSH K
Hand Out Advance Programming
by Gregorius Hendita Artha Kusuma,S.Si
0 1
Top 1
4 5 6
2 3
7 8
Top 2
9 10 11
A B C D E F
Stack 1
K L
Stack 2
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
6
Hand Out Advance Programming
by Gregorius Hendita Artha Kusuma,S.Si
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.
–
Jika yang dipilih 2, berarti akan menghapus data pada ujung stack2, yaitu
dengan cara definisikan terlebih dahulu top2 dengan variabel ambil untuk
mengambil data yang paling atas dari stack2 dan kemudian tambahkan nilai
top2 dengan 1.
–
Jika yang dipilih bukan 1 atau 2, maka tampilkan pesan bahwa tidak bisa
dilakukan operasi POP.
Ilustrasi
0 1
2 3
Top 1
4 5 6
7 8
Top 2
9 10 11
A B C D E F
Stack 1
0 1
2 3
K L
Stack 2
Top 1
4 5 6
7 8
Top 2
9 10 11
A B C D E F
Stack 1
POP
L
Stack 2
7
K
Hand Out Advance Programming
by Gregorius Hendita Artha Kusuma,S.Si
0 1
Top 1
4 5 6
2 3
Top 2
9 10 11
7 8
A B C D E F
Stack 1
L
Stack 2
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”);
}
}
8
Hand Out Advance Programming
by Gregorius Hendita Artha Kusuma,S.Si
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
dibaca
Top 1
Top 2
dibaca
A B C D E F G H I J K L
Stack 1
Stack 2
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-- )
{
printf(“ Data : % s “, tumpukan.data[b] );
}
9
Hand Out Advance Programming
by Gregorius Hendita Artha Kusuma,S.Si
}
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
Top 1
Top 2
Stack 1
Stack 2
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;
}
}
10
Hand Out Advance Programming
by Gregorius Hendita Artha Kusuma,S.Si
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 ).
3. Laporan dikumpul hari kamis.
11
by Gregorius Hendita Artha Kusuma,S.Si
DOUBLE STACK
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 :
Top 1
Top 2
Stack 1
Stack 2
maksimal
awal dari kiri ke kanan
dari kanan ke kiri
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
char data[5] [MAX]; /* data adalah array of string berjumlah 12 data,
masing-masing string menampung maksimal 5 karakter */
1
Hand Out Advance Programming
by Gregorius Hendita Artha Kusuma,S.Si
};
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
Top 1
Top 2
Stack 1
Stack 2
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 )
2
Hand Out Advance Programming
by Gregorius Hendita Artha Kusuma,S.Si
Ilustrasi
Top 1
Top 2
A B C D E F G H I J K L
Stack 1
Stack 2
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.
3
Hand Out Advance Programming
by Gregorius Hendita Artha Kusuma,S.Si
Ilustrasi
Top 1
Top 2
Stack 1
Stack 2
Listing Program
int IsEmpty ( int nomorstack )
{
switch (nomorstack)
// nomorstack digunakan untuk mendefinisikan
apakah yang dipilih stack 1 atau 2
{
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;
}
4
Hand Out Advance Programming
by Gregorius Hendita Artha Kusuma,S.Si
}
4. Push
Prinsip Utama : menambahkan sebuah item ( elemen / data ) pada salah satu
stack ( tumpukan ), dengan syarat apabila stack tidak dalam
keadaan full ( penuh ). Jika dalam keadaan full, item
ditambahkan maka stack akan mengalami overflow.
Algoritma
–
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.
–
Jika yang dipilih bukan 1 atau 2, maka tampilkan pesan bahwa tidak bisa
dilakukan operasi PUSH.
Ilustrasi
0 1
2 3
Top 1
4 5 6
7 8
Top 2
9 10 11
A B C D E F
Stack 2
Stack 1
0 1
2 3
L
Top 1
4 5 6
7 8
Top 2
9 10 11
A B C D E F
Stack 1
L
Stack 2
5
PUSH K
Hand Out Advance Programming
by Gregorius Hendita Artha Kusuma,S.Si
0 1
Top 1
4 5 6
2 3
7 8
Top 2
9 10 11
A B C D E F
Stack 1
K L
Stack 2
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
6
Hand Out Advance Programming
by Gregorius Hendita Artha Kusuma,S.Si
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.
–
Jika yang dipilih 2, berarti akan menghapus data pada ujung stack2, yaitu
dengan cara definisikan terlebih dahulu top2 dengan variabel ambil untuk
mengambil data yang paling atas dari stack2 dan kemudian tambahkan nilai
top2 dengan 1.
–
Jika yang dipilih bukan 1 atau 2, maka tampilkan pesan bahwa tidak bisa
dilakukan operasi POP.
Ilustrasi
0 1
2 3
Top 1
4 5 6
7 8
Top 2
9 10 11
A B C D E F
Stack 1
0 1
2 3
K L
Stack 2
Top 1
4 5 6
7 8
Top 2
9 10 11
A B C D E F
Stack 1
POP
L
Stack 2
7
K
Hand Out Advance Programming
by Gregorius Hendita Artha Kusuma,S.Si
0 1
Top 1
4 5 6
2 3
Top 2
9 10 11
7 8
A B C D E F
Stack 1
L
Stack 2
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”);
}
}
8
Hand Out Advance Programming
by Gregorius Hendita Artha Kusuma,S.Si
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
dibaca
Top 1
Top 2
dibaca
A B C D E F G H I J K L
Stack 1
Stack 2
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-- )
{
printf(“ Data : % s “, tumpukan.data[b] );
}
9
Hand Out Advance Programming
by Gregorius Hendita Artha Kusuma,S.Si
}
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
Top 1
Top 2
Stack 1
Stack 2
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;
}
}
10
Hand Out Advance Programming
by Gregorius Hendita Artha Kusuma,S.Si
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 ).
3. Laporan dikumpul hari kamis.
11