hasil praktikum struktur data (stack)

Click here to load reader

Post on 15-Nov-2015

27 views

Category:

Documents

2 download

Embed Size (px)

TRANSCRIPT

LAPORAN RENCANA PRAKTIKUMSTRUKTUR DATA

Nama: YOPI LALANIM: DBC 113 016Kelas: GModul: I (STACK)

JURUSAN TEKNIK INFORMATIKAFAKULTAS TEKNIKUNIVERSITAS PALANGKA RAYA2014BAB ITUJUAN DAN LANDASAN TEORI

A. Tujuan praktikum1. Mahasiswa mampu memahami konsep stack.2. Mahasiswa mampu mengimplementasikan stack untuk memecahkan masalah tertentu.

B. Landasan teoriStack atau tumpukan bisa di artikan sebagai kumpulan data seolah-olah di letakan di atas data yang lain. Satu hal yang perlu di ingat bahwa kita bisa menambah (menyisipkan) data dan mengambil (menghapus) data melalui ujung yang sama, yang di sebut sebagai ujung atas stack. Secara sederhana, sebuah stack bisa di ilustrasikan seperti gambar di bawah ini :FAtas (Top)

E

D

C

B

A

Dari gambar di atas, bisa di lihat bahwa kotak B terletak di atas kotak A dan di bawah kotak C. Kotak D terletak di atas kotak C, kotak E terletak di atas kotak D dan seterusnya sampai kotak terakhir. Dari gambar di atas menunjukkan bahwa kotak lewat satu ujung, yaitu bagian atas. Apabila ada kotak lain yang akan di sisipkan, maka kotak tersebut akan di letakan di atas kotak F, dan jika ada kotak yang akan di ambil, maka kotak F yang di ambil untuk pertama kali.

Dengan demikian stack adalah struktur data yang menggukan konsep Last In First Out (LIFO) dan bersifat dinamis dimana data bisa di tambah maupun diambil.Stack dapat dideklarasikan dengan sebuah record yang mempunyai elemen sebuah array tabelemen untuk menyimpan elemen stack dan sebuah variabel top untuk menunjuk sebuah elemen stack teratas. Deklarasi sebagai berikut :ConstNMAX=. . . .;{ukuran maksimum stack}NULL= 0;{penunjuk stack kosong}TypeTipedata = . . . .; {tipe data yang di simpan dalam stack}Stack = recordTabelelemen : array [1 . . NMAX] of tipedataTop : NULL . . . NMAX; {top dari stack}End;

Operasi pada stack 1. Operasi PushPerintah push digunakan untuk memasukkan data ke dalam stack Untuk lebih jelasnya perhatikan ilustrasi berikut ini. Misalkan kita mempunyai data-data 3, 25 dan 9 dalam stack dengan posisi 3 paling bawah dan 9 paling atas. Dan kita akan memasukkan data 34 ke dalam stack tersebut. Tentu saja data 34 akan diletakkan diatas data 9.9253Push (34)349253

Prosesnya dari opersi push dapat dilihat pada penggalan program berikut ini :Procedure PUSH (var T : Tumpukan; X : integer);begin if T.Atas = MaxElemen thenwriteln (TUMPUKAN SUDAH PENUH) else beginT.Atas := T.Atas + 1; T.Isi[T.Atas] := X endend;

2. Operasi PopOperasi pop adalah operasi untuk menghapus elemen yang terletak pada posisi paling atas dari sebuah tumpukan. Sama halnya dengan operasi push, maka dengan deklarasi tumpukan seperti diatas, prosedur untuk operasi pop bisa dengan mudah kita implementasikan, yaitu :Procedure POP (var T : Tumpukan);begin if T.Atas = 0 then writeln (TUMPUKAN SUDAH KOSOSNG) else T.Atas := T.Atas 1end;

