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

‫א'‪/‬שבט‪/‬תשע"ה‬
‫מימוש של רשימה‬
‫‪‬‬
‫לצורך המימוש של טנ"מ רשימה‪ ,‬נשתמש בטנ"מ חוליה‬
‫(לא נחזור עליו כאן)‬
‫‪1‬‬
‫רשימה ‪ -‬מימוש‬
‫טנ"מ רשימה ‪ -‬מימוש‬
‫תיאור סְ כֵמַ טי של רשימת חוליות‬
‫‪next‬‬
‫‪info‬‬
‫‪next‬‬
‫‪info‬‬
‫‪next‬‬
‫‪info‬‬
‫‪next‬‬
‫‪info‬‬
‫‪next‬‬
‫‪info‬‬
‫‪first‬‬
‫רשימה ‪ -‬מימוש‬
‫‪2‬‬
‫‪1‬‬
‫א'‪/‬שבט‪/‬תשע"ה‬
‫טנ"מ רשימה ‪ -‬מימוש‬
‫תיאור סְ כֵמַ טי של רשימה חוליות חוליה‬
‫רשימה עם ערך בודד‬
‫רשימה ריקה‬
‫‪|| null‬‬
‫‪info‬‬
‫‪|| null‬‬
‫‪next‬‬
‫‪info‬‬
‫‪info‬‬
‫‪first‬‬
‫‪first‬‬
‫‪3‬‬
‫רשימה ‪ -‬מימוש‬
‫טנ"מ רשימה ‪ -‬מימוש‬
‫>‪public class List<T‬‬
‫{‬
‫‪ //‬התכונה‬
‫;‪private Node<T> first‬‬
‫‪ //‬בנאי‬
‫רשימה ריקה‬
‫‪ //‬מחזירה רשימה ריקה‬
‫)(‪public List‬‬
‫{‬
‫‪|| info‬‬
‫‪null‬‬
‫‪first‬‬
‫;‪this.first = null‬‬
‫}‬
‫)(‪public Node<T> GetFirst‬‬
‫{‬
‫‪ //‬הפעולה מחזירה את החוליה הראשונה ברשימה אם הרשימה ריקה הפעולה מחזירה ‪null‬‬
‫;‪return first‬‬
‫}‬
‫רשימה ‪ -‬מימוש‬
‫‪4‬‬
‫‪2‬‬
‫א'‪/‬שבט‪/‬תשע"ה‬
‫טנ"מ רשימה – מימוש ‪ -‬הוספה‬
‫‪‬‬
‫‪‬‬
‫מוסיפה את הערך ‪ x‬לרשימה ‪ l‬אחרי המיקום ‪p‬‬
‫אחרי הפעולה ברשימה ערך אחד יותר ממספר ערכים שהיו‬
‫לפני הפעולה‬
‫אחרי‬
‫הפעולה‬
‫‪1, 3, x, 2, 6, 8‬‬
‫‪1, 3, 2, 6, 8‬‬
‫‪p‬‬
‫‪p‬‬
‫ראשון‬
‫ראשון‬
‫‪5‬‬
‫רשימה ‪ -‬מימוש‬
‫טנ"מ רשימה – מימוש ‪ -‬הוספה‬
‫)‪public void Insert(Node<T> p, T info‬‬
‫}‬
‫‪//‬הפעולה מכניסה לרשימה חוליה חדשה שהערך שלה הוא ‪ info‬אחרי החוליה ‪ p‬הפעולה מחזירה את החוליה החדשה‬
‫שהוכנסה‪ .‬כדי להכניס איבר ראשון לרשימה הערך של הפרמטר ‪ p‬צריך להיות ‪ null.‬הנחה‪ :‬החוליה ‪ next‬קיימת‬
‫ברשימה‪ ,‬והרשימה אותחלה‬
‫עבור המקרה ‪p == null -‬‬
‫(להוסיף לפני הראשון)‬
‫‪p_new‬‬
‫;)‪Node<T> p_new = new Node<T>(info‬‬
‫)‪if (p == null‬‬
‫{‬
‫;)‪p_new.SetNext(first‬‬
‫‪first‬‬
‫;‪first = p_new‬‬
‫}‬
‫‪first‬‬
‫‪else‬‬
‫{‬
‫;))(‪p_new.SetNext(p.GetNext‬‬
‫;)‪p.SetNext(p_new‬‬
‫}‬
‫{‬
‫רשימה ‪ -‬מימוש‬
‫‪6‬‬
‫‪3‬‬
‫א'‪/‬שבט‪/‬תשע"ה‬
‫טנ"מ רשימה – מימוש ‪ -‬הוספה‬
‫)‪public void Insert(Node<T> p, T info‬‬
‫}‬
‫‪//‬הפעולה מכניסה לרשימה חוליה חדשה שהערך שלה הוא ‪ info‬אחרי החוליה ‪ p‬הפעולה מחזירה את החוליה החדשה‬
‫שהוכנסה‪ .‬כדי להכניס איבר ראשון לרשימה הערך של הפרמטר ‪ p‬צריך להיות ‪ null.‬הנחה‪ :‬החוליה ‪ next‬קיימת‬
‫ברשימה‪ ,‬והרשימה אותחלה‬
‫עבור המקרה ‪p != null -‬‬
‫(להוסיף לא לפני הראשון)‬
‫;)‪Node<T> p_new = new Node<T>(info‬‬
‫)‪if (p == null‬‬
‫{‬
‫;)‪p_new.SetNext(first‬‬
‫;‪first = p_new‬‬
‫}‬
‫‪p‬‬
‫‪first‬‬
‫‪else‬‬
‫{‬
‫;))(‪p_new.SetNext(p.GetNext‬‬
‫‪p_new‬‬
‫;)‪p.SetNext(p_new‬‬
‫}‬
‫{‬
‫‪7‬‬
‫רשימה ‪ -‬מימוש‬
‫טנ"מ רשימה – מימוש ‪ -‬מחיקה‬
‫‪‬‬
‫‪‬‬
‫מוחקת מהרשימה ‪ l‬את הערך במיקום ‪p‬‬
‫אחרי הפעולה ברשימה ערך אחד פחות ממספר ערכים שהיו‬
‫לפני הפעולה‪ p ,‬יהיה המיקום העוקב למה שהיה לפני‬
‫הפעולה‬
‫‪1, 2, 6, 8‬‬
‫סוף‬
‫‪p‬‬
‫עוגן‬
‫רשימה ‪ -‬מימוש‬
‫אחרי‬
‫הפעולה‬
‫‪1, 3, 2, 6, 8‬‬
‫סוף‬
‫‪p‬‬
‫עוגן‬
‫‪8‬‬
‫‪4‬‬
‫א'‪/‬שבט‪/‬תשע"ה‬
‫טנ"מ רשימה – מימוש ‪ -‬מחיקה‬
‫)‪public Node<T> Remove(Node<T> p‬‬
‫}‬
‫‪//‬הפעולה מוציאה את החוליה ‪ p‬מהרשימה ומחזירה את החוליה הבאה אחריה אם הוצאה החוליה האחרונה ברשימה‬
‫הפעולה תחזיר ‪ .null‬הנחה החוליה ‪ p‬קיימת ברשימה והרשימה אותחלה‬
‫)‪if (first == p‬‬
‫עבור המקרה ‪first == p -‬‬
‫(למחוק את הראשון)‬
‫{‬
‫;)(‪first = p.GetNext‬‬
‫;‪return first‬‬
‫}‬
‫‪else‬‬
‫‪first‬‬
‫‪first‬‬
‫{‬
‫;‪Node<T> prev = first‬‬
‫)‪while (prev.GetNext() != p‬‬
‫;)(‪prev = prev.GetNext‬‬
‫;))(‪prev.SetNext(p.GetNext‬‬
‫;)(‪return prev.GetNext‬‬
‫}‬
‫{‬
‫‪9‬‬
‫רשימה ‪ -‬מימוש‬
‫טנ"מ רשימה – מימוש ‪ -‬מחיקה‬
‫)‪public Node<T> Remove(Node<T> p‬‬
‫}‬
‫‪//‬הפעולה מוציאה את החוליה ‪ p‬מהרשימה ומחזירה את החוליה הבאה אחריה אם הוצאה החוליה האחרונה ברשימה‬
‫הפעולה תחזיר ‪ .null‬הנחה החוליה ‪ p‬קיימת ברשימה והרשימה אותחלה‬
‫)‪if (first == p‬‬
‫עבור המקרה ‪first =! p -‬‬
‫(למחוק לא את הראשון)‬
‫{‬
‫;)(‪first = p.GetNext‬‬
‫;‪return first‬‬
‫}‬
‫‪else‬‬
‫‪p‬‬
‫‪prev‬‬
‫‪prev‬‬
‫‪first‬‬
‫{‬
‫;‪Node<T> prev = first‬‬
‫)‪while (prev.GetNext() != p‬‬
‫;)(‪prev = prev.GetNext‬‬
‫;))(‪prev.SetNext(p.GetNext‬‬
‫;)(‪return prev.GetNext‬‬
‫}‬
‫{‬
‫רשימה ‪ -‬מימוש‬
‫‪10‬‬
‫‪5‬‬
‫תשע"ה‬/‫שבט‬/'‫א‬
‫טנ"מ רשימה – מימוש – המשך‬
‫האם ריק‬
public bool IsEmpty()
}
‫ הרשימה אותחלה‬- ‫ הנחה‬.‫ מחזירה האם הרשימה ריקה‬//
return first == null;
{
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; }
11
6
‫ מימוש‬- ‫רשימה‬