1 / 21

רשימה מקושרת Linked Lists

רשימה מקושרת Linked Lists. בעיה ?. STRING איך עושים Dim x as String בלי לדעת מראש את הגודל!. A. C. B. . רשימה מקושרת. Head. Linked Lists. A. C. B. A. Linked Lists – רשימה מקושרת. רשימה מקושרת היא סדרה של יחידות מקושרות לכל יחידה קוראים קדקוד ( node )

goro
Download Presentation

רשימה מקושרת Linked Lists

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. רשימה מקושרתLinked Lists

  2. בעיה ? • STRING • איך עושים Dim x as String בלי לדעת מראש את הגודל!

  3. A C B  רשימה מקושרת Head Linked Lists

  4. A C B A Linked Lists – רשימה מקושרת • רשימה מקושרת היא סדרה של יחידות מקושרות • לכל יחידה קוראים קדקוד (node) • בכל קדקוד (node) יש לכל הפחות • יחידה של מידע (מסוג כלשהו) • מצביע לקדקוד הבא ברשימה. • Head– מצביע לראש הרשימה • הקדקוד האחרון מצביע לNULL  Head node data pointer מתורגם מ -www.cs.ust.hk/~qyang/171/linked-list.ppt

  5. איך בנויה רשימה מקושרת? • קדקוד (NODE או LINK) • המידע ששומרים (או אוסף המידע) • קישור לקדקוד הבא (מדי פעם גם לקדקוד הקודם) • מחלקה לניהול הקדקודים (LINKED LIST) • משתנה לשמירת המקום של הקדקוד הראשון • פונקציית בנאי (CONSTRUCTOR) ליצירת קדקוד ראשון • פונקציית עזר (PRINT, ADD, DELETE, וכו')

  6. A C B Z ניהול הקדקודים - הוספת קדקוד • נרצה להוסיף קדקוד Z בין B ל C • תחילה יש למצוא את B • מתחילים מHead ובודקים כל קדקוד, עד שמוצאים את B • כשמוצאים את B דוחפים אחריו את Z ומסדרים את הקשרים  Head

  7. D C B A ניהול הקדקודים - הורדת קדקוד • נרצה להוריד את קדקוד B • תחילה יש למצוא את B • מתחילים מHead ובודקים כל קדקוד, עד שמוצאים את B • כשמוצאים את B מסדרים את הקשרים ומוחקים אותו  Head

  8. דרך אחרת לחשוב על רשימה מקושרת • כל קדקוד קשור לקדקוד שבא אחריו • כלומר במקום המצביע שהיה לנו קודם, נשחיל את הקדוקודים אחד בשני

  9. נבנה רשימה מקושרת בעזרת מחלקות • נבנה מחלקה Link • המחלקה מתארת קודקוד (חוליה בודדת בשרשרת) • נבנה מחלקה LinkedList • המחלקה מתארת את השרשרת ובנויה מLinks

  10. מבנה המחלקה Link • משתנים • מידע השמור בחוליה (integer, string, structure…) • הקדקוד הבא (החוליה שמושחלת בתוך החוליה הנוכחית) • למחלקה יש את המתודות הבאות: • שני בנאים • אחד ליצירת הקדקוד הראשון, המקבלת רק מידע • אחד ליצירת קדקוד שנוסף לרשימה קיימת, המקבלת מידע ואת החוליה הקודמת • מתודה שמחזירה את המידע מהקדקוד • מתודה שמחזירה את הקדקוד הבא

  11. דוגמא של LINK PublicClassLink PrivatetheStringAsString PrivatetheLinkAsLink PublicSubNew(ByValtheDataAsString, ByValmyParentAsLink) ?? EndSub PublicSubNew(ByValtheDataAsString) ?? EndSub FunctionGetData() AsString ?? EndFunction FunctionGetLink() AsLink ?? EndFunction EndClass

  12. Me • כאשר אנו כותבים את המחלקה, אנחנו מייצרים "תכנון" של המחלקה • בזמן ריצה מיוצרים אובייקטים, שהם מימוש לפי התכנון הנ"ל • בזמן ריצה: Me מצביע לאובייקט עצמו

  13. דוגמא של LINK PublicClassLink PrivatetheStringAsString PrivatetheLinkAsLink PublicSubNew(ByValtheDataAsString, ByValmyParentAsLink) theString = theData myParent.theLink = Me EndSub PublicSubNew(ByValtheDataAsString) theString = theData EndSub FunctionGetData() AsString ReturntheString EndFunction FunctionGetLink() AsLink ReturntheLink EndFunction EndClass

  14. מבנה המחלקה LinkedList • משתנים • הקדקוד הנוכחי • הקדקוד הראשון • אורך הרשימה • למחלקה יש את המתודות הבאות: • בנאי • מתודה שמוסיפה קדקוד • מתודה שמחזירה את הקדקוד הבא • מתודה שמחזירה את הקדקוד הנוכחי • מתודה שמחזירה את הקדקוד הראשון • בסוף נוסיף גם מתודת הדפסה

  15. בניית המחלקה LINKEDLIST - המשתנים PublicClassLinkedList PrivateFirstLinkAsLink PrivateCurrentLinkAsLink Private Size AsInteger EndClass

  16. המחלקה LINKEDLIST – הוספת בנאי PublicClassLinkedList PrivateFirstLinkAsLink PrivateCurrentLinkAsLink Private Size AsInteger PublicSubNew(ByValtheDataAsString) FirstLink = NewLink(theData) CurrentLink = FirstLink Size = 1 EndSub EndClass

  17. PublicClassLinkedList PrivateFirstLinkAsLink PrivateCurrentLinkAsLink Private Size AsInteger PublicSubNew(ByValtheDataAsString) FirstLink = NewLink(theData) CurrentLink = FirstLink Size = 1 EndSub PublicFunctionMakeLink(ByValtheDataAsString, ByVal last AsLink) AsLink ?? EndFunction FunctionGetNextLink(ByValaLinkAsLink) AsLink ?? EndFunction FunctionGetCurrentLink() AsLink ?? EndFunction FunctionGetFirstLink() AsLink ?? EndFunction EndClass המחלקה LINKEDLIST – הוספת מתודות

  18. תוכן המתודות של LINKEDLIST PublicClassLinkedList PrivateFirstLinkAsLink PrivateCurrentLinkAsLink Private Size AsInteger PublicSubNew(ByValtheDataAsString) FirstLink = NewLink(theData) CurrentLink = FirstLink Size = 1 EndSub PublicFunctionMakeLink(ByValtheDataAsString, ByVal last AsLink) AsLink CurrentLink = NewLink(theData, last) Size = Size + 1 ReturnCurrentLink EndFunction FunctionGetNextLink(ByValaLinkAsLink) AsLink ReturnaLink.GetLink() EndFunction FunctionGetCurrentLink() AsLink ReturnCurrentLink EndFunction FunctionGetFirstLink() AsLink ReturnFirstLink EndFunction EndClass

  19. PublicClassLinkedList PrivateFirstLinkAsLink PrivateCurrentLinkAsLink Private Size AsInteger PublicSubNew(ByValtheDataAsString) FirstLink = NewLink(theData) CurrentLink = FirstLink Size = 1 EndSub PublicFunctionMakeLink(ByValtheDataAsString, ByVal last AsLink) AsLink CurrentLink = NewLink(theData, last) Size = Size + 1 ReturnCurrentLink EndFunction FunctionGetNextLink(ByValaLinkAsLink) AsLink ReturnaLink.GetLink() EndFunction FunctionGetCurrentLink() AsLink ReturnCurrentLink EndFunction FunctionGetFirstLink() AsLink ReturnFirstLink EndFunction PublicSubPrintAll() DimiAsInteger Dim temp AsLink = FirstLink Fori = 0 To Size - 1 Console.WriteLine("Contents of Place " & i & " is :") Console.WriteLine(temp.GetData) 'temp = temp.GetLink temp = GetNextLink(temp) Next EndSub EndClass הוספת מתודת הדפסה LINKEDLIST

  20. שימוש במחלקה (MAIN) Sub Main() Dim List AsNewLinkedList("Avi") DimaLinkAsLink = List.GetCurrentLink aLink = List.MakeLink("Bob", aLink) aLink = List.MakeLink("Chaim", aLink) List.PrintAll() EndSub

  21. שיפורים??? • להדפיס טווח של קדקודים • להדפיס את הרשימה בסדר יורד • חיפוש אחרי מידע (ולהחזיר את התא או התאים שבו הוא נמצא) • שינוי של הNODE להכניס כמה סוגי מידע • איך??????

More Related