Presentation is loading. Please wait.

Presentation is loading. Please wait.

תירגול 14: מבני נתונים דינאמיים

Similar presentations


Presentation on theme: "תירגול 14: מבני נתונים דינאמיים"— Presentation transcript:

1 תירגול 14: מבני נתונים דינאמיים

2 רשימה מקושרת

3 מהי רשימה מקושרת? רשימה מקושרת היא אחד ממבני הנתונים הדינמיים הבסיסיים וגם השימושיים ביותר. רשימה משורשרת היא סדרה של מבנים שלכל אחד מהם יש ערך ומצביע המצביע למבנה הבא. המבנה האחרון מצביע ל NULL.

4 קודקוד אחד typedef struct Node { int data; struct Node* next; } Node;

5 תרגיל כתבו פונקציה המקבלת כקלט רשימה מקושרת של int.
הפונקציה מוחקת מהרשימה את הקודקוד הראשון. void deleteFirst(Node **h){ if(!*h) return; Node *p = *h; *h = p->next; free(p); }

6 תרגיל כתבו פונקציה המקבלת כקלט מצביע לראש רשימה וערך מסוים.
הפונקציה מוסיפה בסוף הרשימה קודקוד חדש המכיל את הערך שהתקבל. Node* newNode(int data, Node *next) { Node *p = (Node*) malloc (sizeof(Node)); p->data = data; p->next = next; return p; } void insertLast(int data, struct Node **head) { struct Node **p = head; while(*p) p = &((*p)->next); *p = newNode(data,NULL); }

7 תרגיל כתבו פונקציה המקבלת כקלט רשימה מקושרת של int וערך מסוים.
הפונקציה מוחקת מהרשימה את כל הקודקודים המכילים את הערך שהתקבל.

8 מבוא למדעי המחשב מ' - תרגול 7
תרגיל void deleteFromList(int data, Node** h) { if(! *h ) return; Node *p = *h; Node **prev = h; while(p) { if(p->data == data) { *prev = p->next; free(p); p = *prev; } else { prev = &(p->next); p = p->next; } מבוא למדעי המחשב מ' - תרגול 7

9 תרגיל כתבו פונקציה המקבלת כקלט רשימה מקושרת של int וערך מסוים.
הפונקציה משכפלת ברשימה את כל הקודקודים המכילים את הערך שהתקבל. void duplicateData(int data, Node ** h) { while(*h) if( (*h)->data == data) { *h = newNode(data,*h); h = &( (*h)->next->next); } else h = &((*h)->next); }

10 עצים

11 מהם עצים דינאמיים? עץ הוא מבנה נתונים הבנוי מקודקודים כך שכל קודקוד מכיל ערך מסוים ומספר מצביעים לקודקודים המשמשים לו בנים. לרוב ההתעסקות היא בעיקר בעצים בינאריים, כלומר עצים שבהם לכל קודקוד יש לכל היותר 2 בנים – בן ימני ובן שמאלי. typedef struct Node { int data; struct Node *ls, *rs; } Node;

12 מהם עצים דינאמיים? הקודקוד הראשון בעץ, זה שאף קודקוד אחר לא מצביע עליו – נקרא ה"שורש" של העץ. (Root) הקודקודים שאינם מצביעים על שום קודקוד אחר נקראים עלים.

13 עץ חיפוש בינארי השימוש הנפוץ ביותר לעצים דינאמיים הוא עץ חיפוש בינארי.
עץ חיפוש בינארי הוא עץ בינארי המקיים עבור כל קודקוד: תת העץ הימני מכיל קודקודים המכילים ערכים הגדולים (או שווים) מהערך של הקודקוד עצמו. תת העץ השמאלי מכיל קודקודים המכילים ערכים הקטנים מהערך של הקודקוד עצמו

14 מבוא למדעי המחשב מ' - תרגול 7
עץ חיפוש בינארי מבוא למדעי המחשב מ' - תרגול 7

15 ערימה (Heap) ערימה היא עץ המקיים תנאי אחד, תנאי הערימה - כל קודקוד בעץ מכיל ערך הגדול או שווה לכל אחד מערכי בניו. (בערימת מקסימום)

16 תרגיל כתבו פונקציה המקבלת מצביע לשורש של עץ. על הפונקציה להחזיר את מספר העלים בעץ. int numOfLeavesRec(Node *p) { if(!p) return 0; int tmp = numOfLeavesRec(p->ls)+numOfLeavesRec(p->rs); if(tmp == 0) return 1; return tmp; }


Download ppt "תירגול 14: מבני נתונים דינאמיים"

Similar presentations


Ads by Google