מבנה נתונים או טיפוס נתונים מופשט

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‬‬