פתרון מלא מדעי המחשב, קיץ תשפ"ג, שאלון מספר 899381...
פתרון מלא מדעי המחשב, קיץ תשפ"ג, שאלון מספר 899381 2023
שאלה מספר 5
c#:
public 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; // return this.num;
}
public int SetCount(int count)
{
this.count = count;
}
}
נבחין כי קיימות שלוש אפשרויות:
אפשרות ראשונה: הרשימה ריקה, לכן ראש הרשימה lst יהיה חולייה חדשה.
אפשרות שנייה: קיימת חולייה שבה ה-num שלה שווה ל-x ואז נותר להעלות רק את count.
אפשרות שלישית: לא קיימות חולייה כזאת, וצריך להכניס את החולייה החדשה, כך שהסדר העולה ממש לא ייפגע.
אפשרות רביעית: החולייה החדשה צריכה להיות הראשונה.
אפשרות חמישית: להוסיף בסוף הרשימה.
public class OrderedList{
private Node<NumCount> lst;
public void InsertNum(int x)
{
Node<NumCount> n = new Node<NumCount>( new NumCount(x,1) , null);
if(lst == null || ( lst!=null && lst.GetValue().GetNum()> x ) ) //first option , fourth option
{
n.SetNext(lst);
lst = n;
return; //stop the function
}
Node<NumCount> p = lst; //מצביע חדש על מנת לא להרוס את ראש הרשימה
while( p !=null )
{
NumCount nC = p.GetValue();
if( nC.GetNum() == x) //option 2
{
nC.SetCount( nC.GetCount()+1 );
return; //finish the function
}
//options 3 and option 5
if( !p.HasNext() || ( p.HasNext() &&p.GetValue().GetNum()> x ) )
{
n.SetNext( p.GetNext() );
p.SetNext(n);
return;
}
p = p.GetNext();
}
}
}