המשימה
נתונה המחלקה 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 ועשוי לטעות. אם אתה חושב שהפתרון שלך נכון —
כנראה שאתה צודק. הציון כאן הוא לתרגול בלבד ואינו מדווח לאיש.
אל תכתוב בקוד פרטים אישיים כמו שם מלא, טלפון או כתובת. הקוד נשלח לשירות
בדיקה חיצוני.