ANTRIAN (QUEUE) 4.1 Pengertian Antrian
4.5 Operasi pada Antrian
Operasi yang dapat dilakukan pada antrian atau queue adalah memasukkan elemen dari sisi bagian belakang queue dan mengeluarkan elemen dari sisi depan queue.
Aturan Memasukkan Queue
masuk keluaran
Last First
Antrian (Queue) Antrian (Queue)
Last First Last First Last First Antrian (Queue) Antrian (Queue) keluaran
Antrian (queue) adalah list linier yang:
1. Dikenali elemen pertama (Head) dan terakhirnya (Tail) 2. Penyisipan elemen selalu dilakukan setelah elemen terakhir 3. Penghapusan elemen selalu dilakukan pada elemen pertama 4. Elemen yang satu dengan yang lain diakses melalui Next.
Contoh:
Antrian tersebut berisi 6 elemen yaitu A,B,C,D,E dan F. Elemen A terletak dibagian depan antrian, elemen F terletak dibelakang antrian.
Memasukkan elemen G maka penambahan elemen dilakukan dibelakang
Jika ada elemen yang dihapus maka elemen A akan dihapus terlebih dahulu
A B C D E F A B C D E F G A B C D E F G Depan/Front Belakang/Tail Depan/Front Belakang/Tail Depan/Front
Function QEmpty (Q: Queue) boolean {mengirim true jika antrian kosong dan false jika antrian kosong} Kamus :
Algoritma:
(Q.Head = Nil) and (Q.Tail = Nil)
Procedure CreateStack(Output Q:queue) {IS: sembarang}
{FS:terbentuk sebuah queue yang kosong}
Kamus : Algoritma:
Q.Head Nil Q.Tail Nil
rocedure InsertQ (input/output Q : Queue, input P: Address)
{IS: antrian Q terdefinisi, mungkin kosong P sudah dialokasi, P = Nil, Next (P) = Nil} {FS: P menjadi elemen Tail dari antrian Q}
Kamus :
Algoritma:
Pembuatan queue kosong Memeriksa antrian kosong
Representasi Statis
Queue dengan representasi statis biasanya diimplementasikannya dengan menggunakan array. Sebuah array memiliki tempat yang dialokasikan diawal sehingga sebuah elemen yang dimasukkan dalam sebuah array terbatas pada tempat yang ada pada array. Karena
menggunakan array maka queue dengan representasi statis dapat mengalami kondisi elemen penuh.
Karena menggunakan array yang tidak dapat diubah strukturnya secara dinamis maka operasi mengeluarkan elemen dari queue dengan representasi statis perlu penanganan secara khusus If QEmpty (Q) then
Head (Q) P Else
Next (tail (Q)) P Tail (Q) P
Procedure DeleteQ (input/output Q : Queue, output P: Address)
{IS: Q terdefinisi, tidak kosong }
{FS: P adalah alamat yang diambil, P = Nil, Next (P) = Nil, antrian mungkin jadi kosong} Kamus :
Algoritma:
P Head (Q)
Head (Q) Next (Head(Q)) If Head (Q) = Nil then Tail (Q) Nil Else
Next (P) nil
8 7 6 5 4 3 2 1
Penambahan sebuah elemen pada antrian
Penghapusan sebuah elemen pada antrian
first/Front
yaitu menggeser semua elemen kedepan begitu ada elemen yang dikeluarkan dari queue, agar lebih jelas. 1 2 3 4 5 Nmax = 5 Head = 1 Tail = 4 Nmax = 5, Inset (Q,25) 8 7 6 5 4 3 2 8 7 6 5 4 3 2 1
Procedure InsertQ (input/output Q : Queue, input ElmtQ: infotype)
{IS: Q mungkin kosong, ElmtQ terdefinisi} FS: elemen Tail dari Q bernilai ElmtQ }
{menyisipkan sebuah elemen ElmtQ sebagai Tail} Kamus :
Algoritma:
If QEmpty (Q) then
Qtail 1
QHead 1
QTabElmtQQtail elmtQ Else
If (Qtail < Nmax) then Qtail Qtail + 1
QTabElmtQQtail elmtQ
Else Output („overflow‟)
50 75 100 150 50 75 100 150 25 first/Front Last/belakang first/Front Last/belakang Tail Head Tail Head Head
1 2 3 4 5 Head = 1
Tail = 5 X=25
Procedure DeleteQ (input/output Q : Queue, input ElmtQ: infotype)
{IS: Q tidak kosong
FS: elemen yang dihapus disimpan informasinya pada ElmtQ, ElmtQ digeser}
{menyisipkan sebuah elemen ElmtQ sebagai Tail} Kamus :
Algoritma:
QEmpty Q.TabElmtQQ.Head
If (Qtail = Qhead) then (ada lebih dari satu elemen, geser semua elemen sisa) I traversal [2..Qtail] QtabElmtQ1-1 QtabElmtQ1 Qtail Qtail -1 Else QTail Nol Q.Head Nol Head Head
1 2 3 4 5 Head =1 Tail = 5 x = 200 1 2 3 4 5 Delete Q(Q,x) Head = 2 Tail = 4 x=50 50 75 100 150 200 75 100 150 200
Procedure InsertQ (input/output Q : Queue, input ElmtQ: infotype) {IS: Q mungkin kosong, ElmtQ terdefinisi}
FS: elemen Tail dari Q bernilai ElmtQ }
{menyisipkan sebuah elemen ElmtQ sebagai Tail} Kamus :
Algoritma:
If QEmpty (Q) then
Qtail 1
QHead 1
QTabElmtQQtail elmtQ Else
If (Qtail < Nmax) then Qtail Qtail + 1
QTabElmtQQtail elmtQ Else
If (Qhead > 1) then
For ( i Qhead to Qtail do)
QTabElmtQ[i-Qhead+ 1] QtabElmtQ[i]
End for
Qtail Qtail – Qhead+1` Qhead 1
Tail
Tail Head
Head = 3; tail =5 Nmax =5 1 2 3 4 5 Inser (Q,100) 1 2 3 4 5 Head = 1 Tail = 4 Overflow? Tdk Qtail Qtail +1 QtabElmtQ[Qtail] ElmtQ Else Write (overflow) Endif 5 10 15 20 25 15 20 25 100
Procedure InsertQ (input/output Q : Queue, input ElmtQ: infotype)
{IS: Q mungkin kosong, ElmtQ terdefinisi} FS: elemen Tail dari Q bernilai ElmtQ } {menyisipkan sebuah elemen ElmtQ sebagai
Head
Tail
Head
Count = 2 Newtail Head = 7 X Tail} Kamus : NewTail : Address Algoritma:
If Qcount = Nmax then Output („overflow‟) Else
Newtail Qhead + Qcount If Newtail > Nmax then
Newtail Newtail – Nmax
QTabElmtQQtail elmtQ Qcount Qcount + 1
Y Z
Z
Count = 3 Head = 7,
Tail =1
Head = 5,Tail = 1
Count = 5
Elmt =‟A‟, Nmax = 8
1 2 3 4 5 6 7 8 Insert (Q,Elmt) Head = 5, Tail = 2 Count = 6 1 2 3 4 5 6 7 8 x Y Z P Q R S T U V W P A T U V W
Procedure DeleteQ (input/output Q : Queue, input ElmtQ: infotype) {IS: Q tidak kosong}
FS: element yang dihapus disimpaninformasinyapada elmtQ {elemen Q berkurang satu}
Kamus : Algoritma:
ElmtQ QTabElmtQQhead
Qcount Qcount -1 if Qempty(Q) or Head = Nmax then Qhead 1
else
QHead Qhead + 1
Head Tail
Head = 5, Tail = 2 Count = 6 1 2 3 4 5 6 7 8 Delete(Q, T) Head = 5, Tail = 1 Count = 5 1 2 3 4 5 6 7 8 Representasi Dinamis
Queue dengan representasi Dinamis biasanya diimplementasikan dengan menggunkan pointer yang menunjuk pada elemen-elemen yang dialokasikan pada memori.
Karena semua operasi penambahan elemen pada sebuah queue ditambahkan pada akhir queue maka jika menggnakan representasi dinamis saat elemen ditambahkan akan menggunakan penambahan elemen pada akhir queue(addlast) dan saat pengambilan atau penghapusan elemen menggunakan penghapusan diawal queue (delfirst).
P A T U V W
A U V W P
Procedure insetQP (input/output Q : Queue, input P: Address) {IS: Q terdefinisi, mungkin kosong, P terdefinisi next(P) = nil} {FS:tail yang baru adalah P}
Kamus : Algoritma:
If EmptyQ(Q) then
Tail head
Antrian dengan Prioritas (Priority Qeue)
Antrian berprioritas ataun priority queue mengeluarkan elemen dari queue berdasarkan prioritas pada elemen itu, oleh karena itu elemen pada antrian berprioritas untuk menyimpan nilai prioritas pada setiap elemn.
Untuk memasukkan elemen pada sebuah antrian erprioritas tidak harus melalui sisi belakang antrian disisipkan dan diurutkan berdasarkan prioritas elemen, sedangkan mengeluarkan elemne dari antrian berdasarkan prioritas elemen.
Hal yang perlu diperhatikan saat memasukkan elen ke antrian berprioritas adalah sebagai berikut :
1. Elemen yang memiliki prioritas leih tinggi akan leih dahulu keluar dari queue 2. Jika ada dua elemen yang memiliki prioritas sama maka yang akan keluar terlebih
dahulu dari antrian adalah yang terlebih dahulu masuk kedalam antrian. Qhead P
Qtail P else
Qtail . Next P Qtail P
Procedure DeleteQP (input/output Q : Queue, input P: Address) {IS: Q tidak kosong
{FS:P adalah elemen yang dihapus, Q mungkin kosong} Kamus :
Algoritma: P Qhead
QHead Qhead .Next P . Next Nil
If (Qhead = Nil) then QTail = Nil
Operasi memasukkan elemen pada antrian berprioritas adalah sebagai berikut: Elemen baru Hasil : 1 2 4 6 9 12 1 2 4 6 9 12 1 2 3 4 6 9 12
Procedure InsertPrioQ (input/output PrioQ : Queue, input P : address)
{IS: Q terdefinisi, tidak kosong, Pterdefinisi} p FS: P menjadi elemen antrian sesuai dengan Prio(P) } {P disiisipkan dalam antrian sesuai dengan
prioritasnyal} Kamus : Pt, Prec : Address Found : Boolean head 3 Tail 3 Tail head Tail head
Algoritma: If Qempty(Q) then Qhead P Qtail P Else Found false Prec Nil Pt head(Q)
While ( Pt = Nil) and (not found) do If Prio(Pt) > Prio (P) then
Found True Else
Prec Pt Pt Next(Pt)
{Endwhile, Pt = Nil or found}
If prec = nil then {sisip dielemen ke 1} Next (P) Pt
head(Q) P else
if found then {sisip ditengah} Next(P) Pt
Next (tail(Q)) P Else{sisip dielemen ke 1} Next(Tail(Q)) P Tail(Q) P
Tugas 3. Insert(Q,H)
1. Bagaimana keluaran dari potongan algoritma
berikut: InitQ(Q)
InsertQ(Q,5) 1 2 3 4 5
InsertQ(Q,6) head = 3.,tail = 2.,Count =...
InsertQ(Q,7) InsertQ(Q,8)
DeleteQ(Q,X) 4. Delete(Q, ElmtQ) dari data diatas
DeleteQ(Q,Y) InsertQ(Q,X) InsertQ(Q,5) InsertQ(Q,Y+1) DeleteQ(Q,X) InsertQ(Q,Y) While no emptyQ(Q) do Delete(Q, X) Output (X) {endwhile} 2. a. Head = 1, Tail = 4
Setelah operasi InsertQ (Q,‟F‟) maka keadaan anrian menjadi
A D G M K
Head = .., Tail = ...
Overflow?
b.Head = 5, Tail = 3
Setelah operasi Delete (Q,‟ElmtQ‟) maka keadaan anrian menjadi
Head = ...., Tail = ..., elmt=...., overflow?
Head = 3, Tail = 3
Setelah operasi InsertQ (Q,‟F‟) maka keadaan anrian menjadi Head = .., Tail = ...
Overflow?
1. Bagaimana keluaran dari potongan algoritma berikut: InitQ(Q) X 5 Y 7 InsertQ(Q,X) InsertQ(Q,8) InsertQ(Q,y) DeleteQ(Q,z) InsertQ(Q,2) A B C D E A B C D E
InsertQ(Q,z) InsertQ(Q,6) If Z = 0 then
While not emptyQ9Q) do DeleteQ(Q, X)
Output (X) {endwhile} Else
Output(„selesai‟)
2. a. Nmax=5, Head = 1, Tail = 4
Setelah operasi InsertQ (Q,‟60‟) maka keadaan anrian menjadi Head = .., Tail = .., X=...
Overflow?
b. Nmax=5, Head = 1, Tail = 4
Setelah operasi DeleteQ (Q,‟elmtQ‟) maka keadaan anrian menjadi
Head = .., Tail = ..., ElmtQ=.... Overflow?
3. a. Nmax=5, Head = 5, Tail = 4
Setelah operasi InsertQ (Q,‟200‟) maka keadaan anrian menjadi
Head = .., Tail = ..., X=....,Overflow?
b. Nmax=5, Head =5, Tail = 3
10 20 30 40 50
10 20 30 40 50
Setelah operasi DeleteQ (Q,‟elmtQ‟) maka keadaan anrian menjadi
Head = .., Tail = ...,ElmtQ=...,Overflow?
4. a. Head = 1, Tail = 4
Setelah operasi InsertQ (Q,‟60‟) maka keadaan anrian menjadi
Head = .., Tail = ...,X=...,count=..., Overflow?
b. Head = 1, Tail = 3
Setelah operasi DeleteQ (Q,‟elmtQ‟) maka keadaan anrian menjadi
Head = .., Tail = .., elmtQ=...,count=..., Overflow?
5. a. Head = 3, Tail = 5
Setelah operasi InsertQ (Q,‟200‟) maka keadaan anrian menjadi
Head = .., Tail = ..., X=..., count=...,Overflow?
b. Head = 2, Tail =5 30 50 70 90 100 10 20 30 40 50 10 20 30 40 50 30 50 70 90 100 30 50 70 90 100
Setelah operasi DeleteQ (Q,‟elmtQ‟) maka keadaan anrian menjadi
Head = .., Tail = ..., elmtQ=...., count=....,Overflow?
6. a. Head = 1, Tail = 4
Setelah operasi InsertQ (Q,‟40‟) maka keadaan anrian menjadi Head = .., Tail = ..,X=...
b. Head = 1, Tail = 5
Setelah operasi DeleteQ (Q,‟60‟) maka keadaan anrian menjadi Head = .., Tail = ...,X=...
POHON (TREE)