3 queue

6

Click here to load reader

Upload: ebrahimipour1360

Post on 27-Apr-2015

47 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 3 Queue

ADT هاي پايه اي:(QUEUE)صف (QUEUE)ف

سيد ناصر رضويi@ i iil [email protected]: 1386

معرفيمعرف(List)ليست •

(S k) (Stack)پشته –Q)(Queue)صف – )

DS course- N. Razavi - ٢٠٠٧ ٢

صفصف به طرف يك از درج عمل آن در كه است ليستي صف :تعريف•

اا )ا فاذفل( ااگط ا ابتدا نام بهديگر طرف از حذف عمل و(rear)انتها نام(front)ليست( .شود مي انجام FIFO(

QUEUE ADT( ويم(

elements

QUEUE ADT

frontrear

MAKENULLENQUEUEENQUEUEDEQUEUE

DS course- N. Razavi - ٢٠٠٧ ٣

صفصفاي داده انواع•

Q: QUEUEx: elementtypex: elementtype

صف اصلي عمليات• يMAKENULL (Q)ENQUEUE (x, Q)DEQUEUE (Q)DEQUEUE (Q)

DS course- N. Razavi - ٢٠٠٧ ۴

Page 2: 3 Queue

گر اشاره وسيله به صف سازي پياده سازي صف به وسيله اشاره گرپيادهrearfrontعنصر n با صف•

Q

a1 a2 an. . .

Qتهي صف•rearfront

DS course- N. Razavi - ٢٠٠٧ ۵

گر اشاره وسيله به صف سازي پياده سازي صف به وسيله اشاره گرپيادهtype celltype = record

l t l ttelement: elementtype;next: ^celltypenext: celltype

end;

QUEUE = recordQUEUE = recordfront, rear: ^celltype

end;

DS course- N. Razavi - ٢٠٠٧ ۶

ايجاد يك صف تهي: عمليات صفQ

rearfront

Q

procedure MAKENULL (var Q: QUEUE);

beginnew (Q.front);Q.rear := Q.front; )1()( Θ∈nTQ.front^.next := nil

end;

DS course- N. Razavi - ٢٠٠٧ ٧

صف صفعمليات بودن ته بررس بررسي تهي بودن صف: عمليات صفfunction EMPTY (Q: QUEUE): boolean;begin

return (Q rear = Q front)return (Q.rear = Q.front)end;;

)1()( Θ∈nT

DS course- N. Razavi - ٢٠٠٧ ٨

Page 3: 3 Queue

جدرج يك عنصر در صف: عمليات صفQ

rearfront

a1 a2 an. . . x

procedure ENQUEUE (x: elementtype; var Q: QUEUE);

begin

new (Q rear^ next);new (Q.rear .next);Q.rear := Q.rear^.next;Q rear^ element := x;Q.rear .element := x;Q.rear^.next := nil

end;end;)1()( Θ∈nT

DS course- N. Razavi - ٢٠٠٧ ٩

حذف يك عنصر از صف: عمليات صفQ

rearfront

a1 a2 an. . .

p

procedure DEQUEUE (var Q: QUEUE);var

p: ^celltype;begin

if EMPTY (Q) h (“Q i ”))1()( Θ∈nT

p: ^celltype;

if EMPTY (Q) then error (“Queue is empty”);

p := Q.front;

)()(

Q.front := p^.next;Dispose (p);

DS course- N. Razavi - ٢٠٠٧ ١٠

Dispose (p);end;

آرايه وسيله به صف سازي پياده سازي صف به وسيله آرايهپياده:دارند قرار آرايه يك در صف عناصر سازي، پياده روش اين در•

fآ .است آرايه درصف اول عنصر انديس حاوي front متغير–.است آرايه در صف انتهايي عنصر انديس حاوي rear متغير– ييريسويير يره ر

2

MAX

1

DS course- N. Razavi - ٢٠٠٧ ١١

MAX

رحذف و اضافه عناصر در صف ر وrear rear

A

front

A B

frontfront front

rear rear

A B C A B C D

front front

A B C D E

rear

B C D E

rear

A B C D E

front

B C D E

front

DS course- N. Razavi - ٢٠٠٧ ١٢

Page 4: 3 Queue

رحذف و اضافه عناصر در صف ر وrear rear

C D E D E

front front

rear rear

F D E F G D E

front front

صف پر

DS course- N. Razavi - ٢٠٠٧ ١٣

صف بودن خال و پر تشخيص پر و خالي بودن صفتشخيص

rear

rear

front front

صف خالي صف پر

DS course- N. Razavi - ٢٠٠٧ ١۴

آرايه وسيله به صف سازي پياده سازي صف به وسيله آرايهپيادهtype

QUEUE dQUEUE = recordfront, rear: 1..MAXfront, rear: 1..MAX

end;

varvarspace: array[1..MAX] of elementtype;

DS course- N. Razavi - ٢٠٠٧ ١۵

صف عمليات ازي تپياده صف يك اد اي ايجاد يك صف تهي: پياده سازي عمليات صفprocedure MAKENULL (var Q: QUEUE);begin

Q rear := MAX;Q.rear := MAX;Q.front := 1Q

end;

DS course- N. Razavi - ٢٠٠٧ ١۶

Page 5: 3 Queue

صف عمليات سازي پياده سازي عمليات صفپيادهfunction NEXT (i: integer): integer;begin

return ((i mod MAX) + 1 )return ((i mod MAX) + 1 )end;;

DS course- N. Razavi - ٢٠٠٧ ١٧

ف ات ل از فا ت بررسي تهي بودن صف: پياده سازي عمليات صفfunction EMPTY (Q: QUEUE): boolean;begin

return ( NEXT (Q rear) = Q front )return ( NEXT (Q.rear) = Q.front )end;;

front

rear

DS course- N. Razavi - ٢٠٠٧ ١٨

ف ات ل از فا بررسي پر بودن صف: پياده سازي عمليات صفfunction FULL (Q: QUEUE): boolean;begin

return ( NEXT (NEXT (Q rear)) = Q front )return ( NEXT (NEXT (Q.rear)) = Q.front )end;;

rear

front

DS course- N. Razavi - ٢٠٠٧ ١٩

ف ات ل از فا ن ك درج يك عنصر در صف:پياده سازي عمليات صفprocedure ENQUEUE (x: elementtype; var Q: QUEUE);

beginif FULL (Q) then

error (“Queue is full”);error ( Queue is full );Q.rear := NEXT (Q.rear);

[Q ]space [Q.rear] := xend;

DS course- N. Razavi - ٢٠٠٧ ٢٠

Page 6: 3 Queue

ف ات ل از فا از ن ك ذف حذف يك عنصر از صف: پياده سازي عمليات صفprocedure DEQUEUE (var Q: QUEUE);

beginif EMPTY (Q) then

error (“Queue is empty”);error ( Queue is empty );Q.front := NEXT (Q.front)dend;

DS course- N. Razavi - ٢٠٠٧ ٢١

تمرينتمرينDouble) دوطرفه صف• Ended QUEue) كه است صفي

ااذفل فات اآط اان .داد انجام آن طرف دو هر از توان مي را حذف و درج عملپ سازيپياده را دوطرفه صف به مربوط عمليات و داده ساختمان

.نماييد

DS course- N. Razavi - ٢٠٠٧ ٢٢