Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

INF 295 Algoritmer og datastrukturer Forelesning 7 ADT Lister, Stakker og Køer Hans Fr. Nordhaug (Ola Bø)

Liknende presentasjoner


Presentasjon om: "INF 295 Algoritmer og datastrukturer Forelesning 7 ADT Lister, Stakker og Køer Hans Fr. Nordhaug (Ola Bø)"— Utskrift av presentasjonen:

1 INF 295 Algoritmer og datastrukturer Forelesning 7 ADT Lister, Stakker og Køer Hans Fr. Nordhaug (Ola Bø)

2 Abstrakte datatyper En abstrakt datatype er en samling objekter sammen med et samling operasjoner som kan gjøres med objektene. En abstrakt datatype er en matematisk abstraksjon Det er ikke gitt hvordan operasjonene skal implementeres Eksempler på ADT Lister, Mengder, Stakker og tilhørende operasjoner

3 Liste ADT Kan implementeres på flere måter Array Lenket liste Egenskapene blir forskjellig Array er best på hent(int posisjon) Sortert Arrray best på finn(Object o) Lenket liste er best på slett og sett inn Dobbeltlenket liste er fordelaktig

4 Ferdige listeklasser i Java ADT heter List Rik datatype – 25 ulike operasjoner Implementeringene er ArrayList LinkedList Gjennomgang av lister en vanlig operasjon. Kan være upraktisk å bruke index Administrering Lenkede lister – lang søketid for hvert element Løsningen er et hjelpeobjekt - iteratoren

5 Iterator

6 ListIterator

7 Multiliste

8 Stack ADT En stakk er en liste der innsetting og sletting bare kan skje i enden av lista Enden av lista heter topp Det siste elementet kan inspiseres med top() eller peek() Innsetting kalles push() Sletting kalles pop() Å poppe en tom stakk er en feil Å overfylle en stakk er en impl. begrensning En stakk er en last in, first out (LIFO) datastruktur

9

10 Implementering av stack Stack kan implementeres som Lenket liste Ytelse: alle operasjoner er O(1) Problem: Kostnaden ved new Array Ytelse: alle operasjoner er O(1) Problem: Blir lettere overflyt

11 Anvendelser av stakk I Symbolbalansering Kode-editorer kan for eksempel vise hvilken parentes som hører sammen med parentesen cursor står ved. Dette kan lages ved å legge venstre- parenteser på stakken når de påtreffes, og så poppe hver gang man treffer en høyreparentes. Hvis stakken ble tom er man ved tilsvarende høyreparentes. Andre løsninger? Hva om man vil finne tilsvarende høyreparentes til en venstreparentes? Hva om man vil sjekke at parentesene balanserer?

12 Anvendelser av stakk II Tolking av algebraiske uttrykk 2*(3+4)-5 Overføring fra infix til postfix (postfix: * 5 -) Scanne input, Operander direkte til output, Venstreparanteser rett til stack, Operatorer til stack etter at høyere (og samme) prioritets operatorer er blitt poppet til output. Høyreparenteser popper helt til venstreparentes. Når input er slutt poppes resten til output. Beregning av postfix-uttrykk Postfix eller RPN Scanne input, Tall sendes til stakk, Operatorer tar fra stakk og legger resultat på stakk

13 Anvendelser av stakk III Metodekall Stack Frame /Activation Record Stack overflow Tail recursion Hver gang en metode kalles plasseres stedet den kalles fra på stakken slik at man kan fortsette der man slapp når metoden returnerer.

14 Kø ADT En kø er en liste hvor innsetting gjøres i en ende og sletting gjøres i den andre enden En kø er en FIFO Grunnleggende operasjoner enqueue –still i kø dequeue – ta ut første i køen enqueue(Object o) Object dequeue()

15 Implementering av kø Listeimplementering Peker til slutten av lista gjør enqueue O(1) Arrayimplementering Naiv implementering der koen[0] er først i køen gir O(n) dequeue Kan gjøres rask ved bruk av kursorer – pekere som viser hvor starten og slutten av køen er. front, back, currentSize circular array

16 Anvendelser av kø Skriverkø * Filaksesskø Telefonkø Hendelseskø Prosesskø *

17 Linked list i java

18 Arraylist i java

19 Konklusjon Lister, Stakker og Køer er grunnleggende datastrukturer De brukes i mange sammenhenger Stakk er avgjørende for at rekursjon er mulig


Laste ned ppt "INF 295 Algoritmer og datastrukturer Forelesning 7 ADT Lister, Stakker og Køer Hans Fr. Nordhaug (Ola Bø)"

Liknende presentasjoner


Annonser fra Google