You are on page 1of 6

‫ﻣﻌﺮﻓﻲ‬

‫ﻣﻌﺮﻓ‬
(List) ‫• ﻟﻴﺴﺖ‬
:‫ ﻫﺎي ﭘﺎﻳﻪ اي‬ADT (Stack)
(S k) ‫– ﭘﺸﺘﻪ‬
(Q
(Queue)) ‫– ﺻﻒ‬
(QUEUE) ‫ﺻﻒ‬ ‫ﻒ‬
‫ﺳﻴﺪ ﻧﺎﺻﺮ رﺿﻮي‬
email:
il razavi@comp.iust.ac.ir
i@ i i
1386

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

‫ﺻﻒ‬ ‫ﺻﻒ‬
‫ ﺻﻒ ﻟﻴﺴﺘﻲ اﺳﺖ ﻛﻪ در آن ﻋﻤﻞ درج از ﻳﻚ ﻃﺮف ﺑﻪ‬:‫• ﺗﻌﺮﻳﻒ‬ ‫• اﻧﻮاع داده اي‬
‫دﻳﮕﺮ ﺑﻪ ﺎﻧﺎم ا ا‬
‫اﺑﺘﺪا‬ ‫ﻃﺮف ﮕ‬
‫ﺣﺬف ااز ﻃ ف‬ ‫( و ﻞ‬rear) ‫اﻧﺘﻬﺎ‬
‫ﻋﻤﻞ ﺬف‬ ‫ﺎﻧﺎم ا ﺎ‬ Q: QUEUE
(FIFO ‫ )ﻟﻴﺴﺖ‬.‫ﺷﻮد‬
‫ﻲ ﻮ‬‫( اﻧﺠﺎمم ﻣﻲ‬front)
QUEUE ADT x: elementtype
elements ‫• ﻋﻤﻠﻴﺎت اﺻﻠﻲ‬
‫ﻲ ﺻﻒ‬
front
rear
MAKENULL (Q)
MAKENULL
ENQUEUE (x, Q)
ENQUEUE
DEQUEUE DEQUEUE (Q)

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


‫ﭘﻴﺎده ﺳﺎزي ﺻﻒ ﺑﻪ وﺳﻴﻠﻪ اﺷﺎره ﮔﺮ‬ ‫ﭘﻴﺎده ﺳﺎزي ﺻﻒ ﺑﻪ وﺳﻴﻠﻪ اﺷﺎره ﮔﺮ‬
front rear ‫ ﻋﻨﺼﺮ‬n ‫• ﺻﻒ ﺑﺎ‬ type celltype = record
Q element
l t: elementtype;
l tt
a1 a2 ... an
next: ^celltype
celltype
end;
front rear
Q
‫• ﺻﻒ ﺗﻬﻲ‬
QUEUE = record
front, rear: ^celltype
end;
DS course- N. Razavi - ٢٠٠٧ ۵ DS course- N. Razavi ٢٠٠٧ - ۶

‫ اﻳﺠﺎد ﻳﻚ ﺻﻒ ﺗﻬﻲ‬:‫ﻋﻤﻠﻴﺎت ﺻﻒ‬


front rear ‫ﺗﻬﻲ ﺑﻮدن ﺻﻒ‬
‫ﺑﺮرﺳﻲ ﺗﻬ‬
‫ ﺑﺮرﺳ‬:‫ﻋﻤﻠﻴﺎت ﺻﻒ‬
Q
function EMPTY (Q: QUEUE): boolean;
begin
procedure MAKENULL (var Q: QUEUE); return (Q.rear
Q rear = Q.front)
Q front)
begin end;;
new (Q.front);
Q.rear := Q.front;
T (n) ∈ Θ(1)
Q.front^.next := nil T (n) ∈ Θ(1)
end;

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


