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

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

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

Föreläsning 12. Länkade listor

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

Länkade strukturer. (del 2)

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

Datastrukturer. föreläsning 3. Stacks 1

Föreläsning 15: Repetition DVGA02

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

Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Abstrakta datastrukturer

Föreläsning 13. Träd

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Länkade strukturer, parametriserade typer och undantag

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

Lösningsförslag till exempeltenta 2

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

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

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

Stackar, köer, iteratorer och paket

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

Föreläsning 3 Datastrukturer (DAT037)

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

Föreläsning 3 Datastrukturer (DAT037)

Datastrukturer och algoritmer

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

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

Föreläsning 3. Stack

Föreläsning 3. Stack

Datastrukturer och algoritmer

Föreläsning 4 Innehåll

Kurskod D0010E Datum Skrivtid 5tim

Föreläsning 14 Innehåll

Tentamen Datastrukturer D DAT 035/INN960

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

DAT043 - föreläsning 8

Samlingar Collection classes

Abstrakta datatyper Laboration 2 GruDat, DD1344

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

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar

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.

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

Seminarium 13 Innehåll

Föreläsning 4 Datastrukturer (DAT037)

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar

Repetition av OOP- och Javabegrepp

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

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

Tentamen i Algoritmer & Datastrukturer i Java

Tommy Färnqvist, IDA, Linköpings universitet

Repetition av OOP- och Javabegrepp

Föreläsning 2. Stackar, köer och listor TDDC91,TDDE22,725G97: DALG. Innehåll. 1 ADT stack. 1.1 Tillämpningar

Föreläsning 13 Innehåll

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) "Snabba frågor" Alla svar motiveras väl.

Tommy Färnqvist, IDA, Linköpings universitet

Tentamen Datastrukturer, DAT037 (DAT036)

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

Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag)

Föreläsning Datastrukturer (DAT036)

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

DAI2 (TIDAL) + I2 (TKIEK)

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

Länkade listor, stackar och köer

Föreläsning 14. Träd och filhantering

Övning 1 - Abstrakta datatyper

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } }

Tentamen Datastrukturer (DAT036)

TDDC30 Programmering i Java, datastrukturer och algoritmer

Stack, specifikation. Stack och Kö. Y s t M A p. Stack. <== > Y s t M A p <== > Prioritetskö

Tentamen kl Uppgift 4. Uppgift 5

Objektorienterad programmering

Exempeltenta GruDat 2002/2003

Datastrukturer och algoritmer

725G61 - Laboration 3 Metoder och abstrakta datatyper. Johan Falkenjack

2 Modul 2 - (Länkade) Listor

Lösningsförslag till exempeltenta 1

Mål Förklaring av termer

Lösningsförslag till tentamen Datastrukturer, DAT037,

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014

Datastrukturer, algoritmer och programkonstruktion (DVA104, HT 2014) Föreläsning 5

Föreläsning 7. Träd och binära sökträd

Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.'

Övningsuppgifter #11, Programkonstruktion och datastrukturer

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

Mål Förklaring av termer

Föreläsning 1 Datastrukturer (DAT037)

Facit Tentamen TDDC kl (6)

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

Exempel ( )

Transkript:

Föreläsning 11 ADT:er och datastrukturer

ADT:er och datastrukturer Dessa två begrepp är kopplade till varandra men de står för olika saker. En ADT (abstrakt datatyp) är just abstrakt och är inte kopplad till något programmeringsspråk eller till implementering. En datastruktur är konkret och till de flesta programmeringsspråk finns en eller flera inbyggda datastrukturer. 2

ADT (abstrakt datatyp) En ADT är en programspråksoberoende beskrivning av en mängd data och operationer på denna data för att lagra, komma åt och manipulera den. I objektorienterade programmeringsspråk (som Java) implementeras ADT:er med klasser. Med hjälp av gränssnitt kan man säkerställa att man får med alla de metoder som anges i ADT:n. Exempel på vanliga abstrakta datatyper är: - mängd - sekvens (lista, kö, stack) 3

ADT:n Mängd Exempel på egenskaper: - En oordnad samling av unika element. - an innehålla ett obegränsat antal element. Exempel på operationer: Beskrivning: Skapar en tom mängd. Post: en ny tom mängd har skapats Mängd() Beskrivning: ollar om ett element finns i mängden. Post: resultat = sant om elementet i mängden, annars falskt contains(in: element, ut: boolskt värde) Beskrivning: Lägger till ett element i mängden. Pre:!contains(element) Post: element är lagt till mängden add(in: element) Beskrivning: Tar bort ett element ur mängden. Pre: contains(element) Post: element är borttaget ur mängden remove(in: element) Beskrivning: ollar om mängden är tom. Post: resultat = sant om mängden är tom, annars falskt isempty(ut: boolskt värde) Beskrivning: Bestämmer mängdens storlek. Post: resultat = mängdens storlek size(ut: heltal) 4

Gränssnitt De operationer som finns till en ADT kan samlas i ett gränssnitt som en implementering av ADT:n kan implementera. Exempel på Javagränssnitt för ADT:n Mängd: public interface SetADT<E> { public boolean contains(e element); public void add(e element); public void remove(e element); public boolean isempty(); public int size(); } 5

