© המרכז להוראת המדעים האוניברסיטה העברית בירושלים

Slides:



Advertisements
מצגות קשורות
הכרת תוכנת בקרים. כניסה לתוכנה תתבצע בשלבים הבאים: 1
Advertisements

תכנות בשפת C תרגול 11 - קבצים.
תוכנה 1 בשפת Java שיעור מספר 5: עצמים
הרצאה 02 סוגי משתנים קרן כליף.
ניווט רובוט מסוג ROOMBA במרחב ממופה
מבוא לתכנות ב-JAVA מעבדה 1
תוכנה 1 תרגול 13 – סיכום.
תרגול 11: רקורסיה ופיתוח טלסקופי
תרגול 1: סביבת העבודה ומבוא ל-Java
נערך ע"י אריק הוד, הגימנסיה העברית הרצליה
תוכנה 1 תרגול 12 – סיכום.
תרגול מס' 8 משתנים מיוחסים מבוא ל-C++ קלט/פלט ב-C++
מבוא למדעי המחשב מ' - תירגול 9
תירגול 10: מבנים (structs) וקבצים
Marina Kogan Sadetsky –
מטרת פרויקט "שיעורים פרטיים ברשת"
תוכנה 1 בשפת Java שיעור מספר 10: "ירושה נכונה" (הורשה II)
Jump tables, review questions
מבוא למדעי המחשב הרצאה מספר 12: רקורסיה
תכנות בשפת C תרגול 11 רשימות מקושרות מבנים
תרגול Introduction to C - Fall Amir Menczel.
פעולות אריתמטיות קרן כליף.
Computer Programming תרגול 1 Summer 2016
תירגול 11: מיונים וחיפוש בינארי
תוכנה 1 בשפת Java שיעור מספר 13: "אל תסתכל בקנקן"
נערך ע"י אריק הוד הגימנסיה העברית הרצליה
למידת חקר עבודת חקר – מהי
Engineering Programming A
תרגול 6: פונקציות, סוגי משתנים, top-down design
© האוניברסיטה העברית בירושלים, 2008
מוטיבציה והשוואה בין מבני נתונים שלמדנו
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
Web Services Delegates and Events ליווי מקצועי : ארז קלר
מבוא לתכנות מונחה עצמים Object Oriented Programming
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
זיכרון מטמון 1 מבנה מחשבים ספרתיים
הרצאה 10: אלגוריתמי מיון רקורסיביים Merge sort ו-Quick sort
Computer Architecture and System Programming Laboratory
SQL - כתיבת שאילתות למתחילים
אלגוריתמי מיון רקורסיביים
המשך תכנות מונחה עצמים תרגול מס' 9.
כל הזכויות שמורות לגבריאל אנקרי © 2017
תרגול 13 : חזרה נכתב על-ידי לימור ליבוביץ נערך ע"י ישראל גוטר
CLI vs GUI.
מת"מ מעבדה 7-8 רשימות.
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
תוכנה 1 תרגול - Generics.
תוכנה 1 תשס"ח סמסטר ב' אוהד ברזילי ליאור שפירא
שימוש בעצם ממחלקה אחרת כמאפיין במחלקה הנוכחית
מבוא לתכנות ב- JAVA מעבדה 4
מבוא למדעי המחשב סמסטר ב' – 2008 מרצה: יעל סיגל מתרגל: ענבל בודובסקי.
Introduction to Programming in C
מצביעים Pointers – המשך...
תוכנה 1 - תרגול תרגיל – חברת הייטק בית הספר למדעי המחשב
מעבדה 2- עיצוב (עבור חלק ג)
תרגול מס' 7: Memoization Quicksort תרגילים מתקדמים ברקורסיה
אי-שיוויון קלאוזיוס עד עתה מצאנו ניסוחים כמותיים לשינוי באנטרופיה בתהליכים קוואזיסטאטיים. מה קורה בתהליכים שאינם קוואזיסטאטיים? הקושי עם תהליך שאינו קוואזיסטאטי.
עקרונות תכנות מונחה עצמים תרגול 9:C++ - תרגילים
תוכנה 1 בשפת Java שיעור מספר 10: "ירושה נכונה" (הורשה II)
שיעור ג1: מערכת צירים תלת מימדית
תוכנה 1 בשפת Java שיעור מספר 11: חידושים ב Java 8
Java Programming רשימות מקושרות - המשך
הפונקציה מחזירה את מספר התווים במחרוזת נתונה.
Engineering Programming A
רשימות מקושרות עבודה עם קבצים דוגמה
תמליל מצגת:

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים פרק 9 רשימה © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים מה בשיעור שימוש ברשימה כתיבת המחלקה רשימה ייצוג אוספים באמצעות רשימה © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים פרוטוקולים של אוספים מחסנית – האיברים נכנסים ויוצאים מאותו קצה. תור- האיברים נכנסים מקצה אחד ויוצאים מקצה אחר. רשימה – האיברים נכנסים יוצאים בכל מקום בסדרה ללא הגבלה. © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

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

