ובפייתון
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(): מסיר ומחזיר אלמנט מהקצה השמאלי.
- בָּרוּר(): מסיר את כל האלמנטים מהדק.
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.
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 שלילי מסתובב שמאלה.
- לַהֲפוֹך(): שיטה זו הופכת את סדר האלמנטים בדסק.
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])