You are on page 1of 8

‫‪Data Structures‬‬

‫‪Notes for Lecture 4‬‬


‫‪Linear Data Structures‬‬
‫‪By‬‬
‫‪Samaher Hussein Ali‬‬
‫‪2007-2008‬‬

‫‪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‬ﺣﺬف ﻋﻨﺼﺮ‬

‫]‪Q[6‬‬ ‫]‪Q[5‬‬ ‫]‪Q[4‬‬ ‫]‪Q[3‬‬ ‫]‪Q[2‬‬ ‫]‪Q[1‬‬ ‫‪F=R=0‬‬

‫‪RF‬‬ ‫‪insert A‬‬


‫‪A‬‬
‫‪R‬‬ ‫‪F‬‬ ‫‪insert B‬‬
‫‪B‬‬ ‫‪A‬‬
‫‪R‬‬ ‫‪F‬‬ ‫‪insert C‬‬
‫‪C‬‬ ‫‪B‬‬ ‫‪A‬‬
‫‪R‬‬ ‫‪F‬‬ ‫‪delete A‬‬
‫‪C‬‬ ‫‪B‬‬

‫‪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‬‬

‫ﻋﻤﻠﻴﺔ إﺿﺎﻓﺔ ﻋﻨﺼﺮ إﻟﻰ اﻟﻄﺎﺑﻮر ﺗﻌﺘﻤﺪ ﻋﻠﻰ‪-:‬‬


‫‪ . 1‬اﻟﺘﺤﻘﻖ ﺑﺄن اﻟﻄﺎﺑﻮر ﻏﻴﺮ ﻣﻤﻠﻮء أي ان ) ‪ ( R<>N‬ﻟﺘﺠﻨﺐ ﺣﺎﻟﺔ) اﻻﻣﺘﻼء( وﺗﻌﺬر ﺗﻨﻔﻴﺬ ﻋﻤﻠﻴﺔ اﻻﺿﺎﻓﺔ ﻋﻨﺪ ذﻟﻚ‪.‬‬
‫‪ . 2‬ﺗﺤﺪﻳﺚ ﻗﻴﻤﺔ اﻟﻤﺆﺷﺮ ) ‪ (R:=R+1‬ﻟﻴﺸﻴﺮ اﻟﻰ اﻟﻤﻮﻗﻊ اﻟﺘﺎﻟﻲ‪.‬‬
‫‪ .3‬اﺿﺎﻓﺔ اﻟﻌﻨﺼﺮ اﻟﺠﺪﻳﺪ ﻓﻲ اﻟﻤﻮﻗﻊ اﻟﺠﺪﻳﺪ‪.‬‬
‫‪Algorithm Insert of Queue‬‬
‫]‪1. [Overflow‬‬
‫‪If R ≥ N Then‬‬
‫)"‪Print ("Queue is overflow‬‬
‫‪End if‬‬
‫]‪2. [Increment Rear Pointer‬‬
‫‪R‬‬ ‫‪R+1‬‬
‫]‪3. [Insert Element‬‬
‫)‪Q(R‬‬ ‫‪Y‬‬
‫]?‪4. [Is Front Pointer Property set‬‬
‫‪If F=0 then‬‬
‫‪F‬‬ ‫‪1‬‬
‫‪End if‬‬
‫‪End.‬‬
‫ﻋﻤﻠﻴﺔ ﺣﺬف ﻋﻨﺼﺮ ﻣﻦ اﻟﻄﺎﺑﻮر ﺗﻌﺘﻤﺪ ﻋﻠﻰ‪-:‬‬
‫‪ .1‬اﻟﺘﺤﻘﻖ ﺑﺄن اﻟﻄﺎﺑﻮر ﻏﻴﺮﻓﺎرغ اي ان) ‪ ( F<>0‬ﻟﺘﺠﻨﺐ ﺣﺎﻟﺔ)ﺧﻠﻮ اﻟﻄﺎﺑﻮر ﻣﻦ اﻟﻌﻨﺎﺻﺮ ( وﺗﻌﺬر ﺗﻨﻔﻴﺬ ﻋﻤﻠﻴﺔ اﻟﺤﺬف ﻋﻨﺪ ذﻟﻚ‪.‬‬

‫‪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‬ﻳﺸﻴﺮ إﻟﻰ ﻣﻮﻗﻊ أول ﻋﻨﺼﺮ ﻓﻲ اﻟﻄﺎﺑﻮر‪.‬‬

‫ﻼ ﻣﻦ‪ F& R‬ﻋﻨﺪ اﺟﺮاء آﻞ ﻣﻦ اﻟﻌﻤﻠﻴﺎت اﻟﺘﺎﻟﻴﺔ‪-:‬‬


‫ﻣﺜﺎل ‪ -:‬ﻃﺎﺑﻮر ﻳﺤﺘﻮي ﻋﻠﻰ ارﺑﻌﺔ ﻣﻮاﻗﻊ ﺧﺰﻧﻴﺔ وﺿﺢ ﻗﻴﻤﺔ آ ً‬
‫‪ .1‬اﺿﺎﻓﺔ ﻋﻨﺼﺮ ‪ .2‬اﺿﺎﻓﺔ ﻋﻨﺼﺮ ‪ .3‬اﺿﺎﻓﺔ ﻋﻨﺼﺮ‬
‫‪ .4‬اﺿﺎﻓﺔ ﻋﻨﺼﺮ ‪ .5‬ﺣﺬف ﻋﻨﺼﺮ ‪ .6‬اﺿﺎﻓﺔ ﻋﻨﺼﺮ‬
‫‪ .7‬ﺣﺬف ﻋﻨﺼﺮ ‪ .8‬اﺿﺎﻓﺔ ﻋﻨﺼﺮ ‪ .9‬ﺣﺬف ﻋﻨﺼﺮ‬
‫‪ .10‬ﺣﺬف ﻋﻨﺼﺮ ‪ .11‬ﺣﺬف ﻋﻨﺼﺮ ‪ .12‬ﺣﺬف ﻋﻨﺼﺮ‬

‫‪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

Algorithm Insert of Circular Queue


1. [Reset Rear Pointer?]
If R = N Then
R=1: Else: R R+1
2. [Overflow]
If F=R Then
Print ("Circular Queue is overflow")
End if
3. [Insert Element]
Q(R) Y
4. [Is Front Pointer Property set?]
If F=0 then
F 1
End if
End

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

‫اﻟﻮاﺟﻬﺔ اﻟﺮﺋﻴﺴﻴﺔ ﻟﻠﺒﺮﻧﺎﻣﺞ‬


Const n = 6
Dim f1 As Integer
Dim f2 As Integer
Dim r1 As Integer
Dim r2 As Integer
Dim s As Integer
Dim z As Integer
Dim I As Integer
Dim y As String
Dim q(n) As String

Private Sub Command1_Click()

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

You might also like