ייצוג הרשימה – שרשרת חוליות public class List<T> { private Node<T> first; lst List<Integer> first 20 5 null 8 -3 © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים דיון בפעולות הרשימה סריקה : getFirst(), getNext() הכנסה, הוצאה: insert(…), remove(…) בדיקת ריקנות: isEmpty() תיאור הרשימה: toString() פעולה של החוליה © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים הממשק של רשימה © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים הממשק של רשימה - המשך © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים הממשק של הרשימה שימו לב כי הממשק של הרשימה אינו מאפשר להתקדם מחוליה אחת לאחרת תוך כדי סריקה . כדי לעשות זאת צריך להשתמש בפעולה של החוליה getNext(). אוסף פעולות הרשימה יחד עם פעולות החוליה מאפשר לבצע את כל הפעולות הדרושות. שמתם לב להנחות של הפעולות? אם לא – כדאי לחזור! לסיכום: פעולות הטיפוס רשימה מורכבות משני ממשקים: ממשק המחלקה רשימה וממשק המחלקה חוליה. © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים שימוש בפעולות הממשקים בניית רשימה של שמות: List<String> nameList = new List<String>(); nameList List<String> null first © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

הכנסה public Node<T> insert (Node<T> pos, T x) איך נכניס את הערך במקום הראשון? נזמן את הפעולה עם הערך null © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

עדכון הpos על ידי ערך ההחזרה של insert הכנסה List<String> nameList = new List<String>(); Node<String> pos = nameList.insert (null, "Moshe"); pos = nameList.insert (pos, "Talia"); הכנסה למקום הראשון הכנסה במקום אחרי pos nameList List<String> null first pos pos "Moshe" null "Talia" null עדכון הpos על ידי ערך ההחזרה של insert © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

pos=null ולכן זו הכנסה למקום הראשון הכנסת ערכים בלולאה List<Integer> numList = new List<Integer>(); Node<Integer> pos = numList.getFirst(); for (int i=0; i<3; i++) pos = numList.insert (pos, i); pos=null ולכן זו הכנסה למקום הראשון numList List<Integer> null first pos pos pos 1 i 2 i i null 1 null 1 2 null null pos © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים שאלה ? תארו את הרשימה המתקבלת מהפעלת הקוד שלפניכם על רשימת המספרים הריקה lst: for (int i=0; i<3; i++) lst.insert (null, i); © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

הוצאת ערך מרשימה public Node<T> remove (Node<T> pos) ערך ההחזרה הוא הפניה לחוליה הבאה לחוליה שהוצאה. משמש לסריקות. © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים דוגמה להוצאה המצב לפני ההוצאה: זימון פעולה ההוצאה: pos = nameList.remove (pos); pos pos nameList List<String> first "Moshe" "Talia" "Yaron" null © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים סריקה של רשימה עד סוף הרשימה עד קיום תנאי רצוי © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים סריקה עד סוף הרשימה מציאת מספר האיברים ברשימה: public int size() { int len = 0; Node>T> pos = this.first; while (pos != null) len++; pos = pos.getNext(); } return len; סריקה עד סוף הרשימה © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

סריקה עד קיום תנאי מסוים סריקה עד קיום תנאי רצוי פעולה המחזירה את מקומו של x נתון ברשימה: public static Node<Integer> getPosition (List<Integer> lst, int x) { Node<Integer> pos = lst.getFirst(); while ((pos != null) && (pos.getInfo() != x)) pos = pos.getNext(); return pos; } סריקה עד קיום תנאי מסוים © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

שאלה האם ניתן לכתוב את הפעולה getPosition(…) כפעולה פנימית? © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים כתיבת המחלקה רשימה UML: Node<T> first List<T> List() boolean isEmpty() Node<T> getFirst() Node<T> insert(Node<T> pos, T x) Node<T> remove(Node<T> pos) String toString() © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים פעולה בונה public List() { this.first = null; } רשימה ריקה © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים הפעולה getFirst() public Node<T> getFirst() { return this.first; } © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

הכנסת איבר במקום הראשון הכנסת איבר במקום שאינו הראשון פעולת ההכנסה public Node<T> insert (Node<T> pos, T x) { Node<T> temp = new Node<T> (x); if (pos == null) temp.setNext (this.first); this.first = temp; } else temp.setNext (pos.getNext()); pos.setNext (temp); return temp; יצירת חוליה עם הערך x הכנסת איבר במקום הראשון הכנסת איבר במקום שאינו הראשון © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

פעולת הוצאה הוצאת האיבר הראשון סריקה למציאת האיבר הקודם לזה שמוציאים public Node<T> remove (Node<T> pos) { if (this.first == pos) this.first = pos.getNext(); else Node<T> prevPos = this.getFirst(); while (prevPos.getNext() != pos) prevPos = prevPos.getNext(); prevPos.setNext (pos.getNext()); } Node<T> nextPos = pos.getNext(); pos.setNext (null); return nextPos; הוצאת האיבר הראשון סריקה למציאת האיבר הקודם לזה שמוציאים הוצאת האיבר עדכון pos ניתוק ההפניה next של החוליה שמוציאים © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים שאלה ? השלימו את קוד הפעולה toString(): public String toString() { } © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים יעילות פעולות הממשק remove (..) – O(n) toString() – O(n) כל יתר הפעולות – O(1) © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים פעולות נוספות על רשימה פעולות אלו לא יתווספו לממשק הרשימה, אלא יוגדרו כפעולות חיצוניות. © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

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

יצירת תת רשימה ובה מספרים זוגיים מרשימה נתונה public static List<Integer> getEvenList (List<Integer> lst) { List<Integer> evenList = new List<Integer>(); Node<Integer> pos1 = lst.getFirst(); Node<Integer> pos2 = evenList.getFirst(); while (pos1 != null) if ((pos1.getInfo() % 2) == 0) pos2 = evenList.insert (pos2, pos1.getInfo()); pos1 = pos1.getNext(); } return evenList; יצירת רשימה חדשה הפניה לחוליה הראשונה ברשימה הנתונה הפניה לחוליה הראשונה ברשימה החדשה המכילה כרגע null קידום ההפניה pos2 תוך כדי ההכנסה © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

הכנסת ערכים לרשימה ממוינת public static void insertIntoSortedList (List<String> lst, String str) { Node<String> prev = null; Node<String> pos = lst.getFirst(); while ((pos != null) && (pos.getInfo().compareTo(str) < 0)) prev = pos; pos = pos.getNext(); } lst.insert (prev, str); © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים שאלה ? הראו כי הפעולה תפעל כראוי בכל מקרי הקצה הקיימים. ? אילו שינויים יש לעשות בפעולה כך שתבצע את משימתה על רשימה של מספרים שלמים? רמז: נדרשים ארבעה שינויים. © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

מיון רשימה באמצעות מיון הכנסה (insertion sort) שתי אפשרויות מיון: 1. הפעולה מחזירה רשימה חדשה שבה הערכים של הרשימה המקורית ממוינים. 2. הפעולה תמיין את הרשימה הנתונה (in place sort) © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

מיון רשימה באמצעות מיון הכנסה (insertion sort) נתחיל באפשרות הראשונה – החזרת רשימה חדשה ממוינת: public static List<Integer> insertionSort (List<Integer> lst) { List<Integer> sortedList = new List<Integer>(); Node<Integer> pos = lst.getFirst(); while (pos != null) insertIntoSortedList (sortedList, pos.getInfo()); pos = pos.getNext(); } return sortedList; פעולה שכתבנו קודם © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

מיון רשימה באמצעות מיון הכנסה (insertion sort) האפשרות השנייה – מיון במקום: הרשימה מחולקת לשני חלקים: החלק הראשון ממוין, החלק השני אינו ממוין. בתחילת הפעולה החלק הראשון אינו קיים, והחלק השני הוא הרשימה כולה. החלוקה נעשית באמצעות ההפניה untilPos שמסמנת את התחלה של החלק הלא ממוין. בכל שלב אנו לוקחים איבר מהחלק הלא ממוין ומכניסים אותו למקומו הנכון בחלק הממוין. ההכנסה מתבצעת באמצעות פעולת עזר: insertIntoSortedList(…). לאחר ההכנסה לחלק הממוין האיבר מוצא מהחלק הלא ממוין. © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

מיון רשימה באמצעות מיון הכנסה (insertion sort) public static void insertionSortInPlace (List<Integer> lst) { Node<Integer> untilPos = lst.getFirst(); while (untilPos != null) insertIntoPartialSortedList (lst, untilPos); untilPos = lst.remove (untilPos); } פעולת עזר © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

insertIntoPartialSortedList (lst, untilPos) private static void insertIntoPartialSortedList(List<Integer> lst, Node<Integer> untilPos) { Node<Integer> prev = null; Node<Integer> pos = lst.getFirst(); while ((pos != untilPos) && (untilPos.getInfo() > pos.getInfo())) prev = pos; pos = pos.getNext(); } lst.insert (prev, untilPos.getInfo()); © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים שאלה בפעולה insertIntoSortedList (…) הפרמטר השני הוא ערך, ואילו בפעולה – insertIntoPartialSortedList(…) הפרמטר השני הוא חוליה. הסבירו מדוע בפעולה insertIntoPartialSortedList (…) יש צורך בפרמטר מטיפוס חוליה. © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

ייצוג אוספים באמצעות רשימה נייצג שלושה אוספים באמצעות רשימה: StudentList מחסנית תור © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים StudentList - ממשק © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

StudentList – ייצוג ופעולה בונה public class StudentList { List<Student> lst; public StudentList() this.lst = new List<Student>(); } ... © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

השתמשנו בפעולה של הרשימה להכנסה במקום הראשון StudentList - מימוש ראינו כי פעולת ההוספה יכולה להיעשות בשתי דרכים: למקום כלשהו. למקום המתאים לפי הסדר האלפביתי. הוספה למקום כלשהו (בחרנו את המקום הראשון כי זה נוח): public void add (Student st) } this.lst.insert (null, st); { השתמשנו בפעולה של הרשימה להכנסה במקום הראשון © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

היעזרו בפעולה insertIntoSortedList(...) שאלה ? ממשו את המחלקה כך שפעולת ההוספה add(…) תוסיף את התלמיד למקומו הנכון לפי הסדר האלפביתי. public void add (Student st) { Node<Student> prev = null; Node <Student > pos = lst.getFirst(); while ((pos != null) && (pos.getInfo().getName().compareTo(st.getName()) < 0)) prev = pos; pos = pos.getNext(); } lst.insert (prev, st. getName()); היעזרו בפעולה insertIntoSortedList(...) © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים StudentList שאלה: מה היתרון בשימוש בשרשרת חוליות לייצוג רשימת התלמידים לעומת שימוש ברשימה? תשובה: שימוש חוזר בקוד. © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

ייצוג אוסף כללי באמצעות רשימה נייצג שני אוספים כלליים באמצעות רשימה: מחסנית תור © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים ממשק המחלקה מחסנית © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

ייצוג מחסנית והפעולה הבונה public class Stack<T> { private List<T> data; public Stack() this.data = new List<T>(); } © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

שאלה ? ממשו את המחלקה מחסנית כאשר היא מיוצגת באמצעות רשימה. © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים ייצוג תור בחרנו לבצע את ההכנסה לסוף הרשימה ואת ההוצאה מתחילת הרשימה (דומה לשרשרת חוליות). על מנת לגשת לסוף הרשימה הוספנו תכונה: last. © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

ייצוג התור והפעולה הבונה public class Queue<T> { private List<T> data; private Node<T> last; public Queue() this.data = new List<T>(); this.last = null; } © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים ממשק המחלקה תור © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

שאלה ? ממשו את המחלקה תור כאשר היא מיוצגת באמצעות רשימה. © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

מימוש רקורסיבי של פעולות ברשימה נכתוב פעולת עזר רקורסיבית הפועלת על שרשרת חוליות נכתוב פעולה של הרשימה שתזמן את פעולת העזר © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

הנחה: node אינו שווה null הפעולה size(…) – פעולה פנימית נכתוב פעולת עזר הפועלת על שרשרת חוליות: private int sizeHelp (Node<T> node) } if (node.getNext() == null) return 1; return 1 + sizeHelp (node.getNext()); הנחה: node אינו שווה null © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

