21
תתתתת תתתתתתLinked Lists

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

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: רשימה מקושרת Linked Lists

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

Page 2: רשימה מקושרת Linked Lists

? בעיה•STRING

Dim x as Stringאיך עושים •

בלי לדעת מראש את הגודל!

Page 3: רשימה מקושרת Linked Lists

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

Head

B C

Linked Lists

Page 4: רשימה מקושרת Linked Lists

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

רשימה מקושרת היא סדרה של יחידות מקושרות•(nodeלכל יחידה קוראים קדקוד )–( יש לכל הפחותnodeבכל קדקוד )–

יחידה של מידע )מסוג כלשהו(•מצביע לקדקוד הבא ברשימה.•

•Head מצביע לראש הרשימה – NULLהקדקוד האחרון מצביע ל •

A

Head

B C

A

data pointer

node

www.cs.ust.hk/~qyang/171/linked-list.pptמתורגם מ -

Page 5: רשימה מקושרת Linked Lists

?איך בנויה רשימה מקושרת

(LINK או NODEקדקוד )•המידע ששומרים )או אוסף המידע(–קישור לקדקוד הבא )מדי פעם גם לקדקוד הקודם(–

(LINKED LISTמחלקה לניהול הקדקודים )•משתנה לשמירת המקום של הקדקוד הראשון–( ליצירת קדקוד ראשוןCONSTRUCTORפונקציית בנאי )–, וכו'(PRINT, ADD, DELETEפונקציית עזר )–

Page 6: רשימה מקושרת Linked Lists

ניהול הקדקודים - הוספת קדקודC ל B בין Zנרצה להוסיף קדקוד –Bתחילה יש למצוא את –

B ובודקים כל קדקוד, עד שמוצאים את Headמתחילים מ•

ומסדרים את Z דוחפים אחריו את Bכשמוצאים את –הקשרים

A

Head

B C

Z

Page 7: רשימה מקושרת Linked Lists

ניהול הקדקודים - הורדת קדקוד

Bנרצה להוריד את קדקוד –Bתחילה יש למצוא את –

B ובודקים כל קדקוד, עד שמוצאים את Headמתחילים מ•

מסדרים את הקשרים ומוחקים אותוBכשמוצאים את –

B

Head

C DA

Page 8: רשימה מקושרת Linked Lists

דרך אחרת לחשוב על רשימה מקושרת

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

בשני

Page 9: רשימה מקושרת Linked Lists

נבנה רשימה מקושרת בעזרת מחלקות

Linkנבנה מחלקה –המחלקה מתארת קודקוד )חוליה בודדת בשרשרת(•

LinkedListנבנה מחלקה – Linksהמחלקה מתארת את השרשרת ובנויה מ•

Page 10: רשימה מקושרת Linked Lists

Linkמבנה המחלקה

משתנים–…(integer, string, structureמידע השמור בחוליה )•הקדקוד הבא )החוליה שמושחלת בתוך החוליה •