‫درج ﻳﻚ ﻋﻨﺼﺮ در ﺻﻒ‬
‫ ج‬:‫ﻋﻤﻠﻴﺎت ﺻﻒ‬ ‫ ﺣﺬف ﻳﻚ ﻋﻨﺼﺮ از ﺻﻒ‬:‫ﻋﻤﻠﻴﺎت ﺻﻒ‬
front rear front rear
Q Q

a1 a2 ... an x a1 a2 ... an

p
procedure ENQUEUE (x: elementtype; var Q: QUEUE);
procedure DEQUEUE (var Q: QUEUE);
begin
var
new (Q.rear
Q rear^.next); p: ^celltype;
Q.rear := Q.rear^.next; begin
Q rear^.element := x;
Q.rear T (n) ∈ Θ(1)
if EMPTY (Q) then
h error (“Queue
(“Q iis empty”);
”)
Q.rear^.next := nil
p := Q.front;
end;
T (n) ∈ Θ(1) Q.front := p^.next;
Dispose (p);
DS course- N. Razavi ٢٠٠٧ - ٩ end; DS course- N. Razavi ٢٠٠٧ - ١٠

‫ﺣﺬف و اﺿﺎﻓﻪ ﻋﻨﺎﺻﺮﺮ درر ﺻﻒ‬


‫ﭘﻴﺎده ﺳﺎزي ﺻﻒ ﺑﻪ وﺳﻴﻠﻪ آراﻳﻪ‬ rear rear

A A B
:‫ ﻋﻨﺎﺻﺮ ﺻﻒ در ﻳﻚ آراﻳﻪ ﻗﺮار دارﻧﺪ‬،‫• در اﻳﻦ روش ﭘﻴﺎده ﺳﺎزي‬
front front
.‫ ﺣﺎوي اﻧﺪﻳﺲ ﻋﻨﺼﺮ اول ﺻﻒ در آآراﻳﻪ اﺳﺖ‬front
f ‫– ﻣﺘﻐﻴﺮ‬
.‫آراﻳﻪ اﺳﺖ‬
‫ﻳﻲ ﺻﻒ درر ر ﻳ‬
‫اﻧﺘﻬﺎﻳﻲ‬
‫ﻳﺲ ﻋﻨﺼﺮﺮ ﻬ‬ ‫ ﺣﺎوي‬rear ‫ﻴﺮ‬
‫وي اﻧﺪﻳﺲ‬ ‫– ﻣﺘﻐﻴﺮ‬ rear rear

A B C A B C D

front front

rear rear
2

A B C D E B C D E

1
front front
MAX

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


‫ﺣﺬف و اﺿﺎﻓﻪ ﻋﻨﺎﺻﺮﺮ درر ﺻﻒ‬
rear rear
‫ﺧﺎﻟﻲ ﺑﻮدن ﺻﻒ‬
‫ﺗﺸﺨﻴﺺ ﭘﺮ و ﺧﺎﻟ‬
C D E D E

front front

rear rear
rear

F D E F G D E rear

front front
front front

‫ﺻﻒ ﭘﺮ‬
‫ﺻﻒ ﺧﺎﻟﻲ‬ ‫ﺻﻒ ﭘﺮ‬

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

‫ﭘﻴﺎده ﺳﺎزي ﺻﻒ ﺑﻪ وﺳﻴﻠﻪ آراﻳﻪ‬ ‫ﺎد ﻳﻚ ﺻﻒ ﺗﺗﻬﻲ‬


‫اﻳﺠﺎد‬
‫ اﻳ‬:‫ﺎزي ﻋﻤﻠﻴﺎت ﺻﻒ‬
‫ﭘﻴﺎده ﺳﺎزي‬
type procedure MAKENULL (var Q: QUEUE);
QUEUE = record d begin
front, rear: 1..MAX Q rear := MAX;
Q.rear
end; Q.front := 1
Q
end;
var
space: array[1..MAX] of elementtype;

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


