ex4a1 מחסנית Stack⟨T⟩


מחסנית: Stack⟨T⟩ תרגילים ראשונים

4a1.0 בדיקה האם שתי מחסניות זהות

כתבו פונקציה StacksEqual שבודקת אם שתי המחסניות זהות.

4a1.1 בדיקת פלינדרום במחסנית

עליכם לממש פונקציה בשם IsStackPalindrome אשר מקבלת פרמטר אחד:

  1. s - מחסנית שלמים מסוג Unit4.CollectionsLib.Stack

הפונקציה צריכה לבדוק האם המחסנית היא פלינדרום, כלומר, סדר האיברים מהראש לתחתית זהה לסדר מהתחתית לראש.

הפונקציה תחזיר true אם המחסנית היא פלינדרום, ו-false אחרת.

דגשים חשובים:

  1. שחזור מצב המחסנית: חובה להקפיד על כך שהמחסנית s תחזור למצבה המקורי (אותם איברים ובאותו סדר) בסיום הפעולה, ללא קשר לתוצאת הבדיקה.
  2. שימוש במבני נתונים עזר: מותר ואף מומלץ להשתמש במבני נתונים עזר (כגון מחסניות או תורים נוספים) כדי לבצע את הבדיקה ולשחזר את המחסנית המקורית.
  3. הערה ל-C#: יש להשתמש ב-using Unit4.CollectionsLib; כדי לגשת למחלקת Stack.

דוגמאות:

  1. עבור המחסנית [1, 2, 3, 2, 1] (כאשר 1 הוא בראש המחסנית), הפונקציה תחזיר: True
  2. עבור המחסנית [A, B, C, B, A] (כאשר A הוא בראש המחסנית), הפונקציה תחזיר: True
  3. עבור המחסנית [1, 2, 3, 4] (כאשר 1 הוא בראש המחסנית), הפונקציה תחזיר: False
  4. עבור המחסנית [X] (כאשר X הוא בראש המחסנית), הפונקציה תחזיר: True
  5. עבור מחסנית ריקה [], הפונקציה תחזיר: True

4a1.8 הסרת מופעים ממחסנית

עליכם לממש פונקציה בשם RemoveAllOccurrences אשר מקבלת שני פרמטרים:

  1. stack - מחסנית מסוג Unit4.CollectionsLib.Stack
  2. itemToRemove - מספר שלם המייצג את האיבר שיש להסיר מכל מופעיו במחסנית

הפונקציה צריכה להסיר את כל המופעים של itemToRemove מהמחסנית stack, תוך שמירה על הסדר היחסי של שאר האיברים במחסנית.

הערות:

  1. השתמשו במבנה נתונים עזר (לדוגמה, מחסנית נוספת) כדי לשמור על סדר האיברים.
  2. בתחילת הפונקציה, המחסנית stack עשויה להכיל איברים. בסיום הפונקציה, המחסנית stack צריכה להכיל את האיברים המקוריים למעט אלו שהוסרו, ובאותו סדר יחסי.

דוגמאות:

  1. עבור מחסנית: [3, 1, 4, 1, 5, 9] (כאשר 9 בראש המחסנית) והאיבר להסרה הוא 1, המחסנית לאחר הפעולה תהיה: [3, 4, 5, 9]
  2. עבור מחסנית: [10, 20, 10, 30] והאיבר להסרה הוא 10, המחסנית לאחר הפעולה תהיה: [20, 30]
  3. עבור מחסנית: [1, 2, 3] והאיבר להסרה הוא 4, המחסנית לא תשתנה: [1, 2, 3]

4a1.3 העתקה ממחסנית

עליכם לממש פונקציה בשם CopyStack אשר מקבלת מחסנית מסוג Unit4.CollectionsLib.Stack ומחזירה מחסנית חדשה שהיא העתק זהה של המקורית.

דרישות:

  1. הפונקציה צריכה לקבל מחסנית שלמים Stack.
  2. הפונקציה צריכה להחזיר מחסנית חדשה מסוג Stack המכילה את אותם איברים ובאותו סדר כמו המחסנית המקורית.
  3. חשוב מאוד: המחסנית המקורית חייבת לחזור למצבה המקורי (אותם איברים ובאותו סדר) בסיום הפעולה.

