hasil praktikum struktur data (stack)

32
LAPORAN RENCANA PRAKTIKUM STRUKTUR DATA Nama : YOPI LALA NIM : DBC 113 016 Kelas : G Modul : I (STACK)

Upload: yopi-miri

Post on 15-Nov-2015

48 views

Category:

Documents


2 download

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); writeln('Nim : DBc 113 018'); repeat gotoxy(19, 5); clreol; pil := readkey; write(pil);

if pil = '1' then begin if top Topmax then begin gotoxy(1, 7); write('Masukkan Kata = '); temp:=readkey; readln(temp); i:= length(temp); if i > 6 then begin gotoxy(1, 9); writeln('Karakter Huruf Penuh'); readkey; end else push(temp); gotoxy(1, 9); clreol; gotoxy(1, 7); clreol; end else begin gotoxy(1, 7);write('Stack Telah Penuh'); readkey; gotoxy(1, 7); clreol; end; end else if pil ='2' then pop(temp); until pil = '3';end.

BAB IIIPEMBAHASANProcedure inisialisasi ( var S : stack);BeginS. Top := Null;End;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, pada program di atas variabel top di isi dengan null dimana Null harus telebih dahulu di beri nilai Constant atau yang sering di singkat const, seperti di bawah iniprogram stack;uses crt;const nmax=6; null=0;constant atau const adalah nilai konstanta yang tetap di mana nilai tersebut tidak akan berubah sampai program berakhir dan pada program di atas nilai konstanta untuk nmax adalah 6 dan untu null di beri nilai 0.Untuk memeriksa operasi stack empty/kosong atau penuh kita harus membuat terlebih dahulu fungsi empty dan full dengan koding seperti di bawah ini :Function empty (S : stack) : Boolean;{mengirim nilai true jika S adalah stack kosong}BeginEmpty := (S.Top=NMAX);End;

Function full (S : stack) : Boolean;{mengirim nilai true jika S adalah stack penuh}Beginfull := (S.Top=NMAX);End;Di mana nilai NMAX telebih dahulu di beri nilai tetap sesuai kebutuhan.Pop adalah operasi pengambilan elemen yang di lakukan pada Top, di mana keadaan Top harus terisi terlebih dahulu atau tidak boleh kosong, untuk melakukan menyeleksi Top kosong kita menggunakan statement fungsi If Not seperti di bawah ini :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 := Stack kosong ; {isi suatu nilai yang kemungkinan bukan data}

Maksud dari program di atas adalah jika S.Top tidak kosong maka program akan melakukan Pop pada data := S.tabelemen [S.Top]; S.Top := S.Top-1; daan sebaliknya jika S.Top masih kosong atau sudah kosong maka program akan memberi peringatan Stack telah Kosong.Push adalah operasi pengisian elemen yang di lakukan pada Top, di mana keadaan Top harus terlebih dahulu kosong atau tidak boleh penuh sehingga untuk meyeleksinya keadaan tersebut kita menggunakan statement If Not full (S) then seperti di bawah ini : 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;Maskud dari program di atas adalah jika top belum terisi atau tidak penuh maka program akan menyuruh kita mengisi Top dengan S. Top := S.Top + 1; S. tabelemen [S. Top] := data; dan sebaliknya jika Top sudah penuh maka kita tidak bisa menambah atau mengisi tumpukan lagi pada elemen top.

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`

Koding 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); writeln('Nim : DBc 113 018'); repeat gotoxy(19, 5); clreol; pil := readkey; write(pil);

if pil = '1' then begin if top Topmax then begin gotoxy(1, 7); write('Masukkan Kata = '); temp:=readkey; readln(temp); i:= length(temp); if i > 6 then begin gotoxy(1, 9); writeln('Karakter Huruf Penuh'); readkey; end else push(temp); gotoxy(1, 9); clreol; gotoxy(1, 7); clreol; end else begin gotoxy(1, 7);write('Stack Telah Penuh'); readkey; gotoxy(1, 7); clreol; end; end else if pil ='2' then pop(temp); until pil = '3';end.Jika program di atas di jalankan maka Outputnya adalah sebagi berikut

Di mana jika kita memasukan pilihan 1 atau Push maka program akan meminta kita memasukan sebuah kata di mana kata tersebut tidak boleh lebih dari 6 karakter. Jika lebih dari 6 karakter maka program akan memberikan kita peringatan karakter huruf penuh dan kita akan di minta melakukan pilihan sekali lagi seperti di bawah in i :

Kata yang di masukan Kata yang di masukanmenampilakn hasillebih dari 6 karakter tidak lebih dari 6 karakter Push

setelah menampilkan hasil Push, maka program kembali meminta kita measukan pilihan kembali jika kita pilih 2 atau Pop maka Program akan menghapus kata yang kita inputkan tadi di dalam Push dari kanan kekiri satu persatu dengan menekan enter, jika sudah habis maka ada peringatan stack telah kosong. Dan program akan di ulang lagi dari awal. (dengan catatan Push harus terlebih dahulu terisi, jika belum terisi maka kita akan di minta menginputkan kata terlebih dahulu di Push)

Melakukan proses Pop Peringatan Bahwa Popkembali ke ProgramDengan menekan enter.sudah habis.Awal

BAB IVKesimpulanDari pembahasan di atas dapat di simpulkan bahwa : Stack atau tumpukan bisa di artikan sebagai kumpulan data seolah-olah di letakan di atas data yang lain dan data tersebut bisa di ambil atau di tambahkan melalui ujung yang sama. Push adalah operasi menambahkan data di atas data yang lain Pop adalah pengambilan data dari yang paling terkahir. LIFO (Last In First Out) konsep dimana data yang terakhir masuk itu yang akan duluan keluar konsep ini adalah konsep yang di gunakan pada Stack atau tumpukan

DAFTAR PUSTAKA

LAMPIRAN