Rabu, 27 Maret 2013

Antrian (Queue)

.
Queue Animation
Kumpulan data dimana data masuk dan keluar pada ujung yang berbeda dengan konsep FIFO. Antrian sebenarnya bukan hal baru dengan artian antrian hanya menerapkan aturan pada struktur data yang sudah ada misalkan pada pointerrecord dan array, jadi sekali lagi antrian hanya aturan input data dan bagaimana data keluar dengan menerapkan aturan FIFO.

Algoritma:
  • Input/tambah data. Jika ada input maka no antrian yang semula 0 akan tambah 1 demi 1 sampai maksimal antrian.
  • Hapus/Pengambilan data. Jika ada pengambilan data maka data dipindahkan di variabel lain contohnya temp, antrian ke-dua akan maju ke antrian pertama dan seterusnya. Dan jumlah antrian yang semula maksimal akan berkurang 1 demi 1 sampai antrian 0 kembali.
Deklarasi Queue
Type
Const Max = 5;
Nama record = Record
      Data : type data;
      Top : byte;
End;
Nama_array = ARRAY [1..max] of Nama record;
Var
Antri : nama Array;

Misalkan
Type
Coba = record
     Data : string; 
     Top  : byte;
End;
Barang = ARRAY [1..4] of coba;
Var
Antri : barang;

Operasi pada Antrian
CREATE
Membuat antrian baru yang masih kosong.
  Procedure create;
 Begin
 antri.top:=0;
 End;

FULL
Untuk memeriksa apakah antrian sudah penih.
 Fuction full:bolean;
 Begin
 antri.top:=max;
 End;


PUSH
Menambah sebuah elemen ( data ) kedalam antrian.
Syarat: tidak bisa dilakukan jika antrian sudah penuh.
  Procedure push ( input:string );
 Begin
 If not full then
 Begin
 antri.top:=antri.top;
 antri.data:=input;
 End;
 End;



EMPTY
 Fuction empty: bolean;
 Begin
 Empty:=false;
 If top:=0 then empty:=true; 
 End;

POP
Mengambil 1 elemen dari sebuah antrian.
Syarat: antrian tidak boleh kosong.
 Procedure Pop ( elemen:string );
 Begin
 If not empty then
 Begin
 Elemen:=antri.data;
 antri.top:=top – 1;
 End;
 End;


Contoh Program Antrian



program Contoh;
uses crt;
const max:byte=7;
type penunjuk=^data;
     data=record
          info:string;
          berikut:penunjuk;
          end;
var awal,akhir:penunjuk;
    pil:char;
    jml:byte;
    cari,nama:string;

procedure inisialisasi;
begin
 awal:=nil;
 akhir:=nil;
 jml:=0;
end;

procedure tambah_akhir;
var baru:penunjuk;
    nama:string;
begin
 if jml=max then
 begin
  write('Antrian Penuh');
  readln;
 end
 else
 begin
  write('Nama:');readln(nama);
  new(baru);
  baru^.berikut:=nil;
  baru^.info:=nama;
  if awal=nil then
  begin
   awal:=baru;
   akhir:=baru;
   inc(jml);
  end
  else
  begin
   akhir^.berikut:=baru;
   akhir:=baru;
   inc(jml);
  end;
 end;
end;

procedure hapus_awal;
var bantu:penunjuk;
begin
 if awal=nil then
 begin
  write('Antrian Kosong');
  readln;
 end
 else
 begin
  bantu:=awal;
  awal:=awal^.berikut;
  dispose(bantu);
  dec(jml);
 end;
end;

procedure hapus_tengah;
var bantu1,bantu2:penunjuk;
    ketemu:boolean;
begin
 if awal=nil then
 begin
  write('Antrian Kosong');
  readln;
 end
 else
 begin
  write('Nama Pengantri Yang batal:');readln(cari);
  if awal^.info=cari then
   hapus_awal
  else
  begin
   ketemu:=false;
   bantu1:=awal;
   while (bantu1<>nil) and not ketemu do
   begin
    if bantu1^.berikut^.info=cari then
     ketemu:=true
    else
     bantu1:=bantu1^.berikut;
   end;
   if ketemu then
   begin
    bantu2:=bantu1^.berikut;
    bantu1^.berikut:=bantu1^.berikut^.berikut;
    dispose(bantu2);
   end
   else
   begin
    write('Nama Pengantri Tidak Ada');
    readln;
   end;
  end;
 end;
end;

procedure tampil;
var bantu:penunjuk;
    i:integer;
begin
 if awal=nil then
  write('Antrian Kosong')
 else
 begin
  clrscr;
  bantu:=awal;
  i:=1;
  while bantu<>nil do
  begin
   writeln(i,'.[',bantu^.info,']');
   bantu:=bantu^.berikut;
   inc(i);
  end;
 end;
 readln;
end;

procedure menu;
begin
 writeln('MENU PILIHAN ANDA');
 writeln('=================');
 writeln('1.Tambah Antrian');
 writeln('2.Batal Antrian');
 writeln('3.Selesai Antrian');
 writeln('4.Tampil Antrian');
 writeln('5.Kelluar');
 writeln;
 write('Pilihan Anda [1..5]:');readln(pil);
end;

{program utama}
begin
 inisialisasi;
 repeat
  clrscr;
  menu;
  case pil of
  '1':tambah_akhir;
  '2':hapus_tengah;
  '3':hapus_awal;
  '4':tampil;
  end;
 until pil='5';
end.

Tidak ada komentar:

Posting Komentar