+ All Categories
Home > Documents > FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO...

FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO...

Date post: 21-Feb-2021
Category:
Upload: others
View: 3 times
Download: 0 times
Share this document with a friend
25
FIFO Queues CSE 2320 Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1
Transcript
Page 1: FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO Queues •Stacks are last-in first-out queues.•Another widely used model is first-in

FIFO Queues

CSE 2320 – Algorithms and Data Structures

Vassilis Athitsos

University of Texas at Arlington

1

Page 2: FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO Queues •Stacks are last-in first-out queues.•Another widely used model is first-in

FIFO Queues

• Stacks are last-in first-out queues.

• Another widely used model is first-in first-out (FIFO) queues.

• Examples of uses of FIFO queues:

2

Page 3: FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO Queues •Stacks are last-in first-out queues.•Another widely used model is first-in

FIFO Queues

• Stacks are last-in first-out queues.

• Another widely used model is first-in first-out (FIFO) queues.

• Examples of uses of FIFO queues:

• Program execution:

– Requests for access to memory, disk, network...

• Resource allocation:

– Forwarding network traffic in network switches and routers.

• Search algorithms.

– More details later in the course

3

Page 4: FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO Queues •Stacks are last-in first-out queues.•Another widely used model is first-in

Put and Get

• The FIFO queue supports insert and delete as follows:

– insert, push, put: This is what we call the insert operation when we talk about FIFO queues. It puts an item "at the end of the line".

– delete, pop, get: This is what we call the delete operation when we talk about FIFO queues. It removes the item that is "at the head of the line".

• How can we implement FIFO queues?

4

Page 5: FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO Queues •Stacks are last-in first-out queues.•Another widely used model is first-in

FIFO Queues Using Lists

• A FIFO queue is essentially a list.

• put(queue, item) inserts that item at the END of the list.

• get(queue) removes (and returns) the item at the beginning of the list.

• What is the running time of these operations?

5

Page 6: FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO Queues •Stacks are last-in first-out queues.•Another widely used model is first-in

FIFO Queues Using Lists

• A FIFO queue is essentially a list.

• put(queue, item) inserts that item at the END of the list.

• get(queue) removes (and returns) the item at the beginning of the list.

• Both operations take O(1) time.

– Assumption: the list data type contains a pointer to the last element.

– Our new implementation at lists.c satisfies that assumption.

6

Page 7: FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO Queues •Stacks are last-in first-out queues.•Another widely used model is first-in

Queue Versus Stack Implementation

• Implementation-wise, compare:

– list-based queue implementation.

– list-based stack implementation.

• What are the key differences?

7

Page 8: FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO Queues •Stacks are last-in first-out queues.•Another widely used model is first-in

Queue Versus Stack Implementation

• Implementation-wise, compare:

– list-based queue implementation.

– list-based stack implementation.

• The only difference is in insertions.

– Queues insert at the end of the list.

– Stacks insert at the beginning of the list.

• It is very easy to implement queues starting from our list-based stack implementation.

– Rename push to put.

– Rename pop to get.

– Change the get function to insert at the end.

8

Page 9: FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO Queues •Stacks are last-in first-out queues.•Another widely used model is first-in

FIFO Queues Using Arrays

How do we implement queues using arrays?

The stack definition looked like this:

typedef struct stack_struct * Stack;

struct stack_struct

{

int max_size;

int top_index;

void ** items;

};

What changes do we need to accommodate queues?

9

Page 10: FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO Queues •Stacks are last-in first-out queues.•Another widely used model is first-in

FIFO Queues Using Arrays

How do we implement queues using arrays?

A queue can be defined like this:

typedef struct queue_struct * queue;

struct queue_struct

{

int max_size;

int start_index;

int end_index;

void ** items;

};

end_index tells us where to put a new item.

start_index tells us where to remove an item from. 10

Page 11: FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO Queues •Stacks are last-in first-out queues.•Another widely used model is first-in

Examples of Put and Get

• put(15)

• put(20)

• get()

• put(30)

• put(7)

• put(25)

• get()

• put(12)

• get()

• get() 11

-

-

-

-

queue position

0

1

2

3

start_index

end_index

Page 12: FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO Queues •Stacks are last-in first-out queues.•Another widely used model is first-in

Examples of Put and Get

• put(15)

• put(20)

• get()

• put(30)

• put(7)

• put(25)

• get()

• put(12)

• get()

• get() 12

15

-

-

-

queue position

0

1

2

3

start_index

