Queue Animation |
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.
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.