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

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

מאתגר Java

המשימה

נתונה המחלקה 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"]]}
```

קוד הפתיחה

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 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;
        System.out.print("lst -> ");
        while (current != null) {
            System.out.print(current.getValue().getNum() + " "
                           + current.getValue().getCount() + " -> ");
            current = current.getNext();
        }
        System.out.println("null");
    }
}

public class Main {
    public static void main(String[] args) {
        OrderedList ol = new OrderedList();

        int[] data = {3, 3, 5, 8, 8, 3};
        for (int v : 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 ועשוי לטעות. אם אתה חושב שהפתרון שלך נכון — כנראה שאתה צודק. הציון כאן הוא לתרגול בלבד ואינו מדווח לאיש.
אל תכתוב בקוד פרטים אישיים כמו שם מלא, טלפון או כתובת. הקוד נשלח לשירות בדיקה חיצוני.