Lecture 4
Lecture 4
3. Queues
اﻟﻄﺎﺑﻮر -:هﻮ هﻴﻜﻞ ﺑﻴﺎﻧﻲ ﻟﻠﺨﺰن اﻟﻤﺘﺴﻠﺴﻞ ﻓﻲ اﻟﺬاآﺮة وهﻮ ﻗﺎﺋﻤﺔ ﺧﻄﻴﺔ ﺗﺤﺘﻮي ﻋﻠﻰ ﻧﻬﺎﻳﺘﻴﻦ اﻟﻨﻬﺎﻳﺔ اﻷوﻟﻰ ﺗﺪﻋﻰ) ( Rearوﻋﻦ ﻃﺮﻳﻘﻬﺎ
ﺗﺘﻢ ﻋﻤﻠﻴﺔ إدﺧﺎل أو إﺿﺎﻓﺔ اﻟﺒﻴﺎﻧﺎت وﻣﺆﺷﺮ اﻻﺿﺎﻓﺔ هﻮ Rواﻟﻨﻬﺎﻳﺔ اﻟﺜﺎﻧﻴﺔ ﺗﺪﻋﻰ ) (Frontوﻋﻦ ﻃﺮﻳﻘﻬﺎ ﺗﺘﻢ ﻋﻤﻠﻴﺔ اﻟﺤﺬف وﻣﺆﺷﺮ
اﻟﺤﺬف هﻮ .Fوﻳﻌﻤﻞ اﻟﻄﺎﺑﻮر ﺑﺎﺳﺘﺨﺪام ﺳﺘﺮاﺗﺠﻴﺔ ) . First Input First Output(FIFOوﻳﺘﻢ ﺗﻤﺜﻴﻠﻪ آﻤﺼﻔﻮﻓﺔ أﺣﺎدﻳﺔ ذات
ﻣﺆﺷﺮﻳﻦ هﻤﺎ ) (R,Fآﻤﺆﺷﺮات ﻟﺘﻠﻚ اﻟﻤﺼﻔﻮﻓﺔ.
A. Simple Queue
ﻳﻄﺒﻖ اﻟﻄﺎﺑﻮر ﺑﺎﺳﺘﺨﺪام اﻟﻤﺼﻔﻮﻓﺔ اﻷﺣﺎدﻳﺔ ﺑﺎﻟﺴﻌﺔ اﻟﻤﻄﻠﻮﺑﺔ وﺑﺎﻟﻨﻮع اﻟﻤﻨﺎﺳﺐ ﻟﻨﻮع اﻟﺒﻴﺎﻧﺎت اﻟﺘﻲ ﺳﺘﺨﺰن ﻓﻴﻪ ﻣﻊ اﺳﺘﺨﺪام-:
.1اﻟﻤﺘﻐﻴﺮ ) ( Rآﻤﺆﺷﺮ ﻳﺸﻴﺮ اﻟﻰ ﻣﻮﻗﻊ اﻟﻌﻨﺼﺮ اﻻﺧﻴﺮ ﻓﻲ اﻟﻄﺎﺑﻮر
. .2اﻟﻤﺘﻐﻴﺮ ) ( Fآﻤﺆﺷﺮ ﻳﺸﻴﺮ اﻟﻰ ﻣﻮﻗﻊ اﻟﻌﻨﺼﺮ اﻻول ﻓﻲ اﻟﻄﺎﺑﻮر
ان ﻗﻴﻤﺔ آﻞ ﻣﻦ اﻟﻤﺘﻐﻴﺮﻳﻦ ) (F,Rﺗﺴﺎوي ﺻﻔﺮًا ﻓﻲ اﻟﺒﺪاﻳﺔ ﻋﻨﺪﻣﺎ ﻳﻜﻮن اﻟﻄﺎﺑﻮر ﺧﺎﻟﻴًﺎ ﻣﻦ اﻟﻌﻨﺎﺻﺮ .ﺗﻨﻔﺬ ﻋﻤﻠﻴﺔ اﺿﺎﻓﺔ ﻋﻨﺼﺮ اﻟﻰ
اﻟﻄﺎﺑﻮر ﺑﻌﺪ ﺗﺤﺪﻳﺪ ﻗﻴﻤﺔ اﻟﻤﺆﺷﺮ Rﻟﻴﺸﻴﺮ اﻟﻰ ﻣﻮﻗﻊ اﻟﻌﻨﺼﺮ اﻟﺠﺪﻳﺪ ﺑﻌﺪ ﻣﻮﻗﻊ اﺧﺮ ﻋﻨﺼﺮ اﻣﺎ ﺗﻨﻔﻴﺬ ﻋﻤﻠﻴﺔ اﻟﺤﺬف ﻟﻌﻨﺼﺮ ﻣﻦ اﻟﻄﺎﺑﻮر
ﻓﻴﺴﺘﺨﺪم اﻟﻤﺆﺷﺮ Fﻟﻴﺸﻴﺮ اﻟﻰ ﻣﻮﻗﻊ اﻟﻌﻨﺼﺮ اﻟﺘﺎﻟﻲ ﺑﻌﺪ ﺣﺬف اﻟﻌﻨﺎﺻﺮ ﻓﻲ اﻟﻤﻘﺪﻣﺔ.
ﻼ ﻣﻦ F& Rﻋﻨﺪ اﺟﺮاء آﻞ ﻣﻦ اﻟﻌﻤﻠﻴﺎت اﻟﺘﺎﻟﻴﺔ-:
ﻣﺜﺎل -:ﻃﺎﺑﻮر ﻳﺤﺘﻮي ﻋﻠﻰ ﺳﺖ ﻣﻮاﻗﻊ ﺧﺰﻧﻴﺔ وﺿﺢ ﻗﻴﻤﺔ آ ً
.1إﺿﺎﻓﺔ ﻋﻨﺼﺮ .2إﺿﺎﻓﺔ ﻋﻨﺼﺮ . 3اﺿﺎﻓﺔ ﻋﻨﺼﺮ .4ﺣﺬف ﻋﻨﺼﺮ .5اﺿﺎﻓﺔ ﻋﻨﺼﺮ
.9اﺿﺎﻓﺔ ﻋﻨﺼﺮ .10إﺿﺎﻓﺔ ﻋﻨﺼﺮ .6اﺿﺎﻓﺔ ﻋﻨﺼﺮ .7ﺣﺬف ﻋﻨﺼﺮ .8ﺣﺬف ﻋﻨﺼﺮ
1
R F
insert D
D C B
R F insert E
E D C B
R F delete B
E D C
R F delete C
E D
R F insert F
F E D
R F ”insert G “overflow
F E D
2
. 2اﺧﺬ اﻟﻌﻨﺼﺮ ﻣﻦ اﻟﻤﻮﻗﻊ اﻟﺬي ﻳﺸﻴﺮ اﻟﻴﻪ اﻟﻤﺆﺷﺮ ) (Frontوﺧﺰﻧﻪ وﻗﺘﻴًﺎ ﻓﻲ ﻣﺘﻐﻴﺮ ﻣﺴﺘﻘﻞ .
.3ﺗﺤﺪﻳﺚ ﻗﻴﻤﺔ اﻟﻤﺆﺷﺮ) (F=F +1ﻟﻴﺸﻴﺮ اﻟﻰ ﻣﻮﻗﻊ اﻟﻌﻨﺼﺮ اﻟﺘﺎﻟﻲ.
Algorithm delete of Queue
]1. [Underflow
If F=0 Then
)" Print ("Queue is underflow
End if
]2. [Delete Element
Y )Q(F
]?3. [Queue Empty
If F=R then
F R 0
Else
F F+1
End if
End.
اﻟﻤﺸﻜﻠﺔ ﻓﻲ ﺧﻮارزﻣﻴﺔ اﻟﻄﺎﺑﻮر اﻟﺒﺴﻴﻂ-:
هﻮ ﻋﻨﺪﻣﺎ ﻳﺤﺬف ﻋﻨﺼﺮ ﻣﻦ ﺑﺪاﻳﺔ اﻟﻄﺎﺑﻮر ﻧﺤﺘﺎج إﻟﻰ إزاﺣﺔ اﻟﻌﻨﺎﺻﺮ آﺎﻓﺔ ﻣﻮﻗﻊ واﺣﺪ ﻟﻠﻴﺴﺎر وهﺬا ﻳﺤﺘﺎج إﻟﻰ ﺗﻜﺮار اﻟﻌﻤﻠﻴﺔ ﺑﺤﺴﺐ ﺣﺠ ﻢ
اﻟﻄﺎﺑﻮر) وهﺬا ﻳﺄﺧﺬ وﻗﺖ آﻠﻤﺎ آﺎن اﻟﺤﺠﻢ اآﺒﺮ( وﺑﺬﻟﻚ ﻧﺤﺘﺎج إﻟﻰ ﺧﻮارزﻣﻴﺔ ﺟﺪﻳﺪة ﻓﻴﻬﺎ أﺳﻠﻮب اﻟﺘﺪوﻳﺮ.
B. Circular Queue
اﻟﻄﺎﺑﻮر اﻟﺪاﺋﺮي -:ﻧﺴﺘﻄﻴﻊ اﺳﺘﺨﺪام اﻟﻄﺎﺑﻮر اﺳﺘﺨﺪاﻣًﺎ داﺋﺮﻳًﺎ وذﻟﻚ ﺑﺎن ﻧﺴﻤﺢ ﻟﻠﻤﺆﺷﺮ) (Rﺑﺎﻟﺪورًا اﻟﻰ اﻟﻨﻬﺎﻳﺔ اﻻﻣﺎﻣﻴﺔ ﻟﻠﻄﺎﺑﻮر ﻋﻨﺪﻣﺎ
ﻳﻜﻮن هﻨﺎﻟﻚ ﻣﻮاﻗﻊ ﺧﺎﻟﻴﺔ ﻓﻴﻬﺎ آﻤﺎ ان اﻟﻤﺆﺷﺮ ) (Fﻳﺸﻴﺮ اﻟﻰ ﻣﻮﻗﻊ اول ﻋﻨﺼﺮ ﻓﻲ اﻟﻄﺎﺑﻮر واﻟﻤﺆﺷﺮ ) (Rﻳﺸﻴﺮ اﻟﻰ اﻟﻌﻨﺼﺮ اﻻﺧﻴﺮ ﻓﻲ
اﻟﻄﺎﺑﻮر .
وﻋﻨﺪﻣﺎ ﻳﺼﻞ اﻟﻤﺆﺷﺮ) (Rاﻟﻰ اﻟﻤﻮﻗﻊ اﻻﺧﻴﺮ ﻓﻲ اﻟﻄﺎﺑﻮر اي ) (R=Nﻧﺠﻌﻠﻪ ﻳﺪور اﻟﻰ اﻟﺒﺪاﻳﺔ اي ) (R=1وآﺬﻟﻚ اﻟﺤﺎل ﺑﺎﻟﻨﺴﺒﺔ ﻟﻤﺆﺷﺮ
) (Fآﻤﺎ ان اآﺒﺮﻋﺪد ﻣﻦ اﻟﻌﻨﺎﺻﺮ ﻳﺴﺘﻮﻋﺐ اﻟﻄﺎﺑﻮر هﻮ ) (N-1ﺣﻴﺚ ان Nﻳﻤﺜﻞ ﺣﺠﻢ اﻟﻄﺎﺑﻮر ﻻن اﻟﻤﺆﺷﺮ Fﻳﺸﻴﺮ اﻟﻰ اﻟﻤﻮﻗﻊ اﻟﺨﺎﻟﻲ
اﻣﺎم اول ﻋﻨﺼﺮ ﻓﻲ اﻟﻄﺎﺑﻮر .آﻤﺎ ﻳﻤﻜﻦ ان ﻳﻜﻮن ) (Nﻋﻨﺪﻣﺎ Fﻳﺸﻴﺮ إﻟﻰ ﻣﻮﻗﻊ أول ﻋﻨﺼﺮ ﻓﻲ اﻟﻄﺎﺑﻮر.
3
Q[4] Q[3] Q[2] Q[1]
RF insert A
A
R F insert B
B A
R F insert C
C B A
R F insert D
D C B A
R F delete A
D C B
F R insert E
D C B E
F R delete B
D C E
F R insert F
D C F E
F R delete C
D F E
R F delete D
F E
RF delete E
F
delete F
4
Algorithm delete of Circular Queue
]1. [Underflow
If F=0 Then
)" Print ("Queue is underflow
End if
]2. [Delete Element
Y )Q(F
]?3. [Queue Empty
If F=R then
F R 0
]4. [Increment Front Pointer
If F=N Then
F 1
Else
F F+1
End if
End.
C. Double Ended Queue
اﻟﻄﺎﺑﻮر اﻟﻤﺰدوج -:هﻮ هﻴﻜﻞ ﺑﻴﺎﻧﻲ ﺗﺴﻠﺴﻠﻲ ﻳﻤﻜﻦ إﺿﺎﻓﺔ او ﺣﺬف اﻟﻌﻨﺼﺮ ﻣﻦ اي ﻣﻦ ﻃﺮﻓﻴﻪ وﻳﻤﺜﻞ ﺑﻤﺼﻔﻮﻓﺔ أﺣﺎدﻳﺔ ﻣﻊ أرﺑﻌﺔ ﻣﺆﺷﺮات
-:F1ﻣﺆﺷﺮ ﻳﺸﻴﺮ اﻟﻰ ﻣﻮﻗﻊ اول ﻋﻨﺼﺮ ﻓﻲ اﻟﻄﺎﺑﻮر ﻋﻨﺪ اﺳﺘﺨﺪاﻣﻪ ﻣﻦ ﺟﻬﺔ اﻟﻴﻤﻴﻦ.
-:R1ﻣﺆﺷﺮ ﻳﺸﻴﺮ اﻟﻰ ﻣﻮﻗﻊ اﺧﺮ ﻋﻨﺼﺮ ﻓﻲ اﻟﻄﺎﺑﻮر ﻋﻨﺪ اﺳﺘﺨﺪاﻣﻪ ﻣﻦ ﺟﻬﺔ اﻟﻴﻤﻴﻦ.
-:F2ﻣﺆﺷﺮ ﻳﺸﻴﺮ اﻟﻰ ﻣﻮﻗﻊ اول ﻋﻨﺼﺮ ﻓﻲ اﻟﻄﺎﺑﻮر ﻋﻨﺪ اﺳﺘﺨﺪاﻣﻪ ﻣﻦ ﺟﻬﺔ اﻟﻴﺴﺎر.
-:R2ﻣﺆﺷﺮ ﻳﺸﻴﺮ اﻟﻰ ﻣﻮﻗﻊ اﺧﺮ ﻋﻨﺼﺮ ﻓﻲ اﻟﻄﺎﺑﻮر ﻋﻨﺪ اﺳﺘﺨﺪاﻣﻪ ﻣﻦ ﺟﻬﺔ اﻟﻴﺴﺎر.
F2 R2
]Q[6 ]Q[5 ]Q[4 ]Q[3 ]Q[2 ]Q[1
C O M P
R1 F1
ﻣﺜﺎل -:ﺳﺖ ﻋﻨﺎﺻﺮ ﺑﻴﺎﻧﻴﺔ هﻲ F, E, D, C, B, Aﺧﺰﻧﺖ ﺣﺴﺐ اﻟﺘﺮﺗﻴﺐ ﻓﻲ ﻃﺎﺑﻮر ﻣﺰدوج وﺿﺢ ﻋﻤﻠﻴﺘﻲ اﻹﺿﺎﻓﺔ واﻟﺤﺬف ﻟﻜﻞ ﻣﻦ
هﺬﻩ اﻟﻌﻨﺎﺻﺮ ﻋﻠﻤ ًﺎ أﻧﻬﺎ ﺧﺮﺟﺖ ﺑﺎﻟﺘﺴﻠﺴﻞ اﻟﺘﺎﻟﻲ -:E, B, F, D,C, A
R2 F2
C D E F B A
F1 R1
5
R1=1 insert A
R1=2 insert B
R2=6 Insert C
R2=5 insert D
R2=4 insert E
F1=5 delete E
F2=1 delete B
R2=4 insert F
F1=5 delete F
F1=6 delete D
F1=0 delete C
F2=0 delete A
f1 = 0: f2 = 0: r1 = 0: r2 = 0
6
'*********************************INSERT
MsgBox (" insert element to queue")
For k = 1 To 2
If k = 1 And Check1(0) = 1 Then
z = InputBox("how many the number do you want insert")
For I = 1 To z
If r1 = n Then
MsgBox (" Q is overflow")
Else
y = InputBox("give item")
r1 = r1 + 1
q(r1) = y
Text2(I - 1) = q(r1)
If f1 = 0 Then
f1 = 1
End If
f2 = r1
r2 = f1
MsgBox ("F1=" & f1 & " R1=" & r1 & " F2=" & f2 & " R2=" & r2)
End If
Next
If k = 2 And Check1(1) = 1 Then
If (f1 = 0) And (r2 = 0) Then
r2 = n + 1
z = InputBox("how many the number do you want insert")
For I = 1 To z
If r2 = 1 Then
MsgBox ("queue is overflow")
Else
y = InputBox("give item")
r2 = r2 - 1
q(r2) = y
Text2(I - 1) = q(r2)
If f2 = 0 Then
f2 = n
End If
f1 = r2
r1 = f2
MsgBox ("F1=" & f1 & " R1=" & r1 & " F2=" & f2 & " R2=" & r2)
End If
Next
End If
End If
End If
Next
'***************************************************DELETE
MsgBox ("delete element from queue")
For kk = 1 To 2
If kk = 1 And Check2(0) = 1 Then
w = InputBox("how many the number do you want deleting")
7
For I = 1 To w
If f1 = 0 Then
MsgBox (" Q is underflow")
Else
Text1(I - 1) = (q(f1))
Text2(I - 1) = ""
If f1 = r1 Then
f1 = 0: r2 = 0: f2 = 0: r1 = 0
Else
f1 = f1 + 1
r2 = f1
End If
End If
MsgBox ("F1=" & f1 & " R1=" & r1 & " F2=" & f2 & " R2=" & r2)
Next
End If
If (k = 1) And (Check2(1) = 1) Then
w = InputBox("how many the number do you want deleting")
For I = 1 To w
If f2 = 0 Then
MsgBox (" Q is underflow")
Else
Text2(I - 1) = (q(f2))
If f2 = r2 Then
f1 = 0: r2 = 0: f2 = 0: r1 = 0
Else
f2 = f2 - 1
r1 = f2
End If
End If
MsgBox ("F1=" & f1 & " R1=" & r1 & " F2=" & f2 & " R2=" & r2)
Next
End If
Next
End Sub
Private Sub Command2_Click()
End
End Sub