• Tidak ada hasil yang ditemukan

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)

Dokumen terkait