För utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar.

Slides:



Advertisements
Liknande presentationer
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 4.
Advertisements

Algoritmer och data strukturer -Länkade listor
Föreläsning 3 Lista Array/länkad lista Lista implementerad som länkad lista Inlämningsuppgifter.
För utveckling av verksamhet, produkter och livskvalitet. Rekursiva algoritmer, en annan sort tänkande -Hur -När -Bra/Dåligt (kap 7)
OOP Objekt-orienterad programmering
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 4.
Datastrukturer och algoritmer Föreläsning 11. Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel , , 14.4.
Binära Sökträd, kapitel 19
Föreläsning 2 Datastrukturer Abstrakta datastrukturer Stack
Föreläsning 6 Länkade lista Komplexitet Linjärsökning & binärsökning
C-programmering ID120V William Sandqvist Länkad lista
Arv.
Programmeringsteknik för K och Media
Föreläsning 10 Länkade lista Stack och Kö Att arbeta med listor
Hashing / Hash tabeller -- Kapitel 20. Hash? Varför en annan datastruktur? Konstant tid för både insert- och find- operationer.
i olika programmeringsspråk
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv får vänta)  Iden med klasser.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 3.
Föreläsning 4, Kapitel 4 Gruppera objekt Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling.
Föreläsning 11 Arrayer.
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Programmering i C# 3. Klasser.
PROCESSPROGRAMMERING
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Datasamlingar och generiska enheter
4. Arv och dynamisk bindning
Föreläsning 8, kapitel 8 Förbättra strukturen med arv Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael.
Vektorer (klassen Vector) Sortering
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Programmeringsteknik för Media1 & K1
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Generiska algoritmer Kan användas på containertyper och arrays Använder iteratorer Implementerar.
OOP F6:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 6 Mer om klasser och objekt Hantera många objekt ArrayList toString() – metoden.
Riktade listor i C och Java Lösning till gruppövning 1.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning 9 Gränssnitt. Super Super kan användas till anrop av en omdefinierad metod Super kan användas till anrop av konstruktorer i superklassen Super.
Reflektioner kring OU1 Generellt sett bra kvalitet på dokumentationen! Första intryck... –Skulle du lämna in en jobbansökan med ett häftstift/gem eller.
William Sandqvist C-programmering ID120V Stack och Kö William Sandqvist
Datastrukturer och algoritmer
1 ITK:P2 F6 Sortering av generiska containerklasser DSV Peter Mozelius.
Stack och Kö -Implementering -Tilllämpningar -- Kapitel 16, 11.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastructurer - Sökträd, naiva och balancerade lösningar -HashTable -- Kapitel.
Graph och graph-algoritmer. Några enkla graph teorier Hur IP trafik hittar destinationen i Internät ? GPS-system ? Sociala nätverk. Vanligaste frågeställningar:
Föreläsning 3, Kapitel 3 Objektinteraktion - Skapa objekt som samarbetar Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David.
Träd -Allmänt om träd -Binärt träd -Filkomprimering med Huffman träd
Köer -- Kapitel 16. Principen med en kö Köer är FIFO datastrukturer  First In – First Out  enqueue() Lägg till data i kön (först)  dequeue() Hämta.
7. Delegerare och notifierare
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastrukturer - En annan sort tänkande, rekursiva metoder -Datastrukturen träd,
ITM1 Kapitel 8 Datastrukturer Grundläggande datavetenskap, 4p Utgående från boken Computer Science av: J. Glenn Brookshear.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 9 Grafalgoritmer.
TILLÄMPAD DATALOGI (TILDA) Övningsgrupp 2 Marcus Hjelm
TILLÄMPAD DATALOGI (TILDA) Övning 1 Marcus Hjelm
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
Övning 3. Repetition Metoder class RepetitionMetoder { public static void main(String [] args) double längd = 2.0; double bredd = 1.0; double area =
TILLÄMPAD DATALOGI (TILDA) Övning 2
TILLÄMPAD DATALOGI (TILDA) Övning 2
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och Datastrukturer -- Kap 21,14 Prioritets Köer (Priority Queues ), Graph.
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
Anders Sjögren Data (i primärminnet) som en länkad lista datatypen för varje element i listan är en struktur, post ( struct )
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 4.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 3: Abstrakta datatyper Algebror Abstrakta datatyper Inkapsling och informationsmaskering.
Iteratorer och generiska algoritmer sid. 1 6/28/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Iterator vector ::iterator b = ivec.begin() vector ivec vector.
Objektbaserad programmering sid. 1 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastrukturer Sökning, Symbol tabeller Binära sökträd.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastructurer - En annan sort tänkande, rekursiva metoder -Datastrukturen träd.
TDP004 Objektorienterad Programmering Fö 5 Minneshantering.
Länkade listor á la C/C++
Föreläsning 3: Booleans, if, switch
Föreläsning 8: Exempel och problemlösning
Presentationens avskrift:

För utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar

För utveckling av verksamhet, produkter och livskvalitet. ADS : STACK Det finns ett par vanligt förekommande ADT:er för samlingar av element som egentligen är specialfall av listor. En av dem är Stack Definition: En stack är en följd av element där borttagnig av ett element alltid avser det element som senast satts in. Kallas även LIFO-lista, Last In First Out

För utveckling av verksamhet, produkter och livskvalitet. ADT: STACK En stack beskrivs oftast lodrätt orienterad. Operationer sker på toppen av stacken. Här läggs nytt element in ( top ) och vid borttagning avses alltid översta elementet (top). TopOfStack

För utveckling av verksamhet, produkter och livskvalitet. Oftast förekommande metoder i Stack public interface Stack { /** Lägg x ”överst” på stacken */ void push(Object x); /** Tag bort översta elementet från stacken */ void pop(); /** Tag reda på översta elementet på stacken */ Object top(); /** Tag reda på och tag bort översta elementet på stacken */ Object topAndPop(); /** Undersök om stacken är tom */ boolean isEmpty(); /** Töm stacken */ void makeEmpty(); }

För utveckling av verksamhet, produkter och livskvalitet. Principen med en stack Stack push( ’S’ ) push( ’U’ ) push( ’K’ ) push( ’G’ ) push( ’R’ ) pop( ) push( ’Ä’ ) pop( ) S U K K G R Ä

För utveckling av verksamhet, produkter och livskvalitet. Användningsområden Datorteknik Metod anrop, Kompilatorer Beräkningsmaskin Omvänd polsk (postfix) notation (1950-talet) Kräver ”ett annat sorts tänkande...” Kraftfull!

För utveckling av verksamhet, produkter och livskvalitet. Implementeringar Statisk implementation Arraybaserad Dynamiska implementation Länkade listor

För utveckling av verksamhet, produkter och livskvalitet. Med array... ToS – Top of Stack Indexerar senast inlagda data Statisk maxstorlek Dubblering möjlig men kostsam Fördel : Snabb

För utveckling av verksamhet, produkter och livskvalitet. Exempel public class Stack <AnyType> { private... public Stack() { } public void push(AnyType data) { } public void pop() { } }

För utveckling av verksamhet, produkter och livskvalitet. Tillstånd / Konstruktorn private AnyType [] array; private int ToS; public Stack() { array = (AnyType)new Object[50]; ToS = -1; }

För utveckling av verksamhet, produkter och livskvalitet. Metoden -- ’void push(AnyType data)’ public void push(AnyType data) { if((ToS + 1) < array.length) { ToS++; array[ToS] = data; } } Tidskomplexiteten ??

För utveckling av verksamhet, produkter och livskvalitet. Metoden -- AnyType pop()’ public AnyType pop() { AnyType value = null; if(ToS >= 0) { value = array[ToS]; ToS--; } return value; } Tidskomplexiteten ??

För utveckling av verksamhet, produkter och livskvalitet. Med en länkad lista... Arbetar bara mot länken närmast huvudet Lägger in först i listan Tar ut först ur listan Nackdel : Långsam Kräver repeterade minnesallokering

För utveckling av verksamhet, produkter och livskvalitet. Exempel public class Stack { private... public Stack() { } public void push(Object x) { } public Object pop() { }

För utveckling av verksamhet, produkter och livskvalitet. Tillstånd / Konstruktorn private ListNode topofstack; public Stack() { topofstack = null; }

För utveckling av verksamhet, produkter och livskvalitet. Metoden -- ’void push(Object data)’ public void push(Object x) { topofstack=new ListNode(x,topofstack); }

För utveckling av verksamhet, produkter och livskvalitet. Metoden -- ’Object pop()’ public Object pop() { ListNode temp=topofstack; topofstack=topofstack.next return temp.element; }

För utveckling av verksamhet, produkter och livskvalitet. Implementationsjämförelse Statisk implementation, med array (Kan ha) mycket outnyttjat minne Snabb Dynamisk implementation, med länkad lista Minimalt outnyttjat minne Långsam

För utveckling av verksamhet, produkter och livskvalitet. Tillämpning-kompilator och miniräknare – Beräkning -aritmetiska uttryck i infix notation : * aritmetiska uttryck i postfix notation: * Kompilatorer, kontrollerar om koden är rätt parentiserad: rätt: { ( ) } fel: { (} )

För utveckling av verksamhet, produkter och livskvalitet. ADT: Kö - Kallas även FIFO-lista, First In First Out En annan modell, som också är specialfall av lista: Definition: En kö är en följd av element där - insättning alltid sker i slutet av följden -borttagning alltid avser följdens första element

För utveckling av verksamhet, produkter och livskvalitet. Användningsområden Printer köer, Simuleringar, av allt …flyg, passersystem… Kommunikation mellan olika processer… Data buffring Datakommunikation / Internet

För utveckling av verksamhet, produkter och livskvalitet. Specifikation av ADT -Queue public interface Queue { /** Sätt in x sist i kön */ void enqueue(Object x); /** Tag reda på första elementet i kön */ Object getFront(); /** Tag reda på och tag bort första elementet i kön */ Object dequeue(); /** Undersök om kön är tom */ boolean isEmpty(); /** Töm kön */ void makeEmpty(); }

För utveckling av verksamhet, produkter och livskvalitet. Principen med en kö enqueue( ’A’ ) enqueue( ’B’ ) enqueue( ’C’ ) enqueue( ’D’ ) dequeue( ) enqueue( ’E’ ) Kö ABCDE

För utveckling av verksamhet, produkter och livskvalitet. Implementeringar Statisk implementation Arraybaserad Dynamiska implementation Länkade listor

För utveckling av verksamhet, produkter och livskvalitet. Med en array... ” Wraparound” Slipper flytta data Kräver start och slut index Snabbt Statisk maxstorlek Dubblering möjlig men kostsam

För utveckling av verksamhet, produkter och livskvalitet. Exempel public class Queue { private... public Queue() { } public void enqueue(Object data) { } public Object dequeue() { } }

För utveckling av verksamhet, produkter och livskvalitet. Tillstånd / Konstruktorn private Object [] array; private int back, front; private int size; public Queue() { array = new Object[50]; back = -1; front = 0; size =0; }

För utveckling av verksamhet, produkter och livskvalitet. Metoden -- ’void enqueue(Object data)’ public void enqueue(Object data) { if(size < array.length) { back = (back + 1) array[back] = data; size++; } } Tidskomplexiteten ??

För utveckling av verksamhet, produkter och livskvalitet. Metoden -- ’void enqueue(Object data)’ public void enqueue(Object data) { if(size == array.length) doubleQueue(); back = increment(back); array[back] = data; size++; } med Wraparound Tidskomplexiteten ??

För utveckling av verksamhet, produkter och livskvalitet. Metoden -- ’int increment(int x)’ private int increment(int x) { if(++x == array.length) x=0; return x; } med Wraparound

För utveckling av verksamhet, produkter och livskvalitet. Exempel public class Queue { private... public Queue() { } public void enqueue(Object data) { } public Object dequeue() { } }

För utveckling av verksamhet, produkter och livskvalitet. Metoden -- ’Object dequeue()’ public Object dequeue() { Object value = null; if(size > 0) { value = array[front]; front = front + 1; size--; } return value; }

För utveckling av verksamhet, produkter och livskvalitet. Metoden -- ’Object dequeue()’ public Object dequeue() { Object value = null; if(size > 0) { value = array[front]; front = increment(front); size--; } return value; } Med wraparound

För utveckling av verksamhet, produkter och livskvalitet. Med en länkad lista... Arbetar bara mot ändarna på listan Lägger in först i listan Tar ut sist ur listan Långsam Minnesallokering Behöver ingen ”wrapping” Enklare implementation

För utveckling av verksamhet, produkter och livskvalitet. Tillstånd/ Konstruktor private ListNode front; private ListNode back; public Queue() { front=back=null; }

För utveckling av verksamhet, produkter och livskvalitet. Metoden -- ’void enqueue(Object data)’ public void enqueue(Object data) { if (isEmpty()) back=front=new ListNode(data); else back=back.next=new ListNode(data); }

För utveckling av verksamhet, produkter och livskvalitet. Metoden -- ’Object dequeue()’ public Object dequeue() { if(isEmpty()) throw new UnderflowException(”Tom kö”); Object value=front.element; front=front.next; return value; }

För utveckling av verksamhet, produkter och livskvalitet. Implementationsjämförelse Statisk implementation (Kan ha) mycket outnyttjat minne Snabb Dynamisk implementation Minimalt outnyttjat minne Långsam Konstant tid