Anda di halaman 1dari 21

[STRUKTUR DATA] HUSNI MUBAROK PROGRAM QUEUE DENGAN MENGGUNAKAN POINTER Program Queue_pointer; Uses Wincrt; Type Str10

= string[10]; Queue = ^Simpul; {pointer ke record simpul} Simpul = record data : Str10; next : Queue; end; Var D, {serial number terdepan} B, {serial number terakhir} baru : Queue; {d,b,baru bertipe pointer ke tipe simpul} lagi, pil : char; {variabel bantu untuk pemilihan} s_num, {variabel untuk menyimpan serial number} s_num2 : Str10; {variabel utk mnyimpan data yg disisipkan} (***function untuk mengecek apakah antrian kosong***) Function IsEmpty : boolean; {function bertipe boolean,bisa true/false} Begin IsEmpty := (d = nil) and (b = nil); End; {IsEmpty = yes, jika pointer depan dan belakang bernilai nil/tidak menunjuk ke alamat manapun} (***procedure utk menampilkan nilai-nilai yg terdapat dalam queue***) Procedure CetakData; Var Bantu : Queue; {bantu bertipe pointer ke tipe simpul}

[STRUKTUR DATA] HUSNI MUBAROK Begin write(Serial Number*s List: ); if not (IsEmpty) then {jika queue telah di isi maka} begin Bantu := d; {ponter bantu menunjuk ke ponter depan} while bantu <> nil do {selama antrian tdk kosong maka program akan melakukan perulangan cetak terus sampai bantu menunjuk ke alamat tertentu} begin Write(bantu^.data:10); {cetak data yg di tunjuk ponter bantu} Bantu := bantu^.next; {ponter bantu diset menunjuk ke alamat record dibawahnya} end; end else {jika queue kosong, maka tidak dapat mencetak data} write(Serial Number Tidak ada pada List); writeln; readln; End; (***procedure untuk membuat/inisialisasi queue***) Procedure Buat; Var Kosong:boolean; {variabel kosong bertipe boolean} Begin Kosong := IsEmpty; {inisialisasi kosong = isempty} New(baru); {mengalokasikan memori&mengeset pointer baru yg bertipe pointer utk menunjuk ke alamat baru tsb} {mengisikan field-field pada record baru}

[STRUKTUR DATA] HUSNI MUBAROK Baru^.data := s_num; {mengisi pointer baru dengan s_num} Baru^.next := nil; {mengeset pointer baru^.next agar tidak menunjuk ke alamat manapun} if kosong then {jika queue kosong} begin d := baru; {pointer depan menunjuk ke record baru} b := baru; {pointer belakang menunjuk ke record baru} end else begin {jika queue sudah ada isinya} b^.next:= baru; {field berikut dari record terakhir menunjuk ke record baru} b := baru; {mengeset pointer belakang untuk menunjuk ke record baru} end; End; (***function untuk mengecek letak s_num pada antrian***) Function Cari(s_num : string): boolean; {function cari bertipe boolean} Var Ada : boolean; {variabel ada bertipe boolean} bantu : Queue; {bantu bertipe pointer ke tipe simpul} Begin Ada := false; {variabel ada mula-mula di set false} Bantu := d; {pointer bantu menunjuk ke pointer depan} repeat if (bantu^.data = s_num) then ada := true {jika data yg ditunjuk pointer bantu=s_num ->ketemu,maka ada= true} else bantu := bantu^.next; {jika tdk,pointer bantu diset menunjuk ke alamat record dibawahnya} until ada or (bantu=nil);