Pemanfaatan StackSalah satu pemanfaatan stack adalah untuk menulis ungkapan dengan menggunakan notasi tertentu. Seperti kita ketahui, dalam penulisan ungkapan numeris, kita selalu menggunakan tanda kurung untuk mengelompokkan bagian mana yang akan dikerjakan terlebih dahulu.Sebagai contoh, perhatikan ungkapan berikut ini :(C+D) *(E-F)Dari contoh diatas (C+D) akan dikerjakan lebih dahulu, kemudian baru (E-F) dan hasilnya akan dikalikan.Lain halnya dengan contoh berikut ini : C+D*E-FD*E akan dikerjakan terlebih dahulu, kemudian diikuti yang lain. Dalam hal ini pemakaian tanda kurung sangat penting karena akan mempengaruhi hasil akhir.Cara penulisan ungkapan sering disebut dengan notasi infix, yang artinya bahwa operator ditulis diantara 2 operand. Bisa dirubah kedalam notasi prefix, yang artinya adalah bahwa operator ditulis sebelum kedua operand yang akan disajikan.Perhatikan contoh dari notasi infix dan prefix berikut ini :InfixPrefixA+B+ABA+B-C-+ABC(A+B)*(C-D)*+AB-CDSecara sederhana, proses konversi dari infix dapat dijelaskan sebagai berikut :Misalkan ungkapan yang akan dikonversikan adalah sebagai berikut : (A+B)*(C-D)Dengan menggunakan tanda kurung bantuan, ungkapan diatas dapat ditulis menjadi :(+AB)*(-CD)Jika (+AB), kita umpamakan P dan (-CD) sebagai Q, maka ungkapan diatas dapat ditulis : P*Q. Selanjutnya, notasi infix diatas diubah menajdi notasi prefix : *PQ. Dengan mengembalikan P dan Q pada notasinya semula dan menghapus tanda kurung bantuan, kita dapat memperoleh notasi prefix dari persamaan (A+B)*(C-D), yaitu : *+AB-CD.Notasi lain, yang merupakan kebalikan dari notasi prefix adalah notasi postfix. Dalam hal ini operator ditulis sesudah operand. Sama halnya dengan notasi prefix, maka notasi postfix dapat menggunakan tanda kurung bantuan.Perhatikan contoh dari notasi infix dan postfix berikut ini :InfixPostfix16 / 216 2 /(2 + 14) * 52 14 + 5 *2 + 14 * 52 14 5 * +(6 2) * (5 + 4)6 2 5 4 + *Perhatikan ilustrasi yang menggambarkan penggunaan notasi postfix dalam stack. Contohnya adalah 2 14 + 5 * = 80

Pop 14 push 5pop 3Push 2 Pop 2 pop 16Push 14 Push 2 + 14 = 16 push 16 * 5 = 80 pop answer 80

514

8016122

Implementasi stack :1. Inisialisasi, adalah proses untuk membuat stack dalam keadaan kosong. Proses ini di lakukan dengan mengisi variabel top dengan nilai yang tidak menunjuk salah satu elemen array.

Procedure inisialisasi ( var S : stack);BeginS. Top := Null;End;

2. Empty/kosong, adalah operasi untuk mengetahui status stack, yaitu kosong atau tidak .Function empty (S : stack) : Boolean;{mengirim nilai true jika S adalah stack kosong}BeginEmpty := (S.Top=NMAX);End;3. Full/penuh, adalah operasi untuk mengetahui status stack , yang kosong atau tidak.

Function full (S : stack) : Boolean;{mengirim nilai true jika S adalah stack penuh}Beginfull := (S.Top=NMAX);End;4. Pop, dengan mempertimbangkan seleksi awal terhadap kondisi stack yaitu hanya berlaku untuk stack yang tidak kosong. Procedure POP (var S : Stack; var data : tipedata); {IS : s adalah stack yang tidak kosong} {FS : elemen top dari stack S yang di hapus dan di Simpan didata} BeginIf Not empty (S) ThenBegin data := S.tabelemen [S.Top];S.Top := S.Top-1;End;ElseData := . . ; {isi suatu nilai yang kemungkinan bukan data}