הנוכחית(

למחלקה יש את המתודות הבאות:–שני בנאים•

אחד ליצירת הקדקוד הראשון, המקבלת רק מידע–אחד ליצירת קדקוד שנוסף לרשימה קיימת, המקבלת מידע –

ואת החוליה הקודמת

מתודה שמחזירה את המידע מהקדקוד•מתודה שמחזירה את הקדקוד הבא•

Page 11: רשימה מקושרת Linked Lists

LINKדוגמא של

Public Class Link Private theString As String Private theLink As Link Public Sub New(ByVal theData As String, ByVal myParent As Link) ?? End Sub Public Sub New(ByVal theData As String) ?? End Sub Function GetData() As String ?? End Function Function GetLink() As Link ?? End Function End Class

Page 12: רשימה מקושרת Linked Lists

Me

כאשר אנו כותבים את המחלקה, אנחנו •מייצרים "תכנון" של המחלקה

בזמן ריצה מיוצרים אובייקטים, שהם מימוש •לפי התכנון הנ"ל

מצביע לאובייקט עצמוMeבזמן ריצה: •

Page 13: רשימה מקושרת Linked Lists

LINKדוגמא של

Public Class Link Private theString As String Private theLink As Link Public Sub New(ByVal theData As String, ByVal myParent As Link) theString = theData myParent.theLink = Me End Sub Public Sub New(ByVal theData As String) theString = theData End Sub Function GetData() As String Return theString End Function Function GetLink() As Link Return theLink End Function End Class

Page 14: רשימה מקושרת Linked Lists

LinkedListמבנה המחלקה משתנים–

הקדקוד הנוכחי•הקדקוד הראשון•אורך הרשימה•

למחלקה יש את המתודות הבאות:–בנאי•מתודה שמוסיפה קדקוד•מתודה שמחזירה את הקדקוד הבא•מתודה שמחזירה את הקדקוד הנוכחי•מתודה שמחזירה את הקדקוד הראשון•

בסוף נוסיף גם מתודת הדפסה–

Page 15: רשימה מקושרת Linked Lists

- LINKEDLISTבניית המחלקה המשתנים

Public Class LinkedList

Private FirstLink As Link Private CurrentLink As Link Private Size As Integer

End Class

Page 16: רשימה מקושרת Linked Lists

– הוספת בנאיLINKEDLISTהמחלקה

Public Class LinkedList Private FirstLink As Link Private CurrentLink As Link Private Size As Integer Public Sub New(ByVal theData As String) FirstLink = New Link(theData) CurrentLink = FirstLink Size = 1 End SubEnd Class

Page 17: רשימה מקושרת Linked Lists

המחלקה LINKEDLIST –

הוספת מתודות

Public Class LinkedList Private FirstLink As Link Private CurrentLink As Link Private Size As Integer Public Sub New(ByVal theData As String) FirstLink = New Link(theData) CurrentLink = FirstLink Size = 1 End Sub Public Function MakeLink(ByVal theData As String, ByVal last As Link) As Link

?? End Function Function GetNextLink(ByVal aLink As Link) As Link

?? End Function Function GetCurrentLink() As Link

?? End Function Function GetFirstLink() As Link ?? End FunctionEnd Class

Page 18: רשימה מקושרת Linked Lists

תוכן המתודות של LINKEDLIST

Public Class LinkedList Private FirstLink As Link Private CurrentLink As Link Private Size As Integer Public Sub New(ByVal theData As String) FirstLink = New Link(theData) CurrentLink = FirstLink Size = 1 End Sub Public Function MakeLink(ByVal theData As String, ByVal last As Link) As Link CurrentLink = New Link(theData, last) Size = Size + 1 Return CurrentLink End Function Function GetNextLink(ByVal aLink As Link) As Link Return aLink.GetLink() End Function Function GetCurrentLink() As Link Return CurrentLink End Function Function GetFirstLink() As Link Return FirstLink End FunctionEnd Class

Page 19: רשימה מקושרת Linked Lists

Public Class LinkedList Private FirstLink As Link Private CurrentLink As Link Private Size As Integer Public Sub New(ByVal theData As String) FirstLink = New Link(theData) CurrentLink = FirstLink Size = 1 End Sub Public Function MakeLink(ByVal theData As String, ByVal last As Link) As Link CurrentLink = New Link(theData, last) Size = Size + 1 Return CurrentLink End Function Function GetNextLink(ByVal aLink As Link) As Link Return aLink.GetLink() End Function Function GetCurrentLink() As Link Return CurrentLink End Function Function GetFirstLink() As Link Return FirstLink End Function

Public Sub PrintAll() Dim i As Integer Dim temp As Link = FirstLink For i = 0 To Size - 1 Console.WriteLine("Contents of Place " & i & " is :") Console.WriteLine(temp.GetData) 'temp = temp.GetLink temp = GetNextLink(temp) Next End Sub End Class

הוספת מתודת LINKEDLISTהדפסה

Page 20: רשימה מקושרת Linked Lists

(MAINשימוש במחלקה )

Sub Main() Dim List As New LinkedList("Avi") Dim aLink As Link = List.GetCurrentLink aLink = List.MakeLink("Bob", aLink) aLink = List.MakeLink("Chaim", aLink) List.PrintAll()

End Sub

Page 21: רשימה מקושרת Linked Lists

???שיפורים להדפיס טווח של קדקודים•

להדפיס את הרשימה בסדר יורד•

חיפוש אחרי מידע )ולהחזיר את התא או התאים שבו הוא •נמצא(

להכניס כמה סוגי מידעNODE שינוי של ה•

איך ??????•