Download presentation
Presentation is loading. Please wait.
Published bySusanti Sutedja Modified over 5 years ago
1
Data Structures and Algorithms for Information Processing
Lecture: Stacks & Queues Lecture: Stacks and Queues
2
Lecture: Stacks and Queues
What is a Stack? A stack is a data structure of ordered items such that items can be inserted and removed only at one end. Examples of Stacks: Pez Dispenser Cafeteria Trays Lecture: Stacks and Queues
3
Lecture: Stacks and Queues
What can we do with a stack? push - place an item on the stack peek - Look at the item on top of the stack, but do not remove it pop - Look at the item on top of the stack and remove it Lecture: Stacks and Queues
4
Lecture: Stacks and Queues
A stack is a LIFO (Last-In/First-Out) data structure A stack is sometimes also called a pushdown store. What are some applications of stacks? Program execution Converting infix to postfix Evaluating postfix expressions Lecture: Stacks and Queues
5
Lecture: Stacks and Queues
Problem: What happens if we try to pop an item off the stack when the stack is empty? This is called a stack underflow. The pop method needs some way of telling us that this has happened. In java we use the java.util.EmptyStackException Lecture: Stacks and Queues
6
Lecture: Stacks and Queues
Implementing a Stack There are two ways we can implement a stack: Using an array Using a linked list Lecture: Stacks and Queues
7
Lecture: Stacks and Queues
Implementing a Stack Implementing a stack using an array is fairly easy. The bottom of the stack is at data[0] The top of the stack is at data[numItems-1] push onto the stack at data[numItems] pop off of the stack at data[numItems-1] Lecture: Stacks and Queues
8
Lecture: Stacks and Queues
Implementing a Stack Implementing a stack using a linked list isn’t that bad either… Store the items in the stack in a linked list The top of the stack is the head node, the bottom of the stack is the end of the list push by adding to the front of the list pop by removing from the front of the list Lecture: Stacks and Queues
9
Lecture: Stacks and Queues
Reversing a Word We can use a stack to reverse the letters in a word. How? Lecture: Stacks and Queues
10
Lecture: Stacks and Queues
Reversing a Word Read each letter in the word and push it onto the stack When you reach the end of the word, pop the letters off the stack and print them out. Lecture: Stacks and Queues
11
Lecture: Stacks and Queues
The N-Queens Problem Main slides Lecture: Stacks and Queues
12
Lecture: Stacks and Queues
What is a queue? A data structure of ordered items such that items can be inserted only at one end and removed at the other end. Example A line at the supermarket Lecture: Stacks and Queues
13
Lecture: Stacks and Queues
What can we do with a queue? Enqueue - Add an item to the queue Dequeue - Remove an item from the queue The book calls these insert and getFront in order to simplify things. Lecture: Stacks and Queues
14
Lecture: Stacks and Queues
A queue is called a FIFO (First in-First out) data structure. What are some applications of queues? Round-robin scheduling in processors Input/Output processing Queueing of packets for delivery in networks Lecture: Stacks and Queues
15
Lecture: Stacks and Queues
Implementing a Queue Just like a stack, we can implementing a queue in two ways: Using an array Using a linked list Lecture: Stacks and Queues
16
Lecture: Stacks and Queues
Implementing a Queue Using an array to implement a queue is significantly harder than using an array to implement a stack. Why? Unlike a stack, where we add and remove at the same end, in a queue we add to one end and remove from the other. Lecture: Stacks and Queues
17
Lecture: Stacks and Queues
Implementing a Queue There are two options for implementing a queue using an array: Option 1: Enqueue at data[0] and shift all of the rest of the items in the array down to make room. Dequeue from data[numItems-1] Lecture: Stacks and Queues
18
Lecture: Stacks and Queues
Implementing a Queue Option 2 Enqueue at data[rear+1] Dequeue at data[front] The rear variable always contains the index of the last item in the queue. The front variable always contains the index of the first item in the queue. When we reach the end of the array, wrap around to the front again. Lecture: Stacks and Queues
19
Lecture: Stacks and Queues
Implementing a Queue // option 2 sketch of insert insert(Object item) { if(manyItems == 0) front = rear = 0; else rear = (rear + 1) mod size; data[rear] = item; manyItems++; } Lecture: Stacks and Queues
20
Lecture: Stacks and Queues
Implementing a Queue // option 2 sketch of getFront Object getFront() { answer = data[front]; front = (front + 1) mod size; manyItems--; return answer } Lecture: Stacks and Queues
21
Lecture: Stacks and Queues
Implementing a Queue Which approach is better? Assume that the queue has a large number of entries. In best case, for both queues, what is Big Theta? In the worst case, for both queues, what is Big Theta? Does it make sense to talk about “cases”? Lecture: Stacks and Queues
22
Lecture: Stacks and Queues
Implementing a Queue Implementing a queue using a linked list is still easy: Front of the queue is stored as the head node of the linked list, rear of the queue is stored as the tail node. Enqueue by adding to the end of the list Dequeue by removing from the front of the list. Lecture: Stacks and Queues
23
Lecture: Stacks and Queues
Palindromes We can determine whether or not a word is a palindrome using a stack and a queue. How? Lecture: Stacks and Queues
24
Lecture: Stacks and Queues
Palindromes Read each letter in the phrase. Enqueue the letter into the queue, and push the letter onto the stack. After we have read all of the letters in the phrase: Until the stack is empty, dequeue a letter from the queue and pop a letter from the stack. If the letters are not the same, the phrase is not a palindrome Lecture: Stacks and Queues
25
Lecture: Stacks and Queues
Priority Queues Sometimes we may want certain things to get to go to the front of the line. Examples: Frequent fliers on airlines Real-time video and audio packets in networks Lecture: Stacks and Queues
26
Lecture: Stacks and Queues
Priority Queues In a priority queue, each item stored in the queue has a priority associated with it. When we call enqueue, we pass the item to be enqueued and the priority associated with that item. Lecture: Stacks and Queues
27
Lecture: Stacks and Queues
Implementing a PQ There are several ways in which we might implement a priority queue: Use an array of ordinary queues, one for each priority. Queues[0] is the queue for priority 0, queues[1] is the queue for priority 1 Use a sorted linked list The list should be sorted according the the priorities of the items contained Which approach is better? Lecture: Stacks and Queues
28
Lecture: Stacks and Queues
Thinking Exercise Where might a computer’s operating system use queues? Lecture: Stacks and Queues
29
Lecture: Stacks and Queues
Review A stack is a LIFO data structure A queue is a FIFO data structure Both queues and stacks can be implemented using either linked lists or arrays A priority queue is a queue in which the ordering of the items is determined by the priorities assigned to them. Lecture: Stacks and Queues
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.