מבנה נתונים או טיפוס נתונים מופשט
Transcription
מבנה נתונים או טיפוס נתונים מופשט
מבנה נתונים או טיפוס נתונים מופשט חלק א -להבין או לבקר? >public class Node<T >public class List<T הוכן ע"י ולרי פקר דצמבר 2015 פרק :6מימוש מבני נתונים יעדים :בפרקים הקודמים עסקנו בטיפוסי נתונים מופשטים ( )ADT`sוברשימות מקושרות. בפרק זה "נפתח את הקופסה השחורה" ונלמד כיצד ניתן לממש טיפוסי נתונים מופשטים בדרכים שונות ,בפרט באמצעות מערכים ורשימות .כמו כן נממש מבני נתונים מורכבים, כגון מערך של רשימות. תכנים: .1 .2 .3 .4 .5 .6 מימוש של טיפוסי נתונים מופשטים שלהפשטה נתונה יכולים להיות מימושים אלטרנטיבים ,ללא שינוי ההפשטה מימוש הטיפוס מחסנית באמצעות מערך מימוש הטיפוסים תור ומחסנית באמצעות רשימה יעילות המימושים השונים הערה :בפרק זה ,כמו בפרק הקודם ,כשאנו אומרים "מימוש באמצעות רשימה" הכוונה לרשימה המיוצגת ע"י שרשור חוליות שהן מופעים של מחלקת .Nodeאין צורך להשתמש בשום מחלקה נוספת לייצוג הרשימה. מבנה נתונים או טיפוס נתונים מופשט Node מחלקה שמייצגת חוליה היא מבנה נתונים public class Node<T> { private T value; public T value; privateNode<T> Node<T>next; next; public next public Node(T value, Node<T> next) value { this.value = value; this.next = next; } public Node(T value): this(x, null) ?נתונים { } טעם להסתיר תכונות של מבנה } האם יש 3 מבנה נתונים או טיפוס נתונים מופשט public T value; public Node<T> next; private T value; private Node<T> next; Node<int> pos = chain; while (pos != null) { pos.value++; pos = pos.next; } Node<int> pos = chain; int x; while (pos != null) { x = pos.GetValue(); x++; pos.SetValue(x); pos = pos.GetNext(); } ,אפשר למנוע פריצה דרך החלון-אם אי ?למה לסגור את הדלת מבנה נתונים או טיפוס נתונים מופשט מימוש שרשרת חוליות על-ידי המחלקה Node – – – – אין צורך בהסתרת מידע (מימוש וייצוג לא מוסתרים) אם עוטפים את המחלקה Nodeבמחלקה אחרת ניתן ליצור אוספים כמו מחסנית ,תור ,רשימה אין שרשרת ריקה אין הכנסה והוצאה במקום הראשון המחלקה Nodeאינה טיפוס נתונים מופשט לכן ,ניתנת לקלקול ניתן ליצור שרשרת בכל צורה מבנה נתונים או טיפוס נתונים מופשט בתכנות מונחה עצמים אין דרישות למבני הנתונים. כל "החסרונות" של מבנה הנתונים Nodeמקובלים!!!! חוליות הן אבני בניין של אוספים רבים כמו מחסנית, תור ,רשימה ,עץ חוליות הן אבני בניין של מבנים בכל מיני צורות בלי הגבלה. בעזרת מבנים שנוצרו כאן ניתן ללמד אלגוריתמיקה וגם הפניות. לדוגמה :האם בשרשרת חוליות יש מעגלים? מבנה נתונים או טיפוס נתונים מופשט 7 מבנה נתונים או טיפוס נתונים מופשט 8 מבנה נתונים או טיפוס נתונים מופשט 9 מבנה נתונים או טיפוס נתונים מופשט 10 מבנה נתונים או טיפוס נתונים מופשט 11 מבנה נתונים או טיפוס נתונים מופשט 12 מבנה נתונים או טיפוס נתונים מופשט מחלקה מחסנית מימוש ע"י שרשור חוליות )Node המחסנית היא טיפוס נתונים מופשט (עוטפת את המחלקה public class Stack<T> { private Node<T> first; public Stack() { this.first = null; } public void Push(T x) { this.first = new Node<T>(x, this.first); } } מבנה נתונים או טיפוס נתונים מופשט מחלקה תור מימוש ע"י שרשור חוליות )Node התור הוא טיפוס נתונים מופשט (עוטפת את המחלקה public class Queue<T> { private Node<T> first; private Node<T> last; public Queue() { this.first = null; this.last = null; } public void Insert(T x) { } } מבנה נתונים או טיפוס נתונים מופשט )מחלקה רשימה (לא בתוכנית public class List<T> { ? היא טיפוס נתונים מופשט private Node<T> first; .Node עוטפת את המחלקה public List(){ this.first = null; } public List(T value){ this.first = new Node(value, null); } public GetFirst(){ return בתכנות this.first; מונחה עצמים לא מקובל וגם לא נחוץ } ... } 15 מבנה נתונים או טיפוס נתונים מופשט מחלקה רשימה היא טיפוס נתונים מופשט? עוטפת את המחלקה .Node מבנה נתונים או טיפוס נתונים מופשט רשימה 7 T GetValue() void SetValue(T x) pos = lst.GetFirst(); while (pos != null) { ..... ..... pos.GetValue()..... pos = pos.GetNext(); } מאוד יעיל 2 6 1 4 3 5 8 lst.GetSize() = n O(n) אבל,ייצוג ומימוש לא מוסתרים 17 מבנה נתונים או טיפוס נתונים מופשט מחלקה רשימה היא טיפוס נתונים מופשט? עוטפת את המחלקה .Node המושג "מקום ברשימה". first null value value value value 18