DoubleQueue מכילה שני תורים first, second. count/addValue נתונות. queueID=1→first, queueID=2→second (לפי תיקון מה"ט).
DoubleQueue מכילה שני תורים first, second. count/addValue נתונות. queueID=1→first, queueID=2→second (לפי תיקון מה"ט).
public class DoubleQueue {
private Queue<Integer> first;
private Queue<Integer> second;
// נתונות, אין צורך לממש:
public int count(int queueID) { /* מחזירה מספר איברים בתור queueID */ }
public void addValue(int num, int queueID) { /* מוסיפה את num לתור queueID */ }
}
דוגמה מלאה (עמוד 10 java / עמוד 25 csharp, אומתה מתמונת ה-PDF): תור כפול לפני זימון order ואחריו.
לפני order:
first: 10 2 4 8 33
second: 18
אחרי order (n=6, n/2=3; שלוש הגדולות ביותר {33,18,10} עוברות ל-second, שלוש הקטנות ביותר {2,4,8} נשארות/עוברות ל-first):
first: 2 4 8
second: 10 18 33
כתבו פעולה המקבלת מספר תור queueID ומחזירה ערך הגדול ביותר בתור.
public int maxValue(int queueID)
כתבו פעולה המקבלת מספר שלם num ומספר תור queueID. הפעולה מוחקת מתור queueID את המספר num. אם המספר num מופיע יותר מפעם אחת בתור, הפעולה תמחק רק מופע אחד של המספר. אם המספר num לא מופיע בתור, הפעולה אינה מבצעת דבר.
public void eraseValue(int num, int queueID)
כתבו את הפעולה: הפעולה מקבלת תור כפול של מספרים שלמים dq. מספר האיברים בתור dq זוגי. הפעולה תחלק את האיברים בין התורים first ו-second, לפי הכלל הבא: מספר האיברים בשני התורים זהה; ההפרש בין סכום האיברים הנמצאים בתור second וסכום האיברים הנמצאים בתור first יהיה הגדול ביותר. שימו לב! בסעיף ג' אפשר להשתמש רק בפעולות שהוגדרו במחלקה DoubleQueue! אין להוסיף פעולות נוספות או להשתמש במבני נתונים נוספים!
public static void order(DoubleQueue dq)
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.