1 / 16

Algoritmer och data strukturer -Länkade listor

Algoritmer och data strukturer -Länkade listor. n. 0. Statisk minnesallokering. Statiska minnesstrukturer (Arrayer) För stora / För små ”Jobbiga” add(index i) / remove( index i) operationer. ???. Dynamisk minnesallokering. Separata ”noder” Allokeras vid behov

thais
Download Presentation

Algoritmer och data strukturer -Länkade listor

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. Algoritmer och data strukturer -Länkade listor

  2. n 0 Statisk minnesallokering • Statiska minnesstrukturer (Arrayer) • För stora / För små • ”Jobbiga” add(index i) / remove( index i) operationer ???

  3. Dynamisk minnesallokering • Separata ”noder” • Allokeras vid behov • Avallokeras när de inte längre behövs • Håller information om: • Nodens data • Adress till nästa nod

  4. Minne En kedja av data 1 6 2 3 5 4

  5. Data Adress till nästa länk i kedjan En länk (nod) i kedjan • Olika sorters listor • Enkellänkade listor • Dubbellänkade listor • Cirkulära länkade listor public class ListNode { public Object element; public ListNode nextAddress; }

  6. Klassen ListNode / av Object En nod INNEHÅLL class ListNode { public Object element; public ListNodenextAddress; public ListNode( Object theElement ) { element= theElement; nextAddress= null; } public ListNode( Object theElement, ListNode n ) { element = theElement; nextAddress = n; } } Konstruerare 1, skapar en ”ej länkad nod ” Konstruerare 2 , skapar en länkad nod

  7. Klassen LinkedList Listans huvud class LinkedList { private ListNode head; public LinkedList ( ) { head = new ListNode( null ); } // metoder som : add(), remove(), find()…… Konstruerare , skapar en ”tom” nod som head ” känner till”

  8. Minne Huvud next 1 next 2 next 3 next Enkellänkade listor • Varje länk har en referens till nästa länk i listan • Kräver kännedom om ”föregående länk” vid insert() / remove() operationer null

  9. Huvud / Svans • När är listan slut? • När sista länkens nextAddress = null • Testa pånull under traverseringen public void print() { ListNode temp=head.nextAddress; while( temp!=null ){ System.out.println(temp.element); temp=temp.nextAddress; } • Bättre sätt – Huvud / Svans! • ”Dummy”-länkar som aldrig tas bort eller bär värden

  10. List traversering • Ingen möjlighet till indexering som hos statiska arrayer! • ”Länk för länk” med start på första länken tills rätt position hittad! public ListNode getNode(Object x) { ListNodetemp = head.next; while(temp.element != x) temp = temp.nextAddress; returntemp; }

  11. Minne Huvud next Svans next 1 next Huvud / Svans

  12. Minne Huvud next Svans next 1 next 2 next OBS! Först länka mot svansen sedan bryt länken från huvud

  13. Vanliga operationer på länkade listor • add() • add( int index) • remove() • find() • get( int index) • iterator() • contains() • size() I java gäller operationerna från List interface

  14. Minne Huvud prev next 1 prev next Svans prev next Dubbellänkade listor • Varje länk har en referens till nästa länk OCH en referens till föregående länk i listan. • Förenklar listmanipulationer • add( int index) • remove()

  15. Minne Cirkulära listor • Ta bort svansen och huvudet och knyt ihop liständarna 1 6 2 5 3 4

  16. Fördelar/ Nackdelar Effektiv när man lägger till och tar bort element Effektiv att hålla listan sorterad Betydligt mer effektivt vid stora datamängder genom att dirigera om pekarna istället för själva länkinnehållet Effektiv användning av minne. Något långsammare, pga. Många minnesallokering Många referensmanipulationer, lite svårare vid implementera och debbug

More Related