Listor. Koffman & Wolfgang kapitel 2, avsnitt , och 2.9

Relevanta dokument
Föreläsning 2. Länkad lista och iterator

Föreläsning 2. Länkad lista och iterator

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

So far... For recursive and iterative programs. Bubble, insertion, selection, quick, merge, counting

Föreläsning 4 Innehåll

Länkade strukturer. (del 2)

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Datastrukturer. föreläsning 3. Stacks 1

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036)

Föreläsning 3 Datastrukturer (DAT037)

Repetition av OOP- och Javabegrepp

Repetition av OOP- och Javabegrepp

Föreläsning 3 Datastrukturer (DAT037)

Föreläsning 2 Datastrukturer (DAT037)

Samlingar Collection classes

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning 1. Abstrakta datatyper, listor och effektivitet

! Skall den vara generisk? ! Skall den vara självexpanderande? ! Skall vi ha en speciell klass för listnoder? ! osv

OOP Objekt-orienterad programmering

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

DAT043 - föreläsning 8

Den som bara har en hammare tror att alla problem är spikar

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Programmering för språkteknologer II, HT2014. Rum

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

Seminarium 2 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

Föreläsning 3. Stack

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Seminarium 3 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Samlingar Collection classes

Föreläsning 10. ADT:er och datastrukturer

Föreläsning 4 Datastrukturer (DAT037)

Algoritmer och datastrukturer. HI1029 8,0 hp Föreläsning 1

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

Föreläsning 12. Länkade listor

Länkade strukturer, parametriserade typer och undantag

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Föreläsning 3. Stack

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Generisk klass med typparameter Inre klass - ListIterator

Arrayer. results

Föreläsning 2 Datastrukturer (DAT037)

F4: Mer om OU1, OU2, listor och träd. Carl Nettelblad

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Objektorienterad Programkonstruktion. Föreläsning 9 30 nov 2016

Föreläsning 1 Datastrukturer (DAT037)

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 5 Erik Nilsson, Institutionen för Datavetenskap, LiU

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

Algoritmer och datastrukturer. HI1029 8,0 hp Föreläsning 1

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Introduktion till Java

Lösningsförslag till tentamen Datastrukturer, DAT037,

Saker du ska kunna Föreläsning 13 & 14

TDDC30 Programmering i Java, datastrukturer och algoritmer

Lösningsförslag till tentamen i EDAA01 programmeringsteknik fördjupningkurs

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Sammansatta datatyper Generics: Parametrisk polymorfism

Tentamen Programmering fortsättningskurs DIT950

Tentamen Datastrukturer (DAT036)

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Interfacen Set och Map, hashtabeller

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Subtyping och variance. Objekt-orienterad programmering och design Alex Gerdes, 2018

public interface Skrivbar { void skriv(); } public class Punkt implements Skrivbar { public double x; public double y;

Java Collections Framework. Föreläsning 2 Innehåll. Java Collections Framework interface hierarki. Java Collections Framework interface hierarki

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

Tentamen Datastrukturer D DAT 036/DIT960

Lösningsförslag för tentamen i Datastrukturer (DAT037) från

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Föreläsning 2 Innehåll

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

TENTAMEN I DATAVETENSKAP

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

ADS : STACK ADT: STACK. Stack och Kö -Implementering - Tilllämpningar. Oftast förekommande metoder i Stack. TopOfStack

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

Objektorienterad Programmering (TDDC77)

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

Objektorienterad Programkonstruktion

Tentamen, EDAA30 Programmering i Java fortsättningskurs

Föreläsning 2 Innehåll. Generiska klasser. Generik i Java. Varför generiska klasser Bakgrund

Tentamen i Objektorienterad modellering och design Helsingborg

Objektorienterad programmering med Java, Generics

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Transkript:

Listor Koffman & Wolfgang kapitel 2, avsnitt 2.1 2.3, 2.5 2.6 och 2.9

Figur 2.1, sid 63 java.util.list, med dess implementeringar 2

List och primitiva typer En array kan innehålla primitiva typer: int[], double[], etc. Övriga container-klasser kan inte det, utan måste ha objekt som element Alltså måste vi använda objekt-motsvarigheterna Integer, Double, etc: ArrayList<Integer> LinkedList<Double> Men för det mesta så översätter Java automagiskt mellan primitiva typer och motsvarande objekt 3

Tabell 2.1, sid 68 Utvalda metoder från List<E> interface: 4

Figur 2.3, sid 71 Hur KWArrayList fungerar: en array thedata två variabler, size och capacity 5

Att skapa ett fält av typen E[] public KWArrayList () { capacity = INITIAL_CAPACITY; thedata = (E[]) new Object[capacity]; } 6

Att skapa ett fält av typen E[] public KWArrayList () { capacity = INITIAL_CAPACITY; thedata = (E[]) new Object[capacity]; } Denna sats allokerar plats för ett fält av typen Object[] och kastar det sedan till rätt typ E[]. Detta beror på en bugg i Java-specifikationen, och är förhoppningsvis enda gången ni ska behöva använda type casting, 6

Figur 2.4, sid 73 För att lägga till ett element stoppar vi bara in det på sista-positionen, och ökar sista-positionen med 1 under förutsättning att vi har plats kvar i det interna fältet 7

Figur 2.5, sid 74 För att lägga till något i mitten av fältet, behöver vi flytta fram de efterföljande elementen an plats vi måste börja flytta det sista elementet, och sedan gå baklänges genom fältet 8

Figur 2.6, sid 76 För att ta bort ett element, måste vi flytta efterföljarna ett steg framåt i fältet vi måste börja med det närmaste elementet och sedan fortsätta framåt i fältet till slutet 9

Om-allokering När det interna fältet blir för stort skapar vi ett nytt större och kopierar alla gamla data private void reallocate () { capacity *= 2; thedata = Arrays.copyOf(theData, capacity); } Det nya fältet är dubbelt så stort som det gamla vi dubblerar istället för att öka med en konstant då får vi konstant amorterad tidskomplexitet dvs, i medeltal blir tidsåtgången konstant (inte beroende av storleken på fältet) 10

Enkellänkade listor Att lägga till och ta bort element inuti en ArrayList tar linjär tid O(n) vilket är oändligt långsamt i vissa applikationer En länkad lista kan lägga till och ta bort varsomhelt i en lista i konstant tid, O(1) å andra sidan tar det linjär tid O(n) att gå till en specifik position i en länkad lista, vilket är konstant i en ArrayList I en länkad lista så är varje element ( nod ) länkad till det efterföljande elementet 11

Figur 2.15, sid 90 En enkellänkad listnod innehåller noddata, och en länk till efterföljaren private static class Node<E> { private E data; private Node<E> next; } 12

Figur 2.16, sid 90 Länkad representation av listan { Tom, Dick, Harry, Sam } 13

Exempellista SLList<String> head = data = "Tom" null data = "Dick" 14

Metoden addfirst(e item) SLList<String> head = data = "Tom" null data = "Dick" 15

Metoden addfirst(e item) SLList<String> head = data = "Tom" null data = "Dick" data = "Ann" item 15

Metoden addfirst(e item) SLList<String> head = data = "Tom" null data = "Dick" data = "Ann" item 15

Metoden addfirst(e item) SLList<String> head = data = "Tom" null data = "Dick" data = "Ann" item 15

addafter(node<e> node, E item) SLList<String> head = data = "Tom" null data = "Dick" 16

addafter(node<e> node, E item) SLList<String> head = data = "Tom" null data = "Dick" node 16

addafter(node<e> node, E item) SLList<String> head = data = "Tom" null data = "Dick" node data = "Ann" item 16

addafter(node<e> node, E item) SLList<String> head = data = "Tom" null data = "Dick" node data = "Ann" item 16

addafter(node<e> node, E item) SLList<String> head = data = "Tom" null data = "Dick" node data = "Ann" item 16

removefirst() SLList<String> head = data = "Tom" null data = "Dick" 17

removefirst() SLList<String> head = data = "Tom" null data = "Dick" noden som tas bort 17

removefirst() SLList<String> head = data = "Tom" null data = "Dick" noden som tas bort 17

removefirst() SLList<String> head = data = "Tom" null data = "Dick" noden som tas bort 17

removefirst() SLList<String> head = null data = "Dick" 17

removeafter(node<e> node) SLList<String> head = data = "Tom" null data = "Dick" data = "Ann" 18

removeafter(node<e> node) SLList<String> head = data = "Tom" null data = "Dick" node data = "Ann" 18

removeafter(node<e> node) noden som tas bort SLList<String> head = data = "Tom" null data = "Dick" node data = "Ann" 18

removeafter(node<e> node) noden som tas bort SLList<String> head = data = "Tom" null data = "Dick" node data = "Ann" 18

removeafter(node<e> node) noden som tas bort SLList<String> head = data = "Tom" null data = "Dick" node data = "Ann" 18

removeafter(node<e> node) SLList<String> head = data = "Tom" node data = "Ann" 18

Dubbellänkade listor Avsnitt 2.6, endast översiktligt Figur 2.20, sid 100 19

Cirkulära dubbellänkade listor Avsnitt 2.6, endast översiktligt Figur 2.25, sid 103 20

Klassen LinkedList java.util.linkedlist<e> 21

Collection interface Specificerar en delmängd av metoderna i List interface Bland annat: add(e) remove(object) iterator() Men inte: add(int, E) get(int) remove(int) set(int, E) 22

23 Java Collection Framework

Tabell 2.12, sid 123 java.util.collection<e> ordningen mellan element är inte specificerad ett elements position är inte specificerad om ett element redan finns i samlingen, så är det inte säkert att det läggs till igen 24

AbstractCollection, AbstractList, och AbstractSequentialList AbstractCollection<E> det räcker att implementera add(e), size(), iterator() AbstractList<E> det räcker att implementera add(int, E), get(int), remove(int), set(int, E), size() public class KWArrayList<E> extends AbstractList<E> implements List<E> AbstractSequentialList<E> det räcker att implementera listiterator(), size() public class KWLinkedList<E> extends AbstractSequentialList<E> implements List<E> 25