PRAKTIKUM ALGORITMA & PEMROGRAMAN III MODUL_06 – Stack (Tumpukan)
[email protected]
A. Pembahasan Stack Algoritma stack merupakan struktur data yang mengimplementasi dari aturan LIFO (Last In First Out). Jadi elemen yang dimasukan terakhir berada di atas (top). Stack dapat direpresentasikan dengan type data array, pointer (list), atau cursor. Operasi – operasi yang terdapat pada Stack : 1. Create, membuat stack baru (dengan nilai 0) 2. IsEmpty, mengecek apakah stack kosong (null) 3. IsFull, mengecek apakah stack penuh(null) 4. Push, memasukan elemen pada stack 5. Pop, menghapus elemen pada stack 6. Dan lain‐lain silakan di eksplorasi. Jika stack direpresentasikan dengan array, maka elemen dari stack S[1..Top]. s[1] merupakan elemen dasar dari stack dan S[Top] merupakan elemen puncak atau paling atas dari stack. jika nilai dari Top = 0 berarti stack kosong, sebaliknya jika Top = Max berarti stack penuh. Dimana Max merupakan jumlah elemen yang dapat ditampung dalam stack. Ilustrasi
X
S
S merupakan nama dari stack. S[Top] merupakan elemen stack puncak dan S[1] merupakan elemen dasar dari stack.
S[Top]
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sedangkan X merupakan nilai yang akan dimasukan kedalam elemen stack.
S[1]
ALGORITMA & PEMROGRAMAN III
1
MODUL06 – Stack (Tumpukan)
B. Implementasi Bentuk implementasi pada array berarti elemen pertama disimpan pada indeks ke‐1, berikutnya jika ada elemen kedua disimpan pada indeks ke‐2 seterusnya sampai batas Max stack habis, berarti S[Top] = Max. Sebaliknya jika ada elemen yang akan dihapus penghapuasnnya dimulai dari elemen paling atas dan jika akan melakukan penghapusan lagi bergerak kebawah dari elemen stacknya. Deklarasi Stack di Pascal : CONST
Max = 5; TYPE
Stack = record isi : array[1..Max] of integer; Top : integer end;
Var S : Stack;
Deklarasi Stack di C++ :
#define MAX_STACK 10 typedef struct STACK{
int isi[MAX_STACK];
int Top;
}; STACK S; Tambahan Procedure dan Fungsi untuk stack :
Procedure BuatStack(Var S : Stack); Begin S.Top := 0; End; Function IsFull(S : Stack) : boolean; Begin IsFull := (S.Top=Max); End; Function IsEmpty(S : Stack) : boolean; Begin IsEmpty := (S.Top=0); End;
ALGORITMA & PEMROGRAMAN III
2
MODUL06 – Stack (Tumpukan)
1. Algoritma Push, merupakan pengisian elemen pada stack, misalkan kita akan mengisikan nilai 14 dan 7 pada stack dengan Max = Top 5. Ilustrasi:
[Top]
[Top]
Push = 7
Push = 14
14
[1]
7
[2]
14
[1]
Pada Pascal menjadi :
Procedure Push(Var S : Stack; X : integer); Begin S.Top := S.Top + 1; S.isi[S.Top] := X; End;
Pada C++ menjadi : void Push(STACK S, int X){ S.Top++; S.isi[S.Top] = X; }
2. Algoritma Pop, merupakan penghapusan elemen pada stack, misalkan kita akan mengeluarkan satu elemen dari stack. Ilustrasi:
[Top]
[Top]
Menjadi
Pop
7 14
[1]
14
[1]
Catatan : Untuk penyimpanan file‐file pekerjaan anda, samakan dengan ketentuan pada modul‐modul sebelumnya..! ALGORITMA & PEMROGRAMAN III
3
MODUL06 – Stack (Tumpukan)
Pada Pascal menjadi :
Procedure Pop(Var S : Stack); Begin S.isi[S.Top] := 0; S.Top := S.Top - 1; End;
Pada C++ menjadi : void Pop(STACK S){ S.isi[S.Top] = 0; S.Top--; }
Procedue untukmenampilkan data dari stack :
Procedure Tampil(S : Stack); Var i : integer; Begin
?????
End;
Procedure Menampilkan Stack di C++
void Tampil(){ For(int i=S.Top;i>=0;i--){ printf(“Data : %d\n“,S.isi[i]); } }
C. Latihan
1. Pada procedure diatas buat ke dalam satu program. 2. Modifikasi program yang telah dibuat pada latihan 1 agar dapat menerima inputar berupa karakter / string. 3. Buat procedure untuk dapat mencari nilai rata‐rata dari jumlah elemen pada stack (type elemen pada stack berupa integer). Gunakan sisa waktu untuk bertanya kepada Asisten. jika masih tidak mengerti mengenai
Algoritma Stack
ALGORITMA & PEMROGRAMAN III
4
MODUL06 – Stack (Tumpukan)
D. Soal – Soal 1. Buat sebuah program yang dapat melakukan push, pop, dan menampilkan datanya pada bahasa C++ (Lihat procedure‐procedure diatas). inputan data berupa integer 2. Buat program stack dengan pascal menggunakan type data pointer(list). program dapat melakukan push, pop, dan menampilkn datanya. 3. Buat Program Untuk dapat mengecek apakah kata yang dimasukan termasuk POLINDROM atau bukan 4. Buat program pada pascal yang dapat menampung data‐data keluarga (field data keluarga bebas minimal 2 field), Max data yang dapat ditampung 10. Ilustrasi
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
[Field_nama]
[Field_umur]
[Field_nama]
[Field_umur]
[Top]
[1]
Deklarasi
TYPE Keluarga = record Nama : String; Umur : integer; end; Stack = record isi : array[1..Max] of Keluarga; Top : integer end;
Soal diatas 1 ‐ 4 kerjakan dirumah kemudian kirimkan melalui E‐mail. ketentuannya samakan dengan pengiriman E‐Mail sebelumnya. Paling lambat 5 hari setelah praktikum hari ini pukul 12:00.
“Diam bukan berarti tidak mengetahui apa‐apa”
ALGORITMA & PEMROGRAMAN III
5