Presentation laddar. Vänta.

Presentation laddar. Vänta.

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.

Liknande presentationer


En presentation över ämnet: "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."— Presentationens avskrift:

1 Köer -- Kapitel 16

2 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 data från kön (sist)

3 Principen med en kö enqueue( ’A’ ) enqueue( ’B’ ) enqueue( ’C’ ) enqueue( ’D’ ) dequeue( ) enqueue( ’E’ ) Kö ABCDE

4 Användningsområden Printer köer Asynkrona gränssnitt  Kommunikation mellan olika processer på samma operativ system Data buffring

5 Implementeringar 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

7 Exempel public class Queue { private... public Queue() { } public void enqueue(Object data) { } public Object dequeue() { } }

8 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; }

9 Metoden -- ’void enqueue(Object data)’ public void enqueue(Object data) { if(size < array.length) { back = (back + 1) array[back] = data; size++; } }

10 public void enqueue(Object data) { if(size == array.length) doubleQueue(); back = increment(back); array[back] = data; size++; } med Wraparound

11 Metoden -- ’int increment(int x)’ private int increment(int x) { if(++x == array.length) x=0; return x; } med Wraparound

12 Metoden -- ’Object dequeue()’ public Object dequeue() { Object value = null; if(size > 0) { value = array[front]; front = front + 1; size--; } return value; }

13 public Object dequeue() { Object value = null; if(size > 0) { value = array[front]; front = increment(front); size--; } return value; } Med wraparound

14 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

15 Exempel public class Queue { private... public Queue() { } public void enqueue(Object data) { } public Object dequeue() { } }

16 Tillstånd / Konstruktorn private LinkedList list; public Queue() { list = new LinkedList(); }

17 Metoden -- ’void enqueue(Object data)’ public void enqueue(Object data) { list.addFirst(data); }

18 Metoden -- ’Object dequeue()’ public Object dequeue() { return list.getLast(); }

19 Bättre lösning,som länkad lista private ListNode front; private ListNode back; public Queue() { front=back=null; }

20 Metoden -- ’void enqueue(Object data)’ public void enqueue(Object data) { if (isEmpty()) back=front=new ListNode(data); else back=back.next=new ListNode(data); }

21 Metoden -- ’Object dequeue()’ public Object dequeue() { if(isEmpty()) throw new UnderflowException(”Tom kö”); Object value=front.element; front=front.next; return value; }

22 Implementationsjämförelse Statisk implementation  (Kan ha) mycket outnyttjat minne  Snabb Dynamisk implementation  Minimalt outnyttjat minne  Långsam Konstant tid


Ladda ner ppt "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."

Liknande presentationer


Google-annonser