îáðä ðúåðéí àå èéôåñ ðúåðéí îåôùè
Download
Report
Transcript îáðä ðúåðéí àå èéôåñ ðúåðéí îåôùè
מבנה נתונים או טיפוס נתונים מופשט
חלק א -להבין או לבקר?
>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