###

שימוש במחלקות עזר:

  1. ניתן ומומלץ להשתמש במחסניות עזר (לדוגמה, Stack) כדי לבצע את ההעתקה תוך שמירה על המחסנית המקורית.

דוגמאות:

עבור מחסנית מקורית: [1, 2, 3] (כאשר 1 הוא בראש המחסנית) הפונקציה תחזיר מחסנית חדשה: [1, 2, 3] והמחסנית המקורית תישאר: [1, 2, 3]

עבור מחסנית מקורית: [“A”, “B”, “C”, “D”] הפונקציה תחזיר מחסנית חדשה: [“A”, “B”, “C”, “D”] והמחסנית המקורית תישאר: [“A”, “B”, “C”, “D”]

עבור מחסנית ריקה: [] הפונקציה תחזיר מחסנית חדשה: [] והמחסנית המקורית תישאר: []

4a1.9 השוואת תוכן מחסניות

עליכם לממש פונקציה בשם AreStacksEqual אשר מקבלת שני פרמטרים:

  1. st1 - מחסנית של מספרים שלמים (מסוג Stack Unit4)
  2. st2 - מחסנית של מספרים שלמים (מסוג Stack Unit4)

הפונקציה צריכה לבדוק האם שתי המחסניות מכילות בדיוק את אותם האיברים, ללא קשר לסדרם.

דרישות:

  1. הפונקציה תחזיר true אם שתי המחסניות מכילות את אותם האיברים, וfalse אחרת.
  2. מובטח שבכל אחת מהמחסניות המספרים שונים זה מזה (אין כפילויות בתוך אותה מחסנית).
  3. בסיום הפעולה, שתי המחסניות שהתקבלו כפרמטרים חייבות לחזור למצבן המקורי (כלומר, להכיל את אותם איברים ובאותו סדר כמו לפני קריאת הפונקציה).

שימו לב:

  1. השתמשו בusing Unit4.CollectionsLib; כדי לגשת למחלקת Stack.
  2. ניתן להשתמש במבני נתונים עזר (כמו מחסניות או תורים נוספים) כדי לשמור על סדר האיברים ולשחזר את המחסניות המקוריות.

דוגמאות:

  1. עבור מחסנית 1: [1, 2, 3] ומחסנית 2: [3, 1, 2], הפונקציה תחזיר: True
  2. עבור מחסנית 1: [10, 20] ומחסנית 2: [10, 30], הפונקציה תחזיר: False
  3. עבור מחסנית 1: [5] ומחסנית 2: [5], הפונקציה תחזיר: True
  4. עבור מחסנית 1: [1, 2, 3] ומחסנית 2: [1, 2], הפונקציה תחזיר: False

4a1.7 מציאת איבר מינימאלי והעברתו לראש המחסנית

עליכם לממש פונקציה בשם MoveMinToTop אשר מקבלת פרמטר אחד:

  1. s - מחסנית של מספרים שלמים (מסוג Unit4.CollectionsLib.Stack).

הפונקציה צריכה לבצע את הפעולות הבאות:

  1. למצוא את האיבר המינימלי במחסנית.
  2. להעביר את האיבר המינימלי לראש המחסנית.
  3. לשמור על הסדר היחסי של כל שאר האיברים במחסנית.
  4. הפונקציה אינה מחזירה ערך (void), אלא משנה את המחסנית שקיבלה כפרמטר.

דגשים:

  1. השתמשו במבני נתונים עזר (כגון מחסנית נוספת או תור) כדי לבצע את המשימה.
  2. אין להשתמש בשיטות מובנות של List או Array לחיפוש מינימום או שינוי סדר.
  3. המחסנית יכולה להכיל מספרים חיוביים ושליליים.
  4. שימו לב שהמחסנית משתנה כתוצאה מהפעולה.

דוגמאות:

  1. עבור המחסנית [5, 2, 8, 1, 9] (כאשר 5 בראש המחסנית), הפונקציה תשנה את המחסנית ל- [1, 5, 2, 8, 9].
  2. עבור המחסנית [7, 3, 10, 4] (כאשר 7 בראש המחסנית), הפונקציה תשנה את המחסנית ל- [3, 7, 10, 4].
  3. עבור המחסנית [1] (כאשר 1 בראש המחסנית), הפונקציה תשנה את המחסנית ל- [1].

4a1.4 סכום איברי מחסנית

עליכם לממש פונקציה בשם SumStackElements אשר מקבלת פרמטר אחד:

  1. stack - מחסנית של מספרים שלמים (מסוג Unit4.CollectionsLib.Stack).

הפונקציה צריכה לחשב ולהחזיר את סכום כל האיברים במחסנית.

דרישה חשובה: יש להקפיד על כך שהמחסנית המקורית תחזור למצבה המקורי (אותם איברים ובאותו סדר) בסיום הפעולה.

דגשים:

  1. השתמשו במחסנית עזר כדי לשמור את האיברים שנשלפו מהמחסנית המקורית.
  2. לאחר חישוב הסכום, החזירו את האיברים ממחסנית העזר בחזרה למחסנית המקורית.
  3. יש להשתמש ב-using Unit4.CollectionsLib; בקובץ הפתרון.

דוגמאות:

  1. עבור המחסנית [1, 2, 3] (כאשר 3 בראש המחסנית), הפונקציה תחזיר 6. לאחר הפעולה, המחסנית תישאר [1, 2, 3].
  2. עבור המחסנית [10, 5, 15, 2] (כאשר 2 בראש המחסנית), הפונקציה תחזיר 32. לאחר הפעולה, המחסנית תישאר [10, 5, 15, 2].
  3. עבור מחסנית ריקה, הפונקציה תחזיר 0. לאחר הפעולה, המחסנית תישאר ריקה.

4a1.5 ספירת איברים במחסנית

עליכם לממש פונקציה בשם CountStackElements אשר מקבלת פרמטר אחד:

  1. st - מחסנית (מסוג Unit4.CollectionsLib.Stack

הפונקציה צריכה לחשב ולהחזיר את מספר האיברים במחסנית.

דרישה חשובה: בסיום הפעולה, המחסנית המקורית חייבת לחזור למצבה המקורי (כלומר, להכיל את אותם איברים באותו סדר).

דגשים:

  1. השתמשו בלולאה כדי לעבור על איברי המחסנית.
  2. השתמשו במבנה נתונים עזר (כמו מחסנית נוספת) כדי לשמור באופן זמני על האיברים שאתם מוציאים מהמחסנית המקורית.
  3. לאחר סיום הספירה, החזירו את האיברים ממבנה הנתונים העזר בחזרה למחסנית המקורית.
  4. השתמשו במחלקה Unit4.CollectionsLib.Stack.

דוגמאות:

  1. עבור מחסנית המכילה את האיברים [3, 2, 1] (כאשר 3 בראש המחסנית), הפונקציה תחזיר 3.
  2. עבור מחסנית ריקה, הפונקציה תחזיר 0.
  3. עבור מחסנית המכילה את האיברים [“a”, “b”, “c”, “d”] (כאשר “a” בראש המחסנית), הפונקציה תחזיר 4.

4a1.6 ספירת מופעים של איבר במחסנית

עליכם לממש פונקציה בשם CountOccurrences אשר מקבלת שני פרמטרים:

  1. stack - מחסנית מסוג Stack
  2. item - האיבר שאותו יש לספור.

הפונקציה צריכה להחזיר את מספר הפעמים שהאיבר item מופיע במחסנית stack.

דרישה חשובה: בסיום הפעולה, המחסנית stack חייבת לחזור למצבה המקורי (כלומר, להכיל את אותם איברים באותו סדר).

דגשים:

  1. השתמשו במחלקת Stack מהספרייה Unit4.CollectionsLib.
  2. כדי לשמור על סדר האיברים ולשחזר את המחסנית, תצטרכו להשתמש במחסנית עזר נוספת.

דוגמאות:

  1. עבור מחסנית המכילה: [10, 20, 10, 30, 10] והאיבר 10, הפונקציה תחזיר 3.
  2. עבור מחסנית המכילה: [5, 8, 2, 8] והאיבר 8, הפונקציה תחזיר 2.
  3. עבור מחסנית המכילה: [1, 2, 3] והאיבר 4, הפונקציה תחזיר 0.