צ'קליסט – שאלות בנושא תורים
חלק א' – לפני כתיבת קוד
הבנת הדרישה
- □ מה הפעולה צריכה להחזיר?
- □ מהו טיפוס הערך המוחזר: מספר / בוליאני / אובייקט / תור?
- □ האם בסוף הפעולה התור צריך להישאר כפי שהיה בתחילת הפעולה?
- □ האם זה תור רגיל או תור עדיפויות?
- □ האם זה תור של אובייקטים?
אילוצים
- □ האם מותר להשתמש במבני נתונים נוספים?
- □ האם מותר להשתמש בתור עזר?
- □ האם יש הנחות או הקלות מיוחדות בשאלה?
תכנון הפתרון
- □ האם אני צריך לדעת את גודל התור?
- □ האם אני צריך תור עזר?
- □ האם הפתרון יהיה פשוט יותר אם אחלק אותו לשני מעברים על התור?
- □ האם כדאי לעבוד על עותק של התור?
- □ האם אני עלול לבצע
return לפני שהתור שוחזר?
- □ האם עדיף להשתמש ב־
Head() במקום להוציא איבר?
- □ האם אני באמת חייב להוציא את האיבר מהתור?
דגשים לתכנון פתרון של תורי עדיפויות
- □ האם התור כבר ממוין?
- □ לפי איזה שדה מתבצע המיון?
- □ האם מספיק לי לקרוא את ערך העדיפות, או שאני צריך לגשת לאובייקט כולו?
- □ האם שינוי שדה העדיפות מחייב שינוי מיקום בתור?
- □ האם אני ניגש לנתוני האובייקט באמצעות פעולות המחלקה?
לפני כל Remove() עצרו ושאלו את עצמכם:
האם אני באמת צריך להוציא את האיבר, או שמספיק להשתמש ב־Head()?
חלק ב' – לאחר כתיבת הקוד
מבנה התור
- □ האם החזרתי את כל האיברים לתור?
- □ האם סדר האיברים נשמר?
- □ האם שחזרתי את התור במלואו?
תנאי עצירה
- □ האם השתמשתי ב־
IsEmpty()?
- □ האם בטעות בדקתי
null?
Remove() / Head()
- □ האם איבדתי איבר בלי לשמור אותו במשתנה?
- □ האם הוצאתי איבר למרות שהיה מספיק להשתמש ב־
Head()?
לולאות
- □ האם גודל התור משתנה תוך כדי הריצה?
- □ האם אני מסתמך על
Count בזמן שהוא משתנה?
בדיקה אחרונה
- □ האם הפתרון פשוט ככל האפשר?
- □ האם השתמשתי בתור עזר רק אם באמת היה צורך?
- □ האם יש דרך קצרה או ברורה יותר לפתור את השאלה?