בדיקה הכרחית לפני זימון פעולת העזר. אחרת עלולה להיות שגיאה בפעולת העזר הפעולה size() בדיקה הכרחית לפני זימון פעולת העזר. אחרת עלולה להיות שגיאה בפעולת העזר public int size() { if (this.first == null) return 0; return sizeHelp (this.first); } © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים שאלה ? ממשו את הפעולה: public static Node<Integer> getPosition (List<Integer> lst, int x) הפעולה מחזירה את המקום ברשימה lst המכיל את הערך x. אםx אינו ברשימה, יוחזר null. א. כתבו את הפעולה כך שלא תשתמש ברקורסיה. ב. כתבו את הפעולה כפעולה רקורסיבית (מותר להגדיר פעולות עזר רקורסיביות). © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים רשימה דו-כיוונית חוליה יכולה להיות דו–כיוונית (בנוסף לתכונה next, קיימת בחוליה דו-כיוונית התכונה prev, המכילה הפניה לחוליה הקודמת) מחוליה דו-כיוונית ניתן ליצור שרשרת חוליות דו-כיוונית. בשרשרת חוליות דו-כיוונית היעילות של הפעולה remove(…) היא O(1) ולא O(n). נמקו מדוע? © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים שאלה ? איך תשתנה היעילות של הפעולה: insertIntoSortedList(…) (דוגמה 2, סעיף ו), כאשר הרשימה תיוצג באמצעות שרשרת חוליות דו-כיוונית? הסבירו. © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

