Program UASQueueNonCircular;
uses crt;
const Nmax = 5;
type Queue = record
isi : array[1..Nmax] of integer;
head : integer;
tail : integer;
end;
function QueueKosong (Q : Queue) : boolean;
var
kosong : boolean;
begin
if (Q.head = 0) AND (Q.tail = 0) then
kosong := true
else
kosong := false;
QueueKosong := kosong;
end;
function QueuePenuh (Q : Queue) : boolean;
var
penuh : boolean;
begin
if (Q.head = 1) AND (Q.tail = Nmax) then
penuh := true
else
penuh := false;
QueuePenuh := penuh;
end;
procedure ADD (var Q : Queue; angka : integer);
begin
if not QueuePenuh(Q) then
if QueueKosong(Q) then
begin
Q.head := 1;
Q.tail := 1;
Q.isi[Q.tail] := angka;
end
else
begin
Q.tail := Q.tail+1;
Q.isi[Q.tail] := angka;
end;
end;
procedure REMOVE (var Q : Queue; var x : integer);
var
i : integer;
begin
if not QueueKosong(Q) then
if (Q.head = 1) AND (Q.tail = 1) then
begin
Q.head := 0;
Q.tail := 0;
end
else
begin
x := Q.isi[Q.head];
for i := 1 to Q.tail do
begin
Q.isi[i-1] := Q.isi[i];
end;
Q.tail := Q.tail - 1;
end;
end;
procedure tampil(Q : Queue);
var
i : integer;
begin
for i := 1 to 5 do
begin
write(Q.isi[i], ' ');
end;
writeln;
end;
var
Q : Queue;
x,i : integer;
begin
tampil(Q);
ADD(Q,2);
tampil(Q);
ADD(Q,3);
tampil(Q);
ADD(Q,5);
tampil(Q);
ADD(Q,6);
tampil(Q);
ADD(Q,1);
tampil(Q);
REMOVE(Q,x);
writeln('Nilai X : ', x);
writeln('Tail : ', Q.tail);
writeln('Head : ', Q.head);
readln;
end.
Struktur Data : Algoritma Queue Non Circularuses crt;
const Nmax = 5;
type Queue = record
isi : array[1..Nmax] of integer;
head : integer;
tail : integer;
end;
function QueueKosong (Q : Queue) : boolean;
var
kosong : boolean;
begin
if (Q.head = 0) AND (Q.tail = 0) then
kosong := true
else
kosong := false;
QueueKosong := kosong;
end;
function QueuePenuh (Q : Queue) : boolean;
var
penuh : boolean;
begin
if (Q.head = 1) AND (Q.tail = Nmax) then
penuh := true
else
penuh := false;
QueuePenuh := penuh;
end;
procedure ADD (var Q : Queue; angka : integer);
begin
if not QueuePenuh(Q) then
if QueueKosong(Q) then
begin
Q.head := 1;
Q.tail := 1;
Q.isi[Q.tail] := angka;
end
else
begin
Q.tail := Q.tail+1;
Q.isi[Q.tail] := angka;
end;
end;
procedure REMOVE (var Q : Queue; var x : integer);
var
i : integer;
begin
if not QueueKosong(Q) then
if (Q.head = 1) AND (Q.tail = 1) then
begin
Q.head := 0;
Q.tail := 0;
end
else
begin
x := Q.isi[Q.head];
for i := 1 to Q.tail do
begin
Q.isi[i-1] := Q.isi[i];
end;
Q.tail := Q.tail - 1;
end;
end;
procedure tampil(Q : Queue);
var
i : integer;
begin
for i := 1 to 5 do
begin
write(Q.isi[i], ' ');
end;
writeln;
end;
var
Q : Queue;
x,i : integer;
begin
tampil(Q);
ADD(Q,2);
tampil(Q);
ADD(Q,3);
tampil(Q);
ADD(Q,5);
tampil(Q);
ADD(Q,6);
tampil(Q);
ADD(Q,1);
tampil(Q);
REMOVE(Q,x);
writeln('Nilai X : ', x);
writeln('Tail : ', Q.tail);
writeln('Head : ', Q.head);
readln;
end.
program CircularQueue;
const NMax = 5;
{deklarasi tipe data queue}
type queue = record
isi : array[1..NMax] of integer;
head : integer;
tail : integer;
end;
{fungsi untuk mengecek queue kosong}
function IsEmpty(q : queue) : boolean;
var empty : boolean;
begin
{ketika head dan tail sama - sama 0}
if (q.head=0) AND (q.tail=0) then
empty := true
else
empty := false;
IsEmpty := empty;
end;
{fungsi untuk mengecek queue penuh}
function IsFull(q : queue) : boolean;
var full : boolean;
begin
{ketika head=1 dan tail berada pada posisi terakhir}
if(q.head=1) AND (q.tail=NMax) then
full := true
{ketika tail berada didepan head, tail dan headnya bertemu}
else
if (q.tail=q.head-1) then
full := true
else
full := false;
IsFull := full;
end;
{fungsi untuk mengecek hanya satu antrian yang tersisa}
function HT1(q : queue) : boolean;
var isisatu : boolean;
begin
{ketika head = tail berarti hanya ada satu antrian yang tersisa}
if (q.tail=q.head) then
isisatu := true
else
isisatu := false;
HT1 := isisatu;
end;
{fungsi untuk mengecek apakah tail < NMax}
function TailLessThanNMax(q:queue) : boolean;
var less : boolean;
begin
if (q.tail<NMax) then
less := true
else
less := false;
TailLessThanNMax := less;
end;
{fungsi untuk mengecek apakah head < NMax}
function HeadLessThanNMax(q:queue) : boolean;
var less : boolean;
begin
if (q.head<NMax) then
less := true
else
less := false;
HeadLessThanNMax := less;
end;
{prosedur untuk menambahkan queue}
procedure Add(var q:queue;angka:integer);
begin
{mengecek apakah tidak queue tidak penuh}
if not IsFull(q) then
begin
{dari queue kosong menjadi berisi 1 antrian}
if IsEmpty(q) then
begin
q.head:=1;
q.tail:=1;
q.isi[q.tail] := angka;
end
else
{ketika tail<NMax maka penambahan tail seperti biasa tail++}
if TailLessThanNMax(q) then
begin
q.tail := q.tail+1;
q.isi[q.tail] := angka;
end
{ketika tail = NMax maka tail balik menjadi 1}
else
begin
q.tail := 1;
q.isi[q.tail] := angka;
end;
end;
end;
{prosedur untuk menghapus queue}
procedure Remove(var q:queue; var angka:integer);
begin
{mengecek apakah queue tidak kosong}
if not IsEmpty(q) then
begin
{ketika hanya 1 antrian yang tersisa, ubah queue menjadi 0}
if HT1(q) then
begin
angka := q.isi[q.head];
q.tail := 0;
q.head := 0;
end
else
{ketika head < NMax, head++}
if HeadLessThanNMax(q) then
begin
angka := q.isi[q.head];
Q.isi[Q.head]:=0;
q.head := q.head +1;
end
{ketika head = NMax, head menjadi 1}
else
begin
angka := q.isi[q.head];
Q.isi[Q.head] := 0;
q.head := 1;
end;
end;
end;
procedure Tampil(Q : Queue);
var
i : integer;
begin
for i:=1 to Nmax do
begin
write(Q.isi[i],' ');
end;
writeln;
end;
var q:queue; x,i:integer;
begin
Tampil(Q);
add(q,1);
Tampil(Q);
add(q,2);
Tampil(Q);
add(q,3);
Tampil(Q);
add(q,4);
Tampil(Q);
remove(q,x);
Tampil(Q);
remove(q,x);
Tampil(Q);
remove(q,x);
Tampil(Q);
add(q,6);
Tampil(Q);
add(q,7);
Tampil(Q);
remove(q,x);
Tampil(Q);
remove(q,x);
Tampil(Q);
remove(q,x);
Tampil(Q);
add(q,8);
Tampil(Q);
writeln('head : ',q.head);
writeln('tail : ',q.tail);
readln;
end.
const NMax = 5;
{deklarasi tipe data queue}
type queue = record
isi : array[1..NMax] of integer;
head : integer;
tail : integer;
end;
{fungsi untuk mengecek queue kosong}
function IsEmpty(q : queue) : boolean;
var empty : boolean;
begin
{ketika head dan tail sama - sama 0}
if (q.head=0) AND (q.tail=0) then
empty := true
else
empty := false;
IsEmpty := empty;
end;
{fungsi untuk mengecek queue penuh}
function IsFull(q : queue) : boolean;
var full : boolean;
begin
{ketika head=1 dan tail berada pada posisi terakhir}
if(q.head=1) AND (q.tail=NMax) then
full := true
{ketika tail berada didepan head, tail dan headnya bertemu}
else
if (q.tail=q.head-1) then
full := true
else
full := false;
IsFull := full;
end;
{fungsi untuk mengecek hanya satu antrian yang tersisa}
function HT1(q : queue) : boolean;
var isisatu : boolean;
begin
{ketika head = tail berarti hanya ada satu antrian yang tersisa}
if (q.tail=q.head) then
isisatu := true
else
isisatu := false;
HT1 := isisatu;
end;
{fungsi untuk mengecek apakah tail < NMax}
function TailLessThanNMax(q:queue) : boolean;
var less : boolean;
begin
if (q.tail<NMax) then
less := true
else
less := false;
TailLessThanNMax := less;
end;
{fungsi untuk mengecek apakah head < NMax}
function HeadLessThanNMax(q:queue) : boolean;
var less : boolean;
begin
if (q.head<NMax) then
less := true
else
less := false;
HeadLessThanNMax := less;
end;
{prosedur untuk menambahkan queue}
procedure Add(var q:queue;angka:integer);
begin
{mengecek apakah tidak queue tidak penuh}
if not IsFull(q) then
begin
{dari queue kosong menjadi berisi 1 antrian}
if IsEmpty(q) then
begin
q.head:=1;
q.tail:=1;
q.isi[q.tail] := angka;
end
else
{ketika tail<NMax maka penambahan tail seperti biasa tail++}
if TailLessThanNMax(q) then
begin
q.tail := q.tail+1;
q.isi[q.tail] := angka;
end
{ketika tail = NMax maka tail balik menjadi 1}
else
begin
q.tail := 1;
q.isi[q.tail] := angka;
end;
end;
end;
{prosedur untuk menghapus queue}
procedure Remove(var q:queue; var angka:integer);
begin
{mengecek apakah queue tidak kosong}
if not IsEmpty(q) then
begin
{ketika hanya 1 antrian yang tersisa, ubah queue menjadi 0}
if HT1(q) then
begin
angka := q.isi[q.head];
q.tail := 0;
q.head := 0;
end
else
{ketika head < NMax, head++}
if HeadLessThanNMax(q) then
begin
angka := q.isi[q.head];
Q.isi[Q.head]:=0;
q.head := q.head +1;
end
{ketika head = NMax, head menjadi 1}
else
begin
angka := q.isi[q.head];
Q.isi[Q.head] := 0;
q.head := 1;
end;
end;
end;
procedure Tampil(Q : Queue);
var
i : integer;
begin
for i:=1 to Nmax do
begin
write(Q.isi[i],' ');
end;
writeln;
end;
var q:queue; x,i:integer;
begin
Tampil(Q);
add(q,1);
Tampil(Q);
add(q,2);
Tampil(Q);
add(q,3);
Tampil(Q);
add(q,4);
Tampil(Q);
remove(q,x);
Tampil(Q);
remove(q,x);
Tampil(Q);
remove(q,x);
Tampil(Q);
add(q,6);
Tampil(Q);
add(q,7);
Tampil(Q);
remove(q,x);
Tampil(Q);
remove(q,x);
Tampil(Q);
remove(q,x);
Tampil(Q);
add(q,8);
Tampil(Q);
writeln('head : ',q.head);
writeln('tail : ',q.tail);
readln;
end.
Download Disini
Struktur Data : Algoritma Queue Non Circular And Algoritma Circular >>>>> Download Now
ReplyDelete>>>>> Download Full
Struktur Data : Algoritma Queue Non Circular And Algoritma Circular >>>>> Download LINK
>>>>> Download Now
Struktur Data : Algoritma Queue Non Circular And Algoritma Circular >>>>> Download Full
>>>>> Download LINK