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

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

Datastrukturer. föreläsning 3. Stacks 1

Tentamen i Algoritmer & Datastrukturer i Java

Länkade strukturer. (del 2)

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

Föreläsning 3. Stack

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

Föreläsning 3. Stack

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

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

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning Datastrukturer (DAT036)

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning 4 Innehåll

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

Datastrukturer och algoritmer

Lösningsförslag till exempeltenta 2

Datastrukturer och algoritmer

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

Föreläsning 2 Datastrukturer (DAT037)

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

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

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 i Algoritmer & Datastrukturer i Java

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

Föreläsning Datastrukturer (DAT036)

Tentamen i Algoritmer & Datastrukturer i Java

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

Föreläsning 3 Datastrukturer (DAT037)

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

Föreläsning 4 Datastrukturer (DAT037)

Stackar, köer, iteratorer och paket

Föreläsning 3 Datastrukturer (DAT037)

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning 8: Exempel och problemlösning

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002

Tentamen Datastrukturer (DAT036)

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

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

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning Datastrukturer (DAT036)

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

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

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

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

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

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

Ordnad lista. Listor... Ordnad lista... Ordnad lista typer

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

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

Länkade listor, stackar och köer

Abstrakta datastrukturer

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

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

Föreläsning 12. Länkade listor

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Python. Vi har ofta behov av att behandla datastrukturer på ett enhetligt sätt så att vi kan göra samma sak i flera olika program.

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

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

Föreläsning 13 Innehåll

Kurskod D0010E Datum Skrivtid 5tim

Länkade strukturer, parametriserade typer och undantag

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

Programmering i C++ EDA623 Dynamiska datastrukturer. EDA623 (Föreläsning 11) HT / 31

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

Seminarium 13 Innehåll

Dugga Datastrukturer (DAT036)

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

Kap J 7-1 Mer om arv. (superklass) (subklass)

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

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 13. Träd

Tentamen Datastrukturer (DAT036)

Programmering i C++ EDAF30 Dynamiska datastrukturer. EDAF30 (Föreläsning 11) HT / 34

Tentamen Datastrukturer, DAT037 (DAT036)

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

OOP Objekt-orienterad programmering

Föreläsning 9 Datastrukturer (DAT037)

Föreläsning 1 Datastrukturer (DAT037)

Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till:

Föreläsning 14 Innehåll

DAT043 - föreläsning 8

13 Prioritetsköer, heapar

Algoritmer och datastrukturer

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

Tentamen LÖSNINGSFÖRSLAG. c) Tilldelningen C x = new D() ger kompileringsfel eftersom klassen D är abstrakt.

Del A (obligatorisk för alla)

Rekursion. Att tänka rekursivt Att programmera rekursivt i Java Exempel. Programmeringsmetodik -Java 254

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

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

Tentamen Datastrukturer (DAT036)

Objektorienterad programmering i Java

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

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

Arrayer (vektorer) Murach s: kap Elektronikcentrum i Svängsta AB

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Samlingar Collection classes

Konstruktion av klasser med klasser

Abstrakta datatyper Laboration 2 GruDat, DD1344

Transkript:

Stack och Kö -Implementering - Tilllämpningar 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 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 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(); 1

Principen med en stack Användningsområden push( S ) push( U ) push( K ) push( K ) push( G ) pop( ) pop( ) push( R ) push( Ä ) pop( ) S U K K G R Ä Datorteknik Metod anrop, Kompilatorer Beräkningsmaskin Omvänd polsk (postfix) notation (1950-talet) Kräver ett annat sorts tänkande... Kraftfull! Stack Implementeringar Med array... Statisk implementation Arraybaserad Dynamiska implementation Länkade listor ToS Top of Stack Indexerar senast inlagda data Statisk maxstorlek Dubblering möjlig men kostsam Fördel : Snabb 2

Exempel public class Stack <AnyType> private... public Stack() public void push(anytype data) Tillstånd / Konstruktorn private AnyType [] array; private int ToS; public Stack() array = (AnyType)new Object[50]; ToS = -1; public void pop() För utveckling av verksamhet, produkter och livskvalitet. Metoden -- void push(anytype data) Metoden -- AnyType pop() public void push(anytype data) if((tos + 1) < array.length) ToS++; array[tos] = data; Tidskomplexiteten?? public AnyType pop() AnyType value = null; if(tos >= 0) value = array[tos]; ToS--; return value; Tidskomplexiteten?? 3

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 Exempel public class Stack private... public Stack() public void push(object x) public Object pop() Tillstånd / Konstruktorn Metoden -- void push(object data) private ListNode topofstack; public Stack() topofstack = null; public void push(object x) topofstack=new ListNode(x,topofstack); 4

Metoden -- Object pop() Implementationsjämförelse public Object pop() ListNode temp=topofstack; topofstack=topofstack.next return temp.element; Statisk implementation, med array (Kan ha) mycket outnyttjat minne Snabb Dynamisk implementation, med länkad lista Minimalt outnyttjat minne Långsam Tillämpning-kompilator och miniräknare Beräkning -aritmetiska uttryck i infix notation : 1 + 2 * 3-4 - aritmetiska uttryck i postfix notation: 1 2 3 * + 4 - Kompilatorer, kontrollerar om koden är rätt parentiserad: rätt: ( ) fel: ( ) 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 5

Användningsområden Specifikation av ADT -Queue Printer köer, Simuleringar, av allt flyg, passersystem Kommunikation mellan olika processer Data buffring Datakommunikation / Internet 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(); Principen med en kö Implementeringar enqueue( A ) enqueue( B ) enqueue( C ) enqueue( D ) dequeue( ) dequeue( ) enqueue( E ) dequeue( ) ABCDE Kö Statisk implementation Arraybaserad Dynamiska implementation Länkade listor 6

Med en array... Wraparound Slipper flytta data Kräver start och slut index Snabbt Statisk maxstorlek Dubblering möjlig men kostsam 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 Metoden -- void enqueue(object data) Tidskomplexiteten?? private Object [] array; private int back, front; private int size; public Queue() array = new Object[50]; back = -1; front = 0; size =0; public void enqueue(object data) if(size < array.length) back = (back + 1) array[back] = data; size++; 7

Metoden -- void enqueue(object data) Metoden -- int increment(int x) med Wraparound public void enqueue(object data) if(size == array.length) doublequeue(); back = increment(back); array[back] = data; size++; Tidskomplexiteten?? private int increment(int x) if(++x == array.length) x=0; return x; med Wraparound Exempel Metoden -- Object dequeue() public class Queue private... public Queue() public void enqueue(object data) public Object dequeue() Object value = null; if(size > 0) value = array[front]; front = front + 1; size--; public Object dequeue() return value; För utveckling av verksamhet, produkter och livskvalitet. 8

Metoden -- Object dequeue() public Object dequeue() Object value = null; if(size > 0) value = array[front]; front = increment(front); size--; return value; Med wraparound 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 Tillstånd/ Konstruktor Metoden -- void enqueue(object data) private ListNode front; private ListNode back; public Queue() front=back=null; public void enqueue(object data) if (isempty()) back=front=new ListNode(data); else back=back.next=new ListNode(data); 9

Metoden -- Object dequeue() Implementationsjämförelse public Object dequeue() if(isempty()) throw new UnderflowException( Tom kö ); Object value=front.element; front=front.next; return value; Statisk implementation (Kan ha) mycket outnyttjat minne Snabb Dynamisk implementation Minimalt outnyttjat minne Långsam Konstant tid 10