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

Preview:

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

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

? בעיה•STRING

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

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

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

Head

B C

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מתורגם מ -

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

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

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

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

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

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

A

Head

B C

Z

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

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

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

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

B

Head

C DA

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

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

בשני

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

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

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

Linkמבנה המחלקה

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

הנוכחית(

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

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

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

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

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

Me

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

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

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

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

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

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

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

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

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

Public Class LinkedList

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

End Class

– הוספת בנאי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

המחלקה 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

תוכן המתודות של 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

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הדפסה

(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

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

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

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

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

איך ??????•

Recommended