[STRUKTUR DATA] HUSNI MUBAROK {sampai ketemu/pointer bantu tidak menunjuk ke alamat manapun} cari := ada; {inisialisasi function cari = ada} End; (***procedure untuk menambahkan elemen ke dalam antrian, penambahan elemen selalu di tambahkan di elemen paling belakang***) Procedure TambahBelakang; Begin writeln; write(Isi Serial Number Baru dalam List di belakang Serial Number lama: ); readln(s_num); Buat; {pemanggilan procedure buat} end; (***procedure untuk mengambil data terdepan***) Procedure Ambildepan; Var bantu : Queue; {bantu bertipe pointer ke tipe simpul} Begin bantu := d; {pointer bantu menunjuk ke pointer depan} if not (IsEmpty) then {jika queue tdk kosong dilakukan pengecekan} begin if (d=b) then {jika pointer depan=belakang maka antrian berisi satu buah data} begin s_num := d^.data; {pointer depan menunjuk ke s_num} d := nil;{pointer depan diset tdk menunjuk ke alamat manapun} b := nil;{pointer belakang diset tdk menunjuk ke alamat manapun} end

[STRUKTUR DATA] HUSNI MUBAROK else begin {jika tidak,} s_num := d^.data;{pointer depan menunjuk ke s_num} end; writeln; write(The head of the List is : ,s_num); writeln; end else write (The Queue List is Empty!!!); End; (***procedure untuk menghapus elemen terdepan/pertama di dlm queue***) Procedure HapusDepan; Var bantu : Queue; {bantu bertipe pointer ke tipe simpul} Begin clrscr; write("Enter" to delete the head list!); readln; if not (IsEmpty) then {jika queue telah ada isinya/tidak kosong} begin d := d^.next; {menghapus record plg depan,pointer depan menunjuk ke alamat record dibawahnya} if d=nil then b:=nil; {jika pointer depan bernilai nil maka pointer belakang di isi dengan nilai nil} writeln(The head list have been deleted by administrator!!); end else write(The List is empty, you can"t delete somelist); {jika list kosong maka tidak dapat menghapus data} End;

[STRUKTUR DATA] HUSNI MUBAROK (***proceedure untuk menghapus elemen paling belakang***) Procedure HapusBelakang; Var bantu : Queue; {bantu bertipe pointer ke tipe simpul} Begin if not (IsEmpty) then {jika queue telah berisi} begin bantu := d; {pointer bantu menunjuk ke pointer depan} repeat bantu := bantu^.next; {perulangan untuk menghapus record belakang, pointer bantu menunjuk ke alamat record berikutnya} until bantu^.next = b;{record dibawahnya menunjuk ke pointer paling belakang} b:= bantu^.next; {pointer belakang menunjuk ke alamat record berikutnya} bantu^.next := nil;{sampai pointer tdk menunjuk ke alamat manapun} end else write(The List is empty, you can"t delete somelist); End; (***procedure untuk menghapus elemen ke x dari antrian***) Procedure HapusSN; Var bantu, hapus : Queue;{bantu, hapus bertipe pointer ke tipe simpul} Begin bantu := d; {pointer bantu menunjuk ke pointer depan} new(hapus); {mengalokasikan memori dan mengeset pointer hapus yang bertipe pointer untuk menunjuk ke alamat baru tersebut} if cari(s_num)=true then {jika pemanggilan function cari, dan dilakukan pengecekan dan s_num ketemu/ cari=true} begin

[STRUKTUR DATA] HUSNI MUBAROK hapus:=bantu^.next;{pointer hapus mnunjuk field next pd record bantu} bantu^.next:= hapus^.next; {field next pada record bantu menunjuk pada field next pada record hapus} hapus := nil; {sampai pointer hapus bernilai nil} end else bantu := bantu^.next; End; (*procedure utk menyisipkan data didepan(menyisipkan s_num2 didepan s_num)*) Procedure SisipDepan; Var baru,bantu1,bantu2 : Queue;{variabel bertipe pointer ke tipe simpul} ada : boolean; {variabel ada bertipe boolean} Begin ada := cari(s_num); {inisialisasi function cari = ada} if IsEmpty then write(The List is Empty!) {jika queue kosong maka tidak dapat dilakukan penyisipan data} else begin ada := false; {mula-mula ada diset false} bantu2 := d; {pointer bantu2 menunjuk ke pointer depan} while (bantu2 <> nil) and ada do {selama pointer bantu2 tidak bernilai nil dan ada} begin if bantu2^.data = s_num then {jika pointer bantu data =s_num} begin bantu1^.next:= bantu2^.next; {field next pd record bantu1 menunjuk field next pd record bantu2} bantu2^.next:=bantu1;

[STRUKTUR DATA] HUSNI MUBAROK {field next pd record bantu2 mnunjuk record bntu1} ada := true; {ada=true, berarti data ditemukan} end; bantu2 := bantu2^.next; {pointer bantu menunjuk ke alamat record bawahnya} end; if (bantu2=nil) and (ada=false) then {jika pointer bantu2 bernilai nil dan ada=false maka} begin b^.next := bantu1; b := bantu1; {pointer belakang menunjuk ke pointer bantu1} end; end; End; (***procedure untuk menyisipkan data di belakang(menyisipkan s_num2 di belakang s_num***) Procedure SisipBelakang; Var bantu, baru : queue; {variabel bertipe pointer ke tipe simpul} Begin bantu := d; {pointer bantu menunjuk ke pointer depan} while bantu^.next <> nil do {selama field next dr record bantu tdk menunjuk ke alamat manapun, maka jalan terus} begin if bantu^.data=s_num then{data yg ditunjuk pointer bantu=s_num maka ketemu} begin

[STRUKTUR DATA] HUSNI MUBAROK new(baru); {mengalokasikan memori dan mengeset pointer baru yang bertipe pointer untuk menunjuk ke alamat baru tersebut} baru^.data := s_num2; {field data pd record bru diisi s_num2} baru^.next := bantu^.next;{field next pada record baru menunjuk pada field next pada record bantu} bantu^.next:=baru; {field next pd record bantu mnunjuk record baru} end; bantu := bantu^.next; end; End; (***procedure yang menampilkan pilihan manipulasi data***) Procedure Menu; Begin clrscr; CetakData; {memanggil procedure Cetakdata} writeln(@@@************************************@@@); writeln(@@ MENU PILIHAN @@); writeln(@@@************************************@@@); writeln([a]. Cari Data X); writeln([b]. Tambah Data di Belakang); writeln([c]. Ambil Data Teratas dan Simpan di X); writeln([d]. Hapus Data Terdepan); writeln([e]. Hapus Data Belakang); writeln([f]. Hapus Data X);

[STRUKTUR DATA] HUSNI MUBAROK writeln([g]. Sisip Data di Depan); writeln([h]. Sisip Data di Belakang); repeat {perulangan untuk melakukan pemilihan menu} write(Pilihan Anda: ); readln(pil); {input pilihan, a/b/c/d/e/f/g/h} Case pil Of a : Begin clrscr; write(Serial Number yang Anda cari: ); readln(s_num); {menginputkan serial number} if not (IsEmpty) then {jika queue sudah berisi maka} begin cari(s_num); {memanggil function cari} if (cari(s_num)=true) then {jika cari=true yaitu data yang di cari ketemu maka} begin write(Serial Number: ,s_num, Ada Dalam List) end else begin {jika tidak, maka} write(Serial Number: ,s_num, Tidak Ditemukan); end; end else write(Queue is empty!);{jika tdk,maka queue kosong} end; b : TambahBelakang; {memanggil procedure TambahBelakang} c : Begin Clrscr;

[STRUKTUR DATA] HUSNI MUBAROK writeln; write(Press ENTER! to put the head list); readln; AmbilDepan; {memanggil procedure AmbilDepan} Readln; End; d : Begin clrscr; write(Press ENTER! to delete the head list); readln; HapusDepan; {memanggil procedure HapusDepan} writeln(Delete successfuly!); End; e : Begin Clrscr; writeln; write(Press ENTER!delete the tail list!); readln; HapusBelakang; {memanggil procedure Hapusbelakang} Readln; End; f : Begin Clrscr; write(Select some list to delete: ); readln(s_num); {input data yang akan dihapus} HapusSN; {memanggil procedure HapusSN} Readln; End; g : Begin

[STRUKTUR DATA] HUSNI MUBAROK Clrscr; write(Serial Number yang Akan disisipkan: );readln(s_num2); {input data yang akan disisipkan} writeln; write(Disisip Didepan Data: ); readln(s_num); {input data untuk menentukan lokasi penyisipan data baru} if cari(s_num)=true then SisipDepan; {memanggil procedure SisipDepan} Readln; End; h : Begin Clrscr; write(Serial Number yang Akan disisipkan: ); readln(s_num2); {input data yang akan disisipkan} writeln; write(Disisip Dibelakang Data: ); readln(s_num); {input data untuk menentukan lokasi penyisipan data baru} if cari(s_num)=true then SisipBelakang; {memanggil procedure SisipBelakang} Readln; End; End; Until (pil in['a'..'h']); End; (***procedure untuk menampilkan identitas***)

[STRUKTUR DATA] HUSNI MUBAROK Procedure Identitas; Var pil,lagi : char; {variabel bantu untuk pilihan menu} Begin clrscr; writeln(@@@**************************************@@@); writeln(@@** Nama: Noor Fitriana Hastuti **@@); writeln(@* Nim : M0508059 ILMU KOMPUTER 2008 *@); writeln(@@@**************************************@@@); writeln([a]. masuk program); writeln([b]. keluar program); writeln(ENTER to Continue!! ); readln(pil);{input pilihan, a/b} if pil=a then {jika pilih a maka menuju ke menu pilihan utama} begin lagi := Y; clrscr; write(LIST SERIAL NUMBER OS); while upcase(lagi)=Y DO Begin write(Serial Number: ); readln(s_num);{input serial number} writeln; Buat; {memanggil procedure Buat} write(Serial Number Baru [Y/T]: ); readln(lagi); {pilihan pengisian ulang y/t} end; end

[STRUKTUR DATA] HUSNI MUBAROK else if pil=b then donewincrt{jika b maka program berakhir} end; (***PROGRAM UTAMA**) Begin identitas; {memanggil procedure identitas} menu; {memanggil procedure menu} CetakData; {memanggil procedure CetakData} end. OUTPUT PROGRAM: 1.IDENTITAS

2.MENGINPUTKAN DATA PADA QUEUE

3.MENAMPILKAN INPUTAN DAN MENAMPILKAN MENU PILIHAN

[STRUKTUR DATA] HUSNI MUBAROK

4. PILIH A > CARI DATA X JIKA INPUT DATA: 1 2 3 4 5

5.PILIH B > TAMBAH DATA DI BELAKANG/EQUEUE JIKA INPUT DATA:1 2 3 4 5

6.PILIH C > AMBIL DATA TERATAS DAN SIMPAN DI X JIKA INPUT DATA: 1 2 345

7.PILIH D > HAPUS DATA TERDEPAN JIKA INPUT DATA: 1 2 3 4 5

8.PILIH E > HAPUS DATA BELAKANG JIKA INPUT DATA: 1 2 3 4 5

[STRUKTUR DATA] HUSNI MUBAROK

9.PILIH F > HAPUS DATA X JIKA INPUT DATA: 1 2 3 4 5

10.PILIH H > SISIP DATA DI BELAKANG JIKA INPUT DATA: 1 2 3 4 5

II. PROGRAM QUEUE DENGAN MENGGUNAKAN ARRAY program queue_array; uses wincrt; const max = 10; {batas maksimum elemen array = 10} type antri = array [1..max] of char; {deklarasi type data antri yg terdiri dr 1 max elemen bertipe char} var antrian : antri; {variabel antrian bertipe antri} depan, belakang : integer; {variabel utk menyimpan nilai elemen teratas dan terbawah} elemen,lagi, pilih : char; {variabel bantu untuk pemilihan} (***function untuk mengecek apakah queue kosong***) function kosong(Q:antri):Boolean begin kosong := (depan=belakang); {queue kosong jk posisi depan=belakang} end;

[STRUKTUR DATA] HUSNI MUBAROK (***procedure untuk menginput data ke dalam queue***) procedure tambah(var antrian: antri; x:char); begin {proses penambahan data pada queue} if belakang = max then {jika nilai belakang = max maka belakang diisi 1,antrian diperlakukan seperti lingkaran yang berputar} belakang := 1 else belakang := belakang+1; {jika tdk,nilai belakang di increment} if not(kosong(antrian)) then {jika queue sudah berisi maka} begin antrian[belakang]:=x; {antrian belakang diisi dg nilai x} write(x); {menampilkan nilai x} end else begin write(antrian sudah penuh);{jika antrian penuh maka tidak dapat menambahkan data ke dalam antrian} repeat {} until keypressed; belakang:=belakang-1; {nilai belakang di dicrement} if belakang=0 then {if belakang=0,nilai belakang diisi dg max} belakang:=max; end; end; (***function untuk menghapus data pada antrian***)

[STRUKTUR DATA] HUSNI MUBAROK function hapus(var antrian:antri):char; begin {proses penghapusan data antrian, selama antrian tidak kosong} if depan = max then {jika depan=max,nilai depan diisikan dengan 1} depan := 1 else begin depan:=depan+1; {jika tidak maka nilain depan di increment} hapus:=antrian[depan]; end; end; (***procedure untuk mencetak data yang telah dimasukkan***) procedure cetak; var i : byte; {procdure bantu untuk perulangan} begin for i:= depan to belakang do {cetak data dr data depan ke belakang} write (antrian[i]); end; (***procedure untuk menampilkan data depan dan belakang***) procedure info; begin writeln (Depan : , depan); writeln (Belakang : , belakang); end; (***program utama***)

[STRUKTUR DATA] HUSNI MUBAROK begin clrscr; depan:=0; {inisialisasi nilai depan = o} belakang:=0; {inisialisasi nilai belakang = o} repeat clrscr; writeln(@@@*********************@@@); writeln(@@ Daftar menu Pilihan @@); writeln(@@@*********************@@@); writeln([a]. Menambah Elemen); writeln([b]. Menghapus Elemen); writeln([c]. Cetak Data); writeln([d]. Selesai); write(pilihihan anda: ); readln(pilih); {memilih menu untuk memanipulasi data pada queue} case pilih of a : begin writeln(Menambah Elemen); writeln(isikan elemennya: ); readln(elemen); {input data dalam queue} tambah(antrian,elemen); {memanggil procedure tambah} end; b : begin if not(kosong(antrian)) then{if antrian tdk kosong} elemen:=hapus(antrian) {dilakukan inisialisasi elemen:function hapus,kemudian dilakukan pemanggilan function}

[STRUKTUR DATA] HUSNI MUBAROK else begin writeln(antrian kosong); elemen:=readkey; end; cetak; {memanggil procedure cetak} readln; end; c : begin writeln(Data yang sudah anda masukkan: ); writeln; info; {memanggil procedure info} cetak; {memanggil procedure cetak} readln; end; end; until pilih = d end. OUTPUT PROGRAM 1.PILIH a > TAMBAH DATA, INPUT DATA: 1 2 3 4 5

[STRUKTUR DATA] HUSNI MUBAROK 2.PILIH b > HAPUS DATA , data paling depan akan di hapus

3.PILIH c > CETAK DATA , karena data 1 telah dihapus, maka depan =2

Anda mungkin juga menyukai