רשימה – טיפוס נתונים מופשט? רשימה אינה טיפוס נתונים מופשט: הייצוג חשוף יש אפשרות לקלקל את הרשימה בעזרת פעולות החוליה © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

רשימה – טיפוס נתונים מופשט? נתונה רשימה של מספרים ראשוניים: lst = [2, 3, 7, 11] יעקב רצה להכניס את המספר 5 בין המספרים 3 ו-7. לצורך כך הוא כתב את הקוד הזה: Node<Integer> pos = lst.getFirst(); pos = pos.getNext(); Node<Integer> n = new Node<Integer>(5); pos.setNext(n); n.setNext(pos.getNext()); בדקו מה יתקבל בהדפסה? מה מקור הבעיה? © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

מסקנה: הרשימה היא מבנה נתונים אך אינה טיפוס נתונים מופשט רשימה – טיפוס נתונים מופשט כדי לשפר את יעילות הפעולות של רשימה, שינו את הייצוג לשרשרת חוליות דו-כיוונית בינתיים תיקן יעקב את הקוד שלו (החליף בין שתי השורות האחרונות). האם עכשיו הקוד נכון? מסקנה: הרשימה היא מבנה נתונים אך אינה טיפוס נתונים מופשט © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים סוף © המרכז להוראת המדעים האוניברסיטה העברית בירושלים