Professional Documents
Culture Documents
c# סיכום מבני נתונים
c# סיכום מבני נתונים
בניית רשימה
;)Node<int> first = new Node>int>(value מצביע לחוליה הראשונה ,יש לתת לה ערך בבנייה//
;Node<int> last = first מצביע לחוליה האחרונה ברשימה– מיועד להוספת חוליות לסוף הרשימה//
{
}
{
}
1
סריקת רשימה
סכימת אברי רשימה
int sum=0;
Node<int> p=first;
while(p!=null)
sum+=p.GetValue();
p=p.GetNext();
q.SetNext(first);
first = q;
q.SetNext(p.GetNext());
p.SetNext(q);
first = first.GetNext();
del.SetNext(null);
p.SetNext(del.GetNext());
del.SetNext(null);
2
דגשים:
אין לאבד את המצביע לראש .ע"מ לסרוק רשימה יש להעמיד מצביע נוסף ואיתו לסרוק את הרשימה.
(אם סורקים רשימה בפעולה לא חובה לשמור את המצביע לראש משום שהוא שמור ב)Main
אם משנים את ראש הרשימה בפעולה (הוספה/הוצאת חוליה מהראש) -הפעולה חייבת להחזיר את ראש
הרשימה החדש.
אם סורקים רשימה עד הסוף (כולל האיבר האחרון) הלולאה תהיה while(p!=null) :
ואם סורקים רשימה לא כולל האיבר האחרון הלולאה תהיהwhile(p.HasNext()) :
דוגמאות:
.1פעולה המקבלת רשימה listשאינה ריקה ומספר שלם .numהפעולה מעדכנת את הרשימה כך שאחרי כל איבר
ברשימה יתווסף איבר חדש כך שסכום כל זוג איברים עוקבים יהיה שווה ל.num-
3
.num הפעולה מוציאה מהרשימה את כל החוליות שערכן,num פעולה המקבלת רשימה של מספרים שלמים ומספר.2
דרך א
public static Node<int> RemoveNum(Node<int> list, int num)
{ הפעולה חייבת להחזיר את החוליה
Node<int> p,head; כיון,שבראש הרשימה לאחר ההוצאה
while (list!=null && list.GetValue()==num) .שיכול להיות שראש הרשימה משתנה
{
p = list;
list = list.GetNext();
p.SetNext(null); לולאה להוצאת כל האיברים מראש
} num-הרשימה ששווים ל
head = list;
while(list.HasNext())
{
if(list.GetNext().GetValue()==num)
{
p = list.GetNext(); לולאה להוצאת כל האיברים משאר
list.SetNext(p.GetNext()); num-הרשימה ששווים ל
p.SetNext(null);
}
else
list = list.GetNext();
}
return head;
}
דרך ב
4
רשימה של עצמים
:דוגמה
NumTav .char בונה ומחזירה רשימה של,NumTav פעולה המקבלת רשימה מטיפוס
char Tav תווים שלnum יוכנסו לרשימה החדשה ברצף,עבור כל איבר מהרשימה המקורית
int num .tav
) בניית החוליה הראשונה ברשימה מחוץ ללולאה (איבר סתמי שבסוף הפעולה מוציאים מהרשימה-'דרך ב
5
מחסנית
מחסנית היא מבנה נתונים מופשט המתנהל בצורה של .LIFO- Last In First Out
ממשק המחלקה Stack
סיבוכיות חתימת הפעולה תיעוד הפעולה
)o(1 )(Stack פעולה בונה המחזירה מחסנית ריקה
)o(1 )void Push(T x הפעולה מקבלת ערך xומכניסה אותו לראש המחסנית
)o(1 )(T Pop הפעולה מוציאה ומחזירה את הערך הנמצא בראש המחסנית
)o(1 )(T Top הפעולה מחזירה את הערך הנמצא בראש מחסנית
)o(1 )(bool IsEmpty הפעולה מחזירה trueאם המחסנית ריקה ו falseאחרת
)o(n )(string ToString הפעולה מחזירה מחרוזת המתארת את המחסנית
כללים חשובים:
סריקת מחסנית נעשית ע"י מחסנית נוספת (או באמצעות רקורסיה).
יש לשים לב שבסוף הפעולה המחסנית חוזרת לקדמותה (כל האיברים חוזרים חזרה למחסנית) לפני ה. return
דוגמאות:
.1פעולה המונה את מספר האיברים במחסנית.
)public static int NumElements(Stack<int> s
{
;int count = 0
;)(>Stack<int> temp = new Stack<int
))(while (!s.IsEmpty
{ העברת האיברים מהמחסנית למחסנית
;count++ tempתוך ספירתם
;))(temp.Push(s.Pop
}
))(while (!temp.IsEmpty
;))(s.Push(temp.Pop
;return count
}
.2פעולה המקבלת מחסנית של מספרים שלמים ומספר ובודקת האם המספר נמצא במחסנית.
רקורסיה על מחסנית
דגשים:
8
תור
תור הוא מבנה נתונים מופשט המתנהל בצורה של .FIFO- First In First Out
ממשק המחלקה Queue
סיבוכיות חתימת הפעולה תיעוד הפעולה
)o(1 )(Queue פעולה בונה המחזירה תור ריק
)o(1 )void Insert(T x הפעולה מקבלת ערך xומכניסה אותו לסוף התור
)o(1 )(T Remove הפעולה מוציאה ומחזירה את הערך הנמצא בראש התור
)o(1 )(T Head הפעולה מחזירה את הערך הנמצא בראש התר
)o(1 )(bool IsEmpty הפעולה מחזירה trueאם התור ריק ו falseאחרת
)o(n )(string ToString הפעולה מחזירה מחרוזת המתארת את התור
כללים חשובים:
סריקת תור נעשית ע"י תור נוסף או באמצעות העברת האיברים לסוף התור או באמצעות רקורסיה.
בסריקת תור ע"י העברת האיברים לסוף התור ,יש צורך להכניס לתור ערך דמה (דגל) –ערך שידוע שלא נמצא
בתור ע"מ שיאפשר לזהות כי סרקנו את כל אברי התור .משום כך דרך זו לא תמיד אפשרית (תמיד ניתן לסרוק
תור ע"י תור עזר).
סריקת תור ברקורסיה תהפוך את סדר האיברים בתור.
יש לשים לב שבסוף הפעולה התור חוזר לקדמותו (כל האיברים חוזרים חזרה לתור) לפני ה. return
9
דוגמאות
: פעולה המקבלת תור של מספרים שלמים ומונה את מספר האיברים בתור באמצעות שלוש השיטות.1
מניית מספר האיברים בתור באמצעות תור עזר
10
. פעולה המקבלת תור של מספרים שלמים ומספר ובודקת האם המספר נמצא בתור.2
עוצרים את לולאת החיפוש ובלולאה נוספת מעבירים את שאר, לאחר שנמצא האיבר שאותו מחפשים:דרך נוספת
)האיברים הנמצאים בתור (ע"מ שסדר האיברים בתור לא ישתנה
11
עץ בינארי
ממשק המחלקה BinNode
סיבוכיות חתימת הפעולה תיעוד הפעולה
)o(1 )BinNode (T value הפעולה בונה ומחזירה עץ שהוא רק שורש שהערך שלו הוא
valueשאין לו תת עץ שמאל ואין לו תת עץ ימין .ההפניות
אליהם הן null
)o(1 BinNode (BinNode<T> left , הפעולה בונה ומחזירה עץ שהשורש שלו הוא ,valueתת העץ
)T value, BinNode<T> right השמאלי הוא leftותת העץ הימני הוא right
)o(1 )(T GetValue הפעולה מחזירה את הערך של שורש העץ
)o(1 )(BinNode<T> GetLeft הפעולה מחזירה את תת העץ השמאלי של העץ הנוכחי
)o(1 )(BinNode<T> GetRight הפעולה מחזירה את תת העץ הימני של העץ הנוכחי
)o(1 )void SetValue(T value הפעולה קובעת את ערך החוליה הנוכחית להיות value
)o(1 )void SetLeft(BinNode<T> left הפעולה קובעת את תת העץ השמאלי של העץ הנוכחי להיות
העץ left
)o(1 )void SetRight(BinNode<T> right הפעולה קובעת את תת העץ הימני של העץ הנוכחי להיות
העץ left
)o(1 )(bool HasLeft הפעולה מחזירה ערך בוליאני האם יש תת עץ שמאלי לשורש
הנוכחי
)o(1 )(bool HasRight הפעולה מחזירה ערך בוליאני האם יש תת עץ ימני לשורש
הנוכחי
)o(1 )(string ToString הפעולה מחזירה מחרוזת המתארת את הצומת
מושגים:
צומת – כל איבר בעץ.
10
שורש -הצומת הראשון של העץ.
בן -צומת עוקב בעץ (הבן השמאלי של הצומת שערכו 5הוא הצומת שערכו .)40
11 22
אב-צומת קודם בעץ (האב של הצומת שערכו 15הוא הצומת שערכו .)22
עלה-צומת ללא בנים (הצמתים שערכם .)40, 3, -9, 0
5
15
0 תת עץ ימני -תת העץ הימני של הצומת 22הוא העץ
תת עץ שמאלי -תת העץ השמאלי של הצומת 22הוא העץ
עץ ריק -עץ ללא צמתים (מצביע ל.)null-
40 7
אחים -בנים לאותו אב (הצומת שערכו 11אח של הצומת שערכו .)22
אב קדמון -צומת שנמצא מעל הצומת ויש בניהם מסלול
3 -9 (הצומת שערכו 22אב קדמון של הצמתים שערכם.)9- ,3 ,7 ,0,15 :
צאצא -צומת שנמצא מתחת הצומת ויש בניהם מסלול
(הצומת שערכו 15הוא צאצא של הצמתים שערכם .)10 ,22
12
רמה -מספר הקטעים במסלול בין שורש העץ לצומת .הרמה של השורש היא 0
(ברמה 2נמצאים הצמתים שערכם הוא .(5 ,15 ,0
גובה -הרמה הגבוהה ביותר בעץ (גובה העץ.)4 :
13
תבנית סריקה
14
תבנית מניה
.פעולה המקבלת עץ של מספרים ממשים ומחזירה את סכום ערכי הצמתים שיש להם שני בנים
:'פתרון א
תבנית לכל
.פעולה גנרית המקבלת עץ ובודקת האם לכל צומת פנימי יש שני בנים
.פעולה המקבלת שני עצים ובודקת האם כל ערך מהעץ הראשון נמצא בעץ השני
IsExist הפעולה נעזרת בפעולה
16
סריקה לרוחב
.סריקה לרוחב מתבצעת לפי רמות וממומשת באמצעות תור
17