PRAKTIKUM ALGORITMA & PEMROGRAMAN III MODUL_06 Stack (Tumpukan) inslls_05@yahoo.co.id 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 merupakan elemen dasar dari stack dan S 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 S............................ X S S S merupakan nama dari stack. S merupakan elemen stack puncak dan S merupakan elemen dasar dari stack. Sedangkan X merupakan nilai yang akan dimasukan kedalam elemen stack. ALGORITMA & PEMROGRAMAN III 1
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 = 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 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); S.Top := 0; Function IsFull(S : Stack) : boolean; IsFull := (S.Top=Max); Function IsEmpty(S : Stack) : boolean; IsEmpty := (S.Top=0); ALGORITMA & PEMROGRAMAN III 2
1. Algoritma Push, merupakan pengisian elemen pada stack, misalkan kita akan mengisikan nilai dan 7 pada stack dengan Max = Top 5. Ilustrasi: Pada Pascal menjadi : Pada C++ menjadi : Push = 7 7 [2] Push = Procedure Push(Var S : Stack; X : integer); S.Top := S.Top + 1; S.isi[S.Top] := X; 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: Menjadi Pop 7 Catatan : Untuk penyimpanan file file pekerjaan anda, samakan dengan ketentuan pada modul modul sebelumnya..! ALGORITMA & PEMROGRAMAN III 3
Pada Pascal menjadi : Procedure Pop(Var S : Stack); S.isi[S.Top] := 0; S.Top := S.Top - 1; Pada C++ menjadi : void Pop(STACK S){ S.isi[S.Top] = 0; S.Top--; Procedue untukmenampilkan data dari stack : Procedure Menampilkan Stack di C++ C. Latihan Procedure Tampil(S : Stack); Var i : integer;????? void Tampil(){ For(int i=s.top;i>=0;i--){ printf( Data : %d\n,s.isi[i]); 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
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] Deklarasi TYPE Keluarga = record Nama : String; Umur : integer; Stack = record isi : array[1..max] of Keluarga; Top : integer 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