ובפייתון

ובפייתון

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'])  
לָכֵן

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

  • הוא תומך בזמן 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])