‫ﭘﻴﺎده ﺳﺎزي ﻋﻤﻠﻴﺎت ﺻﻒ‬ ‫ ﺑﺮرﺳﻲ ﺗﺗﻬﻲ ﺑﻮدن ﻒ‬:‫ﺻﻒ‬
‫ﺻﻒ‬ ‫ﻋﻤﻠﻴﺎت ﻒ‬
‫ﺳﺎزي ﻠ ﺎت‬
‫ﭘﻴﺎده ﺎز‬
‫ﺎ‬

function NEXT (i: integer): integer; function EMPTY (Q: QUEUE): boolean;
begin begin
return ((i mod MAX) + 1 ) return ( NEXT (Q.rear
Q rear) = Q.front
Q front )
end;; end;;

rear

front

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

‫ ﺑﺮرﺳﻲ ﭘﺮ ﺑﻮدن ﻒ‬:‫ﺻﻒ‬


‫ﺻﻒ‬ ‫ﻋﻤﻠﻴﺎت ﻒ‬
‫ﺳﺎزي ﻠ ﺎت‬
‫ﭘﻴﺎده ﺎز‬
‫ﺎ‬ ‫ﻋﻨﺼﺮ در ﻒ‬
‫ﺻﻒ‬ ‫ﻚ ﻨ‬‫ درج ﻳﻚ‬:‫ﺻﻒ‬
‫ﻋﻤﻠﻴﺎت ﻒ‬
‫ﺳﺎزي ﻠ ﺎت‬
‫ﭘﻴﺎده ﺎز‬
‫ﺎ‬

function FULL (Q: QUEUE): boolean; procedure ENQUEUE (x: elementtype; var Q: QUEUE);
begin
begin
return ( NEXT (NEXT (Q.rear
Q rear)) = Q.front
Q front ) if FULL (Q) then
end;; error ((“Queue
Queue is full
full”);
);
Q.rear := NEXT (Q.rear);
space [Q.rear
Q ] := x
rear
end;
front

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


‫ﻋﻨﺼﺮ از ﻒ‬
‫ﺻﻒ‬ ‫ﻚ ﻨ‬‫ﺣﺬف ﻳﻚ‬
‫ﺻﻒ‪ :‬ﺬف‬
‫ﻋﻤﻠﻴﺎت ﻒ‬
‫ﺳﺎزي ﻠ ﺎت‬
‫ﭘﻴﺎده ﺎز‬
‫ﺎ‬ ‫ﺗﻤﺮﻳﻦ‬
‫;)‪procedure DEQUEUE (var Q: QUEUE‬‬ ‫• ﺻﻒ دوﻃﺮﻓﻪ )‪ (Double Ended QUEue‬ﺻﻔﻲ اﺳﺖ ﻛﻪ‬
‫داد‪.‬‬
‫اﻧﺠﺎم ا‬
‫ﻃﺮف آآن اﻧ ﺎ‬
‫ﺗﻮان ااز ﻫﺮ دو ﻃ ف‬
‫ﺣﺬف ارا ﻣﻲ ﺗ ا‬
‫ﻋﻤﻞ درج و ﺬف‬
‫ﻞ‬
‫‪begin‬‬ ‫ﺳﺎﺧﺘﻤﺎن داده و ﻋﻤﻠﻴﺎت ﻣﺮﺑﻮط ﺑﻪ ﺻﻒ دوﻃﺮﻓﻪ را ﭘﭘﻴﺎده ﺳﺎزي‬
‫‪if EMPTY (Q) then‬‬ ‫ﻧﻤﺎﻳﻴﺪ‪.‬‬
‫‪error ((“Queue‬‬
‫‪Queue is empty‬‬
‫;)”‪empty‬‬
‫;)‬
‫)‪Q.front := NEXT (Q.front‬‬
‫;‪end‬‬
‫‪d‬‬

‫‪DS course- N. Razavi ٢٠٠٧ -‬‬ ‫‪٢١‬‬ ‫‪DS course- N. Razavi - ٢٠٠٧‬‬ ‫‪٢٢‬‬

You might also like