You are on page 1of 15

Bi 7: Hng i

Ging vin: Hong Th ip Khoa Cng ngh Thng tin i hc Cng Ngh

Ngun tham kho chnh: http://www.cs.nyu.edu/~melamed/courses/102/lectures/ http://users.encs.concordia.ca/~dssouli/COEN352.html

Tng quan

diepht@vnu

Hng i
Hng i l g?
L mt danh sch nhng cc php ton ch c thc hin hai nh ca danh sch. Mt nh gi l u hng, nh cn li gi l cui hng.

Tnh cht
Vo trc ra trc (First In First Out: FIFO)

diepht@vnu

KDLTT hng i
Tru tng ha cu trc hng i
c t d liu
A = (a0, a1, , an) trong a0 l u hng i, an l cui hng i

c t cc php ton 1. Thm phn t x vo cui hng i: enqueue(x) 2. Loi phn t u hng i: dequeue() 3. Kim tra hng i c rng hay khng: isEmpty() 4. Kim tra hng i ht ch hay cha: isFull() 5. m s phn t ca hng i: size() 6. Tr v phn t u hng i: front()

diepht@vnu

Giao din C++ ca KDLTT hng i


template <typename Object> class Queue { public: int size(); bool isEmpty(); Object& front() throw(EmptyQueueException); void enqueue(Object o); Object dequeue() throw(EmptyQueueException); };

diepht@vnu

Minh ha cc thao tc
thao tc enqueue(10) enqueue(5) front() dequeue() size() dequeue() front() dequeue() isEmpty() enqueue(8) li: hng i rng li: hng i rng true 1 10 output hng i (10) (10, 5) (10, 5) (5) (5) () () () () (8)

diepht@vnu

ng dng ca hng i
Trc tip
Danh sch hng i Qun l truy cp ti cc ti nguyn dng chung (v d my in) Multiprogramming

Gin tip
Cu trc d liu ph tr cho cc thut ton Mt phn ca CTDL khc

diepht@vnu

Ci t hng i bi mng
Dng mt mng c N theo kiu vng trn Dng 2 bin theo di u (front) v ui (rear) hng i
f l ch s ca phn t front r l ch s ca lin sau phn t rear

r trong mng s lun rng


cu hnh bnh thng Q 0 1 2 f cu hnh bc vng quanh Q 0 1 2
diepht@vnu

f
8

Cc thao tc
Ta s dng php chia ly d
Algorithm size() return (N f + r) mod N Algorithm isEmpty() return (f = r)

Q 0 1 2 Q 0 1 2 r f f r

diepht@vnu

Cc thao tc (2)
Thao tc enqueue nm mt ngoi l nu mng y y l ngoi l do ci t
Algorithm enqueue(o) if size() = N 1 then throw FullQueueException else Q[r] o r (r + 1) mod N

Q 0 1 2 Q 0 1 2 r f f r

diepht@vnu

10

Cc thao tc (3)
Thao tc dequeue nm ngoi l nu hng i rng y l ngoi l xc nh cho KDLTT hng i
Algorithm dequeue() if isEmpty() then throw EmptyQueueException else o Q[f] f (f + 1) mod N return o

Q 0 1 2 Q 0 1 2
diepht@vnu

f
11

Ci t hng i bi DSLK n
Ta c th ci t hng i bi mt danh sch lin kt n
Phn t front c lu nt u Phn t rear c lu nt cui

Khng gian s dng l O(n) v mi thao tc thc hin trong thi gian O(1)
r

cc nt
f

diepht@vnu

cc phn t

12

ng dng: Lp lch quay vng (Round Robin Schedulers)


C th ci t mt b lp lch quay vng bng mt hng i, Q, bng vic lp li cc bc sau:
1. 2. 3. e = Q.dequeue() Service element e Q.enqueue(e)

The Queue

1. Deque the next element

2 . Service the next element Shared Service

3. Enqueue the serviced element

diepht@vnu

13

Bi tp
1. Vit chng trnh ci t cu trc hng i bng mng. 2. Vit chng trnh ci t cu trc hng i bng danh sch lin kt n. 3. Tnh phc tp cho ci t cu 1, 2 4. Ci t hng i bng mng vng.

diepht@vnu

14

Chun b bi ti
c Chng 8 gio trnh (Cy)

diepht@vnu

15

You might also like