End; 5. Push, dengan mempertimbangkan seleksi awal terhadap kondisi stack yaitu menghindari overflow.Procedure Push (var S : Stack; var data : tipedata); {IS : S adalah stack yang belum penuh, data terdefenisi} {FS : data menjadi elemen top dari stack S} BeginIf Not full (S) ThenBegin S. Top := S.Top + 1;S. tabelemen [S. Top] := data;End;End;Tugas praktikum :1. Buatlah program menggunakan prinsip tumpukan (stack) dan beri tiga pilihan : push. pop, dan quit. Jika di pilih push program akan meinta user menginput sebuah kata, di mana maksimal 6 karakter jika lebih dari 6 karakter akan muncul pesan kesalahan. Jika di pilih pop maka karakter teratas akan di keluarkan, bila belum ada kata yang dimasukan waktu memilih pop akan tampil pesan kesalahan. Jika di pilih quit maka program selesai.Output :Pilihan :1. Push2. Pop3. QuitPilihan [1/2/3] = 1Masukan Kata = DataHasil Push : Data`

BAB IILANGKAH KERJABuatlah program menggunakan prinsip tumpukan (stack) dan beri tiga pilihan : push. pop, dan quit. Jika di pilih push program akan meinta user menginput sebuah kata, di mana maksimal 6 karakter jika lebih dari 6 karakter akan muncul pesan kesalahan. Jika di pilih pop maka karakter teratas akan di keluarkan, bila belum ada kata yang dimasukan waktu memilih pop akan tampil pesan kesalahan. Jika di pilih quit maka program selesai.Output :Pilihan :4. Push5. Pop6. QuitPilihan [1/2/3] = 1Masukan Kata = DataHasil Push : Data`

Coding program :

program stack;uses crt;const Topmax = 6;vartop, i : byte;pil : char;temp, e : string;stack1 : array[1..Topmax] of string;procedure pushAnim;begin for i:= 1 to 2 do begin gotoxy(i,6); write('Hasil Push :',temp); delay(1); gotoxy(i,6); clreol; end; for i:= 1 to 2 -top do begin delay(1); gotoxy(1, 7+i); write ('Hasil Push : ',temp); end;end;

procedure popAnim(temp:string);begin for i := 1 to 2-top do begin delay(30); gotoxy(1, 2-i-top); write(' '); gotoxy(1, 2-i-top); write('Hasil Pop : ',temp); end; for i := 1 to 2 do begin clreol; gotoxy(1, 8); writeln('Hasil Pop : ',temp); clreol; end; end;

procedure hapus; begin gotoxy(1,10); write('Tekan enter untuk melakukan Pop'); gotoxy(22,8); write(' '); gotoxy(20,5); write(' '); gotoxy(21,8); write(' '); readln; gotoxy(20,8); write(' '); readln; gotoxy(19,8); write(' '); readln; gotoxy(18,8); write(' '); readln; gotoxy(17,8); write(' '); readln; gotoxy(16,8); write(' '); readln; gotoxy(15,8); write(' '); gotoxy(1, 8); write(' Stack Telah Kosong ') ; readln; gotoxy(1, 7); clreol; gotoxy(1, 8); clreol; gotoxy(1, 9); clreol; gotoxy(1,10);clreol; end;procedure push(e : string);begin inc(top); stack1[top] := e; pushanim;end;procedure pop (e : string);beginif top 0 then begin e := stack1[top];popanim(e); dec(top); hapus; end else begin gotoxy(1, 8); write(' Stack Telah Kosong '); readkey; gotoxy(1, 8); clreol; end;end;begin clrscr; writeln('PILIHAN : '); writeln('1. Push'); writeln('2. Pop'); writeln('3. Quit'); writeln('Pilihan [1/2/3] = '); top := 0; gotoxy (15,20); writeln('Nama : Yopi Lala '); gotoxy (15,21);