end_index

Page 13: FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO Queues •Stacks are last-in first-out queues.•Another widely used model is first-in

Examples of Put and Get

• put(15)

• put(20)

• get()

• put(30)

• put(7)

• put(25)

• get()

• put(12)

• get()

• get() 13

15

20

-

-

queue position

0

1

2

3

start_index

end_index

Page 14: FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO Queues •Stacks are last-in first-out queues.•Another widely used model is first-in

Examples of Put and Get

• put(15)

• put(20)

• get(): returns 15

• put(30)

• put(7)

• put(25)

• get()

• put(12)

• get()

• get() 14

-

20

-

-

queue position

0

1

2

3

start_index

end_index

Page 15: FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO Queues •Stacks are last-in first-out queues.•Another widely used model is first-in

Examples of Put and Get

• put(15)

• put(20)

• get()

• put(30)

• put(7)

• put(25)

• get()

• put(12)

• get()

• get() 15

-

20

30

-

queue position

0

1

2

3

start_index

end_index

Page 16: FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO Queues •Stacks are last-in first-out queues.•Another widely used model is first-in

Examples of Put and Get

• put(15)

• put(20)

• get()

• put(30)

• put(7)

• put(25)

• get()

• put(12)

• get()

• get() 16

-

20

30

7

queue position

0

1

2

3

start_index

end_index

Page 17: FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO Queues •Stacks are last-in first-out queues.•Another widely used model is first-in

Examples of Put and Get

• put(15)

• put(20)

• get()

• put(30)

• put(7)

• put(25)

• get()

• put(12)

• get()

• get() 17

25

20

30

7

queue position

0

1

2

3

start_index

end_index

Page 18: FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO Queues •Stacks are last-in first-out queues.•Another widely used model is first-in

Examples of Put and Get

• put(15)

• put(20)

• get()

• put(30)

• put(7)

• put(25)

• get(): returns 20

• put(12)

• get()

• get() 18

25

-

30

7

queue position

0

1

2

3

start_index

end_index

Page 19: FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO Queues •Stacks are last-in first-out queues.•Another widely used model is first-in

Examples of Put and Get

• put(15)

• put(20)

• get()

• put(30)

• put(7)

• put(25)

• get()

• put(12)

• get()

• get() 19

25

12

30

7

queue position

0

1

2

3

start_index

end_index

Page 20: FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO Queues •Stacks are last-in first-out queues.•Another widely used model is first-in

Examples of Put and Get

• put(15)

• put(20)

• get()

• put(30)

• put(7)

• put(25)

• get()

• put(12)

• get(): returns 30

• get() 20

25

12

-

7

queue position

0

1

2

3 start_index

end_index

Page 21: FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO Queues •Stacks are last-in first-out queues.•Another widely used model is first-in

Examples of Put and Get

• put(15)

• put(20)

• get()

• put(30)

• put(7)

• put(25)

• get()

• put(12)

• get()

• get(): returns 7 21

25

12

-

-

queue position

0

1

2

3

start_index

end_index

Page 22: FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO Queues •Stacks are last-in first-out queues.•Another widely used model is first-in

Book Implementation (Array-Based)

static Item *q;

static int N, head, tail;

void QUEUEinit(int maxN)

{ q = malloc((maxN+1)*sizeof(Item));

N = maxN+1; head = N; tail = 0; }

int QUEUEempty()

{ return head % N == tail; }

void QUEUEput(Item item)

{ q[tail++] = item; tail = tail % N; }

Item QUEUEget()

{ head = head % N; return q[head++]; }

22

Page 23: FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO Queues •Stacks are last-in first-out queues.•Another widely used model is first-in

Limitations of This Implementation

• ???

23

Page 24: FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO Queues •Stacks are last-in first-out queues.•Another widely used model is first-in

Limitations of This Implementation

• Same as for stacks.

• Only one queue object can be used in the entire code.

• Queues can only store objects of a single data type:

– Specified in Item.h, where type Item is defined using a typedef.

• It is easy to adapt the stacks_arrays.c code to obtain an array-based implementation of queues that does not have these two limitations.

• Possible homework...

24

Page 25: FIFO Queues - University of Texas at Arlingtonvlm1.uta.edu/.../lectures/07_fifo_queues.pdfFIFO Queues •Stacks are last-in first-out queues.•Another widely used model is first-in

More on Queues … Later

• Done with queues for now.

• We will see queues and queue-related topics quite a bit more in this course.

25


Recommended