اسلایدهای جلسه ششم (صف و پشته) – ۳۰ آبان ۹۲
Download
Report
Transcript اسلایدهای جلسه ششم (صف و پشته) – ۳۰ آبان ۹۲
صف ( )Queueیک لیست خطی از عناصر است که در آن عمل حذف
تنها میتواند از یک انتهای آن موسوم به ابتدای صف ( )Frontو عمل
اضافه شدن تنها میتواند از انتهای دیگر آن به نام انتهای صف ()Rear
انجام گیرد.
اولین ورودی اولین خروجی ()First In First Out( )FIFO
ترتیبی که عنصرها وارد صف میشوند همان ترتیبی است که از آن خارج
میشوند.
صفهای نانوایی و صف بانک مثالهای روزمره از صف هستند.
صف پردازشهای سیستم عامل مثالی از کاربرد صف در رایانه است.
2
جلسه ششم92/08/30 ،
صف و پشته
برای نمایش صف معمول از لیست یکطرفه یا آرایه خطی استفاده
میشود.
هر صف توسط عناصر زیر پیاده سازی می شود:
آرایه خطی Queue
متغیر اشارهگر :Frontیک واحد کمتر از مکان عنصر ابتدای صف
متغیر اشارهگر :Rearمکان عنصر انتهای صف
3
جلسه ششم92/08/30 ،
صف و پشته
Front: -1
Rear: 3
Front: 0
Rear: 3
Front: 0
Rear: 5
Front: 1
Rear: 5
صف و پشته
A
B
C
D
…
0
1
2
3
…
B
C
D
…
1
2
3
…
B
C
D
E
F
…
1
2
3
4
5
…
C
D
E
F
…
2
3
4
5
…
0
0
0
1
n-1
n-1
n-1
n-1
4
92/08/30 ،جلسه ششم
انتخاب آرایه ] Q[nبرای پیاده سازی صف خطی دارای شرایط اولیه و مرزی
زیر است:
Front = Rear = -1
وضعیت اولیه صف:
Front = Rear
خالی بودن صف خطی:
Rear = n-1
پر بودن صف خطی:
(هرچند ممکن است ابتدای صف خالی باشد اما قابل استفاده نیست).
5
جلسه ششم92/08/30 ،
صف و پشته
درج در صف:
برای درج ،در صورت پر نبودن صف ،چون Rearبه خانه آخر صف
اشاره میکند ،ابتدا Rearیک واحد اضافه شده (به جلو حرکت کرده)
سپس داده مورد نظر در خانه انتهای صف درج می شود.
حذف از صف:
برای حذف ،در صورت خالی نبودن صف ،چون Frontهمیشه به
خانه قبل از اول صف اشاره می کند ،ابتدا Frontیک واحد اضافه
شده (به جلو حرکت کرده) سپس داده ابتدای صف خارج شده و در
متغیر مورد نظر قرار می گیرد.
6
جلسه ششم92/08/30 ،
صف و پشته
. درج کنیدQ[n] را در صفx عنصر
void add (int x){
If (rear==n-1) write “Queue is full”
Else {
rear++
Q[rear] = x
}
}
صف و پشته
O(1)
7
92/08/30 ،جلسه ششم
. را حذف کنیدQ[n] عنصر اول صف
int delete(){
If (front==rear){
write “Queue is empty”
return 0
}
Else {
front++
y = Q[front]
return y
}
}
صف و پشته
O(1)
92/08/30 ،جلسه ششم
8
مشکل:
حرکت تدریجی عناصر به سمت انتهای صف و عدم امکان استفاده از
خانه های ابتدای صف که در اثر حذف خالی شده اند ،مشکل صف
های خطی است.
راه حل:
9
.1شیفت خانه های انتهای صف به سمت ابتدای صف که این عمل در
صورتی که تعداد خانه های صف زیاد باشد هزینه بالیی خواهد
داشت.
.2استفاده از صف حلقوی به این مفهوم که زمانی که به انتهای صف
رسیدیم ،عمل درج را دوباره از ابتدای صف انجام می دهیم و این
حرکت چرخش ی می باشد.
روش دوم در عمل مقرون به صرفه تر بوده و استفاده می شود.
جلسه ششم92/08/30 ،
صف و پشته
آرایه nتایی ] Q[nرا می توان به صورت یک صف حلقوی در نظر گرفت به
طوری که در این صف زمانی که Rear = n-1شد ،عنصر بعدی در خانه 0
قرار می گیرد.
حرکت در خالف جهت حرکت عقربه های ساعت است.
باز هم Frontبه یک مکان قبل از عنصر اول اشاره دارد.
مثال :درج عنصر 50در صف حلقوی مقابل؟
10
جلسه ششم92/08/30 ،
صف و پشته
انتخاب آرایه ] Q[nبرای پیاده سازی صف حلقوی دارای شرایط اولیه و مرزی
زیر است:
وضعیت اولیه صفFront = Rear = -1 :
خالی بودن صف حلقویFront = Rear :
پر بودن صف حلقوی(Rear + 1) mod n = Front :
در هر صف حلقوی nعضوی همیشه یک خانه خالی وجود دارد و حداکثر از n-
1خانه صف می توانیم استفاده کنیم .این به آن علت است که بتوانیم
وضعیت پر یا خالی بودن صف حلقوی را تشخیص بدهیم.
11
جلسه ششم92/08/30 ،
صف و پشته
. درج کنیدQ[n] را در صفx عنصر
k = (rear+1) % n
If (front == k) write “Queue is full”
Else {
rear=k
Q[rear] = x
}
O(1)
صف و پشته
12
92/08/30 ،جلسه ششم
. را حذف کنیدQ[n] عنصر اول صف
If (front==rear){
write “Queue is empty”
}
Else {
front = (front+1) % n
y = Q[front]
}
صف و پشته
O(1)
13
92/08/30 ،جلسه ششم
درج و حذف از صف های حلقوی مقابل؟
14
جلسه ششم92/08/30 ،
صف و پشته
پشته ( )stackیک ساختمان داده خطی از عناصر است که در آن عمل
حذف و اضافه عناصر تنها میتواند از یک انتهای آن موسوم به بالی
پشته ( )topانجام گیرد.
آخرین ورودی اولین خروجی ()Last In First Out( )LIFO
ترتیبی که عنصرها از پشته خارج میشوند برعکس ترتیبی است که وارد
آن میشوند.
پشته بشقابها مثالی از پشته است.
15
جلسه ششم92/08/30 ،
صف و پشته
برای اضافه کردن عنصر در پشته از اصطالح pushو برای حذف یک
عنصر در پشته از اصطالح popاستفاده میگردد.
هر پشته توسط عناصر زیر پیاده سازی می شود:
آرایه خطی Stack
متغیر اشارهگر :Topمکان عنصر بالی پشته
متغیر :MAXSTKبیشترین تعداد عنصر قابل نگهداری توسط پشته مثال در
یک آرایه nخانه ای nعنصر میتواند وجود داشته باشد.
16
جلسه ششم92/08/30 ،
صف و پشته
پشته را میتوان به صورتهای زیر نمایش داد .اما معمول به کمک آرایه
نمایش داده می شود.
S: A, E, C, H
n
...
H
C
E
A
...
3
2
1
0
top
top
17
جلسه ششم92/08/30 ،
3
H
2
C
1
E
0
A
صف و پشته
. درج کنیدS[Maxstk] را در پشتهx عنصر
If (top==Maxstk-1) write “Stack is full”
Else {
top++
S[top] = x
}
O(1)
صف و پشته
18
92/08/30 ،جلسه ششم
. را حذف کنیدS[Maxstk] عنصر بالیی پشته
If (top==-1){
write “Stack is empty”
}
Else {
y = Q[top]
top-}
صف و پشته
O(1)
19
92/08/30 ،جلسه ششم