חומרי לימוד - מדעי המחשב
Transcription
חומרי לימוד - מדעי המחשב
א'/שבט/תשע"ה מימוש של רשימה לצורך המימוש של טנ"מ רשימה ,נשתמש בטנ"מ חוליה (לא נחזור עליו כאן) 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 מימוש- רשימה