ADT:n Lista Exempel på egenskaper: - En ordnad sekvens av element. - an innehålla ett obegränsat antal element. Exempel på operationer: Beskrivning: Skapar en tom lista. Post: en ny tom lista har skapats Lista() Beskrivning: ollar om ett element finns i listan. Post: resultat = sant om elementet i listan, annars falskt contains(in: element, ut: boolskt värde) Beskrivning: Lägger till ett element på viss plats i listan. Pre: 0 <= index <= size() Post: element är lagt till listan på plats index add(in: element, index (heltal)) Beskrivning: Tar bort ett element på en viss plats ur listan. Pre: 0 <= index < size() Post: element på plats index är borttaget ur listan remove(in: index (heltal)) Beskrivning: ollar om listan är tom. Post: resultat = sant om listan är tom, annars falskt isempty(ut: boolskt värde) Beskrivning: Bestämmer listans storlek. Post: resultat = listans storlek size(ut: heltal) 6

ADT:n ö Exempel på egenskaper: - En ordnad sekvens av element. - an innehålla ett obegränsat antal element. - FIFO (first in first out). Exempel på operationer: Beskrivning: Skapar en tom kö. Post: en ny tom kö har skapats ö() Beskrivning: Lägger till ett element i kön. Post: element är lagt sist i kön enqueue(in: element) Beskrivning: Tar bort elementet först i kön. Pre:!isEmpty() Post: elementet först i kön är borttaget och returnerat dequeue(ut: element) Beskrivning: ollar om kön är tom. Post: resultat = sant om kön är tom, annars falskt isempty(ut: boolskt värde) 7

ADT:n Stack Exempel på egenskaper: - En ordnad sekvens av element. - an innehålla ett obegränsat antal element. - LIFO (last in first out). Exempel på operationer: Beskrivning: Skapar en tom stack. Post: en ny tom stack har skapats Stack() Beskrivning: Lägger till ett element på stacken. Post: element är lagt överst på stacken push(in: element) Beskrivning: Tar bort elementet överst på stacken. Pre:!isEmpty() Post: elementet överst på stacken är borttaget och returnerat pop(ut: element) Beskrivning: ollar om stacken är tom. Post: resultat = sant om stacken är tom, annars falskt isempty(ut: boolskt värde) 8

Gränssnitt Exempel på Javagränssnitt för ADT:erna ö och Stack: public interface QueueADT<E> { public void enqueue(e element); public E dequeue(); public boolean isempty(); } public interface StackADT<E> { public void push(e element); public E pop(); public boolean isempty(); } 9

Implementationer av ADT:er En ADT kan implementeras på många sätt. Hur man implementerar en ADT spelar inte någon större roll så länge man får med de egenskaper och operationer som angetts i ADT:n. Exempelvis kan ADT:n Stack implementeras med hjälp av en lista, array eller noder. 10

Listimplementation av ADT:n Stack En Javalistklass (DefaultListModel) används för att spara elementen i stacken. DefaultListModel kan användas tillsammans med JList för att visa elementen i ett GUI. Toppen på stacken har valts till index=0. Tips: Denna implementation kan till vissa delar användas till lab 4. 11

Arrayimplementation av ADT:n Stack Storleken på arrayen har valts till 20. Stacken har alltså en övre gräns. Förvillkoret till operationen push blir då att stacken inte är full. Detta måste kontrolleras i PushButtonklassen. lassen ärver AbstractListModel och implementerar gränssnittet ListModel för att den ska kunna användas tillsammans med JList. Botten till stacken har valts till index 0 för att slippa omflyttningar av element. 0 12

Nodimplementation av ADT:n Stack Elementen i stacken lagras som länkade noder. Insättning och borttagning görs i början av kedjan av effektivitetsskäl. Den blir då toppen av stacken. Vi får skapa en Node-klass för noderna där man kan spara ett stackelement och en pil till nästa nod (länk). lassen ärver AbstractListModel och implementerar gränssnittet ListModel av samma skäl som i arrayimplementationen. 13

Stackapplikationer Reverse: Vända på strängar. Exempel: Vänd på alle med hjälp av en stack. alle alle lle le e a a l l a l e l a l e el ell ella ella e l a l l a l a l a 14

Stackapplikationer IsPalindrom: ollar om en sträng är likadan oavsett om man läser den fram- eller baklänges. Exempel: anna, nitalarbralatin, olasalo olasalo lasalo asalo Salo o l o l a o alo lo o =? a l o =? l o =? o 15

Stackapplikationer IsBalanced: ollar om ett programs parenteser är balanserade. Parenteserna är (, ), [, ], {, }. Exempel: ([]{}), public class Test { public Test(){}} Lösningsförslag: - gå igenom strängen (programmet) från vänster till höger, - om tecknet är en vänsterparentes, lägg parentesen på stacken, - om tecknet är en högerparentes poppa stacken och jämför parenteserna, - andra tecken ignoreras, - om alla parentesjämförelser gått igenom och stacken är tom i slutet är programmet balanserat 16