2-masala.
Navbatni massiv yordamida tadbiq qilish. Navbat (queue)ni tadbiq qilish uchun navbat boshi (front) va navbat oxiri (back) uchun ikkita indeksni aniqlab olishimiz kerak. Navbatga elementni oxiridan qo’shamiz, elementni navbat boshidan o’chiramiz. Navbatga element qo’shish algoritmi: 1) Navbatda element bor yoki yo’qligini (to’liqlikka) tekshirish; 2) Agar navbat to’la bo’lsa, to’liq ekanligini chiqarish va ishni yakunlash; 3) Agar to’liq bo’lmasa, back ni bir birlikka oshirib, elementni qo’shish Navbatdan elementni o’chirish algoritmi: 1) Navbatni bo’sh yoki bo’ emaslikka tekshirish; 2) Agar bo’sh bo’lsa, navbat bo’sh ekanligin chiqarish va ishni yakunlash; 3) Agar bo’sh bo’lmasa, front dan elementni olish va uni bittaga oshirish.
Javobi:
class Navbat:
def __init__(self):
self.items = []
self.front = 0
self.back = 0
def bo_sh(self):
return self.front == self.back
def qo'shish(self, element):
if self.bo_sh():
print("Navbat to'liq. Element qo'shilmoqda.")
else:
self.items.append(element)
self.back += 1
def o'chirish(self):
if self.bo_sh():
print("Navbat bo'sh. Element o'chirilmoqda.")
else:
element = self.items[self.front]
self.front += 1
return element
def uzunlik(self):
return self.back - self.front
# Umumiy dastur
if __name__ == "__main__":
navbat = Navbat()
# Navbatga element qo'shish
navbat.qo'shish(1)
navbat.qo'shish(2)
navbat.qo'shish(3)
print("Navbatdagi elementlar:")
while not navbat.bo_sh():
print(navbat.o'chirish())
print("Navbat hozir bo'sh.")
3-masala
Navbat tuzilmasini bog‘langan ro‘yxat orqali qayta ishlashga misol:
Muammoni hal qilish uchun quyidagilarga amal qiling:
- tuzilma uchun ikkita ko'rsatgich: front va back tanlab olish, bu ko‘rsatkichlar
mos ravishda navbatning birinchi va oxirgi elementiga ishora qiladi.
- enQueue() – navbat oxiridan element qo'shadi va backni keyingi elementga
o'tkazadi.
- deQueue() – navbat boshidan elementni olib tashlaydi va frontni keyingi
elementga o'tkazadi.
Javobi:
class Navbat:
def __init__(self):
self.items = []
self.front = 0
self.back = 0
def enQueue(self, element):
self.items.append(element)
self.back += 1
def deQueue(self):
if self.front == self.back:
print("Navbat bo'sh. Elementni o'chirib bo'lmaydi.")
return None
else:
element = self.items[self.front]
self.front += 1
return element
def uzunlik(self):
return self.back - self.front
# Umumiy dastur
if __name__ == "__main__":
navbat = Navbat()
# enQueue amalini test qilish
navbat.enQueue(1)
navbat.enQueue(2)
navbat.enQueue(3)
print("Navbatdagi elementlar:")
print(navbat.items)
# deQueue amalini test qilish
olingan_element = navbat.deQueue()
if olingan_element is not None:
print(f"Olingan element: {olingan_element}")
print("Navbatdagi elementlar keyin:")
print(navbat.items)
4-masala
Navbat tuzilmasini bog‘langan ro‘yxat orqali qayta ishlashga misol:
Muammoni hal qilish uchun quyidagilarga amal qiling:
- tuzilma uchun ikkita ko'rsatgich: front va back tanlab olish, bu ko‘rsatkichlar
mos ravishda navbatning birinchi va oxirgi elementiga ishora qiladi.
- enQueue() – navbat oxiridan element qo'shadi va backni keyingi elementga
o'tkazadi.
- deQueue() – navbat boshidan elementni olib tashlaydi va frontni keyingi
elementga o'tkazadi.
Javobi:
class Navbat:
def __init__(self):
self.items = []
self.front = 0
self.back = 0
def enQueue(self, element):
self.items.append(element)
self.back += 1
def deQueue(self):
if self.front == self.back:
print("Navbat bo'sh. Elementni o'chirib bo'lmaydi.")
return None
else:
element = self.items[self.front]
self.front += 1
return element
def uzunlik(self):
return self.back - self.front
# Umumiy dastur
if __name__ == "__main__":
navbat = Navbat()
# enQueue amalini test qilish
navbat.enQueue(1)
navbat.enQueue(2)
navbat.enQueue(3)
print("Navbatdagi elementlar:")
print(navbat.items)
# deQueue amalini test qilish
olingan_element = navbat.deQueue()
if olingan_element is not None:
print(f"Olingan element: {olingan_element}")
print("Navbatdagi elementlar keyin:")
print(navbat.items)
|