תרגול מדעי המחשב

הכנסה לשרשרת ממוינת של ערך-וספירה

מאתגר C#

המשימה

נתונה המחלקה NumCount — מספר ולה שתי תכונות:
• num — ערך מספרי שלם
• count — מספר המופעים של num, שלם וגדול מ-0

נתונה המחלקה OrderedList — שרשרת ממוינת, ולה תכונה אחת:
• lst — מצביע לראש שרשרת חוליות מטיפוס NumCount

השרשרת ממוינת בסדר עולה לפי num, וכל ערך num מופיע ב**חוליה אחת בלבד**.

ממשו את הפעולה insertNum(int x) שמוסיפה מופע אחד של x:

• אם קיימת חוליה שערך num שלה שווה ל-x — הגדילו את count שלה ב-1.
• אחרת — הכניסו חוליה חדשה עם num = x ו-count = 1, במקום שישמור
  על סדר השרשרת.

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

```ds:table
{"title":"השרשרת ההתחלתית — num ו-count בכל חוליה","rows":[["num","count"],["3","9"],["5","1"],["8","2"]]}
```

```ds:table
{"title":"אחרי insertNum(5) — הערך קיים, רק count גדל","rows":[["num","count"],["3","9"],["5","2"],["8","2"]]}
```

```ds:table
{"title":"ואחרי insertNum(4) — חוליה חדשה נכנסת באמצע","rows":[["num","count"],["3","9"],["4","1"],["5","2"],["8","2"]]}
```

קוד הפתיחה

using System;

class NumCount {
    private int num;
    private int count;

    public NumCount(int num, int count) { this.num = num; this.count = count; }

    public int  GetNum()            { return num; }
    public int  GetCount()          { return count; }
    public void SetNum(int num)     { this.num = num; }
    public void SetCount(int count) { this.count = count; }

    public override string ToString() { return num + " " + count; }
}

class OrderedList {
    private Node<NumCount> lst;

    public OrderedList() { this.lst = null; }

    /** מוסיפה מופע אחד של הערך x, ושומרת על המיון ועל חוליה אחת לכל ערך. */
    public void InsertNum(int x) {
        // כתוב את הפתרון כאן
    }

    // ── עזר, לא חלק מהמשימה ──────────────────────────────────────────
    public void PrintList() {
        Node<NumCount> current = this.lst;
        Console.Write("lst -> ");
        while (current != null) {
            Console.Write(current.GetValue().GetNum() + " "
                        + current.GetValue().GetCount() + " -> ");
            current = current.GetNext();
        }
        Console.WriteLine("null");
    }
}

class Program {
    static void Main() {
        OrderedList ol = new OrderedList();

        int[] data = {3, 3, 5, 8, 8, 3};
        foreach (int v in data) ol.InsertNum(v);
        ol.PrintList();      // lst -> 3 3 -> 5 1 -> 8 2 -> null

        ol.InsertNum(5);
        ol.PrintList();      // lst -> 3 3 -> 5 2 -> 8 2 -> null

        ol.InsertNum(4);
        ol.PrintList();      // lst -> 3 3 -> 4 1 -> 5 2 -> 8 2 -> null

        ol.InsertNum(1);
        ol.PrintList();      // 1 נכנס בראש

        ol.InsertNum(99);
        ol.PrintList();      // 99 נכנס בסוף
    }
}

כדי לכתוב, להריץ ולקבל משוב — התחבר עם חשבון Google. לוקח שנייה.

התרגיל הבא בניית שרשרת והדפסתה
המשוב נוצר על ידי AI ועשוי לטעות. אם אתה חושב שהפתרון שלך נכון — כנראה שאתה צודק. הציון כאן הוא לתרגול בלבד ואינו מדווח לאיש.
אל תכתוב בקוד פרטים אישיים כמו שם מלא, טלפון או כתובת. הקוד נשלח לשירות בדיקה חיצוני.