logo

ובפייתון

Deque מייצג תור Double-Ended. זהו סוג מיוחד של מבנה נתונים המאפשר לך להוסיף ולהסיר אלמנטים משני הקצוות ביעילות.

שלא כמו תורים רגילים (שבדרך כלל עוקבים אחר First In First Out) ה-deque תומך גם בפעולות FIFO וגם LIFO. זה עושה את זה מאוד גמיש ושימושי ביישומים בעולם האמיתי כמו תזמון משימות בעיות בחלון הזזה ועיבוד נתונים בזמן אמת.

דוּגמָה:

Python
from collections import deque # Declaring deque  de = deque(['name''age''DOB']) print(de) 

תְפוּקָה
deque(['name' 'age' 'DOB']) 
לָכֵן' title=

למה אנחנו צריכים דקוו

  • הוא תומך בזמן O(1) להוספה/הסרה של אלמנטים משני הקצוות.
  • זה יעיל יותר מרשימות עבור פעולות חזיתיות.
  • זה יכול לתפקד גם בתור (FIFO) וגם כמחסנית (LIFO).
  • אידיאלי לתזמון בעיות בחלון הזזה ועיבוד נתונים בזמן אמת.
  • הוא מציע שיטות מובנות חזקות כמו appendleft() popleft() ו לְסוֹבֵב().

סוגי קלט מוגבל

  • Deque מוגבל קלט :  הקלט מוגבל בקצה אחד ואילו מחיקה מותרת בשני הקצוות.
  • Deque מוגבל פלט : הפלט מוגבל בקצה אחד אך הוספה מותרת בשני הקצוות.

פעולות על דסק 

להלן טבלה המפרטת את הפעולות המובנות של ה-deque ב-Python עם תיאורים ומורכבות הזמן המתאימה להם:



רשימה בלתי ניתנת לשינוי
מִבצָע תֵאוּר מורכבות זמן
append(x) מוסיףxלקצה הימני של הדק.O(1)
appendleft(x) מוסיףxלקצה השמאלי של הדסק.O(1)
פּוֹפּ() מסיר ומחזיר אלמנט מהקצה הימני של ה-deque.O(1)
popleft() מסיר ומחזיר אלמנט מהקצה השמאלי של ה-deque.O(1)
להרחיב (ניתן לחזור) מוסיף את כל האלמנטים מiterableלקצה הימני של הדק.בְּסֵדֶר)
extendleft (iterable) מוסיף את כל האלמנטים מiterableלקצה השמאלי של הדסק (סדר הפוך).בְּסֵדֶר)
להסיר (ערך) מסיר את המופע הראשון שלvalueמהדסק. מעלהValueErrorאם לא נמצא.עַל)
סובב (n) מסובב את הדסקnצעדים ימינה. אִםnהוא שלילי מסתובב שמאלה.בְּסֵדֶר)
בָּרוּר() מסיר את כל האלמנטים מהדק.עַל)
ספירה (ערך) סופר את מספר המופעים שלvalueבדסק.עַל)
אינדקס (ערך) מחזירה את האינדקס של המופע הראשון שלvalueבדסק. מעלהValueErrorאם לא נמצא.עַל)
לַהֲפוֹך() הופך את האלמנטים של הדסק למקומם.עַל)

הוספה ומחיקה של פריטי תור

  • append(x): מוסיף x לקצה הימני של הדסק.
  • appendleft(x): מוסיף x לקצה השמאלי של הדסק.
  • להרחיב (ניתן לעבור): מוסיף את כל האלמנטים מהחזרה לקצה הימני.
  • extendleft(iterable): מוסיף את כל האלמנטים מהחזרה לקצה השמאלי (בסדר הפוך).
  • להסיר (ערך): מסיר את ההופעה הראשונה של הערך שצוין מה-deque. אם הערך לא נמצא, זה מעלה ValueError.
  • פּוֹפּ(): מסיר ומחזיר אלמנט מהקצה הימני.
  • popleft(): מסיר ומחזיר אלמנט מהקצה השמאלי.
  • בָּרוּר(): מסיר את כל האלמנטים מהדק.
Python
from collections import deque dq = deque([10 20 30]) # Add elements to the right dq.append(40) # Add elements to the left dq.appendleft(5) # extend(iterable) dq.extend([50 60 70]) print('After extend([50 60 70]):' dq) # extendleft(iterable) dq.extendleft([0 5]) print('After extendleft([0 5]):' dq) # remove method dq.remove(20) print('After remove(20):' dq) # Remove elements from the right dq.pop() # Remove elements from the left dq.popleft() print('After pop and popleft:' dq) # clear() - Removes all elements from the deque dq.clear() # deque: [] print('After clear():' dq) 

תְפוּקָה:

After extend([50 60 70]): deque([5 10 20 30 40 50 60 70])  
After extendleft([0 5]): deque([5 0 5 10 20 30 40 50 60 70])
After remove(20): deque([5 0 5 10 30 40 50 60 70])
After pop and popleft: deque([0 5 10 30 40 50 60])
After clear(): deque([])

גישה לפריט ואורך הדסק

  • הוספה לאינדקס: גישה לאלמנטים לפי מיקום באמצעות מדדים חיוביים או שליליים.
  • רַק(): מחזירה את מספר האלמנטים ב-deque.
Python
import collections dq = collections.deque([1 2 3 3 4 2 4]) # Accessing elements by index print(dq[0]) print(dq[-1]) # Finding the length of the deque print(len(dq)) 

תְפוּקָה
1 4 7 

ספירת סיבוב והיפוך של דסק

  • ספירה (ערך): שיטה זו סופרת את מספר המופעים של אלמנט ספציפי ב-deque.
  • סובב (n): שיטה זו מסובבת את ה-deque ב-n שלבים. n חיובי מסתובב ימינה ו-n שלילי מסתובב שמאלה.
  • לַהֲפוֹך(): שיטה זו הופכת את סדר האלמנטים בדסק.
Python
from collections import deque # Create a deque dq = deque([10 20 30 40 50 20 30 20]) # 1. Counting occurrences of a value print(dq.count(20)) # Occurrences of 20 print(dq.count(30)) # Occurrences of 30 # 2. Rotating the deque dq.rotate(2) # Rotate the deque 2 steps to the right print(dq) dq.rotate(-3) # Rotate the deque 3 steps to the left print(dq) # 3. Reversing the deque dq.reverse() # Reverse the deque print(dq) 

תְפוּקָה
3 2 deque([30 20 10 20 30 40 50 20]) deque([20 30 40 50 20 30 20 10]) deque([10 20 30 20 50 40 30 20])