חומרי לימוד - מדעי המחשב

Transcription

חומרי לימוד - מדעי המחשב
‫י"ח‪/‬כסלו‪/‬תשע"ה‬
‫מימוש של תור‬
‫‪‬‬
‫לצורך המימוש של טנ"מ תור‪ ,‬נשתמש בטנ"מ עזר ‪ -‬חוליה‬
‫תור ‪ -‬פעולות הממשק סריקה ובנייה‬
‫‪1‬‬
‫טנ"מ חוליה ‪ -‬ממשק‬
‫‪‬‬
‫לטנ"מ חוליה – ‪ - Node‬שתי תכונות‪:‬‬
‫‪ ‬הערך השמור בתוכה – ‪.info‬‬
‫‪ ‬החוליה הבאה לאחריה – ‪ next‬מסוג >‪Node<T‬‬
‫‪‬‬
‫תיאור סְ כֵמַ טי של חוליה‬
‫‪‬‬
‫בפועל נראה יותר כמו‬
‫‪next‬‬
‫‪next‬‬
‫‪next‬‬
‫‪next‬‬
‫תור ‪ -‬פעולות הממשק סריקה ובנייה‬
‫‪2‬‬
‫‪1‬‬
‫י"ח‪/‬כסלו‪/‬תשע"ה‬
‫טנ"מ חוליה ‪ -‬ממשק‬
‫‪‬‬
‫פעולות הממשק‬
‫בנאים‬
‫)‪Node(T info‬‬
‫‪ //‬הפעולה בונה ומחזירה חוליה שהערך שלה הוא ‪ ,info‬אין לה חוליה עוקבת‬
‫)‪Node(T info, Node<T> next‬‬
‫‪ //‬הפעולה בונה ומחזירה חוליה‪ ,‬שהערך שלה הוא ‪ ,info‬והחוליה העוקבת לה היא החוליה ‪next‬‬
‫‪ToString‬‬
‫)(‪ToString‬‬
‫‪ //‬הפעולה מחזירה מחרוזת המתארת את החוליה הנוכחית‬
‫‪3‬‬
‫תור ‪ -‬פעולות הממשק סריקה ובנייה‬
‫טנ"מ חוליה ‪ -‬ממשק‬
‫‪Get‬‬
‫)(‪T GetInfo‬‬
‫‪ //‬הפעולה מחזירה את הערך של החוליה הנוכחית‬
‫)(‪Node<T> GetNext‬‬
‫‪ //‬הפעולה מחזירה את החוליה העוקבת לחוליה הנוכחית‬
‫‪Set‬‬
‫)‪SetInfo(T info‬‬
‫‪ //‬הפעולה קובעת את ערך החוליה הנוכחית להיות ‪info‬‬
‫)‪SetNext(Node<T> next‬‬
‫‪ //‬הפעולה קובעת את החוליה העוקבת לחוליה הנוכחית להיות החוליה ‪next‬‬
‫תור ‪ -‬פעולות הממשק סריקה ובנייה‬
‫‪4‬‬
‫‪2‬‬
‫י"ח‪/‬כסלו‪/‬תשע"ה‬
‫טנ"מ חוליה ‪ -‬מימוש‬
‫>‪public class Node<T‬‬
‫{‬
‫‪//‬התכונות‬
‫;‪private T info‬‬
‫;‪private Node<T> next‬‬
‫‪//‬בנאים‬
‫)‪public Node(T info‬‬
‫}‬
‫‪//‬הפעולה בונה ומחזירה חוליה שהערך שלה הוא ‪info‬ואין לה חוליה עוקבת‬
‫;‪this.info = info‬‬
‫;‪this.next = null‬‬
‫{‬
‫)‪public Node(T info, Node<T> next‬‬
‫}‬
‫‪//‬הפעולה בונה ומחזירה חוליה‪ ,‬שהערך שלה הוא ‪ info‬והחוליה העוקבת לה היא החוליה ‪next‬‬
‫;‪this.info = info‬‬
‫;‪this.next = next‬‬
‫{‬
‫‪5‬‬
‫תור ‪ -‬פעולות הממשק סריקה ובנייה‬
‫טנ"מ חוליה ‪ -‬מימוש‬
‫‪//Get‬‬
‫)(‪public T GetInfo‬‬
‫{‬
‫‪ //‬הפעולה מחזירה את הערך של החוליה הנוכחית‬
‫;‪return info‬‬
‫{‬
‫)(‪public Node<T> GetNext‬‬
‫}‬
‫‪ //‬הפעולה מחזירה את החוליה העוקבת לחוליה הנוכחית‬
‫;‪return next‬‬
‫{‬
‫תור ‪ -‬פעולות הממשק סריקה ובנייה‬
‫‪6‬‬
‫‪3‬‬
‫י"ח‪/‬כסלו‪/‬תשע"ה‬
‫טנ"מ חוליה ‪ -‬מימוש‬
‫‪//Set‬‬
‫)‪public void SetInfo(T info‬‬
‫}‬
‫‪ //‬הפעולה קובעת את ערך החוליה הנוכחית להיות ‪info‬‬
‫;‪this.info = info‬‬
‫{‬
‫)‪public void SetNext(Node<T> next‬‬
‫}‬
‫‪ //‬הפעולה קובעת את החוליה העוקבת לחוליה הנוכחית להיות החוליה ‪next‬‬
‫;‪this.next = next‬‬
‫}‬
‫‪7‬‬
‫תור ‪ -‬פעולות הממשק סריקה ובנייה‬
‫טנ"מ חוליה ‪ -‬מימוש‬
‫‪//ToString‬‬
‫)(‪public override string ToString‬‬
‫}‬
‫‪//‬הפעולה מחזירה מחרוזת המתארת את החוליה הנוכחית‬
‫;)(‪return this.info.ToString‬‬
‫}‬
‫תור ‪ -‬פעולות הממשק סריקה ובנייה‬
‫‪8‬‬
‫‪4‬‬
‫י"ח‪/‬כסלו‪/‬תשע"ה‬
‫טנ"מ תור ‪ -‬מימוש‬
‫תיאור סְ כֵמַ טי של תור חוליות חוליה‬
‫יציאה‬
‫‪Out‬‬
‫‪next‬‬
‫‪info‬‬
‫‪next‬‬
‫‪info‬‬
‫‪next‬‬
‫‪info‬‬
‫‪next‬‬
‫‪info‬‬
‫‪next‬‬
‫‪info‬‬
‫‪next‬‬
‫‪info‬‬
‫‪first‬‬
‫כניסה‬
‫‪last‬‬
‫‪In‬‬
‫‪9‬‬
‫תור ‪ -‬פעולות הממשק סריקה ובנייה‬
‫טנ"מ תור ‪ -‬מימוש‬
‫תיאור סְ כֵמַ טי של תור חוליות חוליה‬
‫תור עם ערך בודד‬
‫תור ריק‬
‫יציאה‬
‫‪Out‬‬
‫‪|| null‬‬
‫‪info‬‬
‫כניסה‬
‫יציאה‬
‫‪first‬‬
‫‪last‬‬
‫‪next‬‬
‫‪Out‬‬
‫‪info‬‬
‫‪info‬‬
‫‪first‬‬
‫‪last‬‬
‫‪info‬‬
‫‪info‬‬
‫‪In‬‬
‫‪|| null‬‬
‫כניסה‬
‫תור ‪ -‬פעולות הממשק סריקה ובנייה‬
‫‪In‬‬
‫‪10‬‬
‫‪5‬‬
‫תשע"ה‬/‫כסלו‬/‫י"ח‬
‫ מימוש‬- ‫טנ"מ תור‬
first
public class Queue<T>
{
info
next
‫ התכונות‬//
private Node<T> first;
last
private Node<T> last;
info
next
‫ בנאי‬//
public Queue()
{
‫ מחזירה תור ריק‬//
‫תור ריק‬
this.first = null;
this.last = null;
Out
first
last
}
‫יציאה‬
info null
||
info
‫כניסה‬
In
11
‫ פעולות הממשק סריקה ובנייה‬- ‫תור‬
‫ מימוש‬- ‫טנ"מ תור‬
‫הוספה‬
public void Insert(T x)
}
‫ התור אותחל‬- ‫ הנחה‬,‫ לסוף התור‬x ‫ מכניסה את הערך‬//
temp
Node<T> temp = new Node<T>(x);
info
if (first == null)
first = temp;
null
else
Out
last.SetNext(temp);
next
first
‫יציאה‬
info
next
info
next
info
next
info
next
info
next
X
?‫תור ריק‬
first == null
√
Out
first
last
‫תור ריק‬
|| null
info
last = temp;
‫יציאה‬
info
In
‫כניסה‬
{
X
last
last
info
next
temp
Out
first
last
info
info
‫תור עם ערך בודד‬
‫יציאה‬
ne
xt
info
In
‫כניסה‬
|| null
In
12
6
‫ פעולות הממשק סריקה ובנייה‬- ‫תור‬
‫כניסה‬
‫י"ח‪/‬כסלו‪/‬תשע"ה‬
‫טנ"מ תור ‪ -‬מימוש‬
‫מחיקה‬
‫)(‪public T Remove‬‬
‫}‬
‫‪ //‬מוציאה ומחזירה את הערך הנמצא בראש התור‪ ,‬הנחה ‪ -‬התור אותחל ואינו ריק‬
‫תור עם ערך בודד‬
‫יציאה‬
‫‪next‬‬
‫√‬
‫‪Out‬‬
‫‪info‬‬
‫‪info‬‬
‫‪first‬‬
‫‪last‬‬
‫רק אחד בתור?‬
‫‪first == null‬‬
‫‪X‬‬
‫‪info‬‬
‫‪|| null‬‬
‫תור ריק‬
‫כניסה‬
‫‪In‬‬
‫יציאה‬
‫‪Out‬‬
‫‪||info null‬‬
‫כניסה‬
‫;)(‪T x = first.GetInfo‬‬
‫‪first‬‬
‫‪last‬‬
‫;)(‪first = first.GetNext‬‬
‫)‪if (first == null‬‬
‫יציאה‬
‫‪Out‬‬
‫‪next‬‬
‫‪info‬‬
‫‪first‬‬
‫‪next‬‬
‫‪info‬‬
‫‪first‬‬
‫‪next‬‬
‫‪info‬‬
‫‪next‬‬
‫‪info‬‬
‫‪next‬‬
‫‪info‬‬
‫כניסה‬
‫‪X‬‬
‫;‪last = null‬‬
‫;‪return x‬‬
‫{‬
‫‪last‬‬
‫‪In‬‬
‫‪info‬‬
‫‪In‬‬
‫‪13‬‬
‫תור ‪ -‬פעולות הממשק סריקה ובנייה‬
‫טנ"מ תור ‪ -‬מימוש‬
‫הצצה ‪ -‬ראש התור‬
‫)(‪public T Head‬‬
‫}‬
‫‪ //‬מחזירה את הערך הנמצא בראש התור‬
‫‪ //‬הנחה ‪ -‬התור אותחל ואינו ריק‬
‫;)(‪return first.GetInfo‬‬
‫{‬
‫האם ריק‬
‫)(‪public bool IsEmpty‬‬
‫}‬
‫‪ //‬מחזירה האם התור ריק‬
‫‪ //‬הנחה ‪ -‬התור אותחל‬
‫;‪return first == null‬‬
‫{‬
‫תור ‪ -‬פעולות הממשק סריקה ובנייה‬
‫‪14‬‬
‫‪7‬‬
‫תשע"ה‬/‫כסלו‬/‫י"ח‬
‫ מימוש‬- ‫טנ"מ תור‬
‫תוכן התור‬
public override string ToString()
}
‫ מחזירה מחרוזת המתארת את תוכן התור‬//
‫ התור אותחל‬- ‫ הנחה‬//
string s = "[";
Node<T> p = this.first;
while (p != null)
}
s = s + p.GetInfo().ToString();
if (p.GetNext() != null)
s = s + ",";
p = p.GetNext();
{
s = s + "]";
return s;
{
15
8
‫ פעולות הממשק סריקה ובנייה‬- ‫תור‬