0% found this document useful (0 votes)
51 views

Stack and Queue

Stacks and queues are common data structures that can be implemented using arrays or linked lists. A stack follows LIFO order, allowing insertion and removal from only one end. Common stack operations are push and pop. A queue follows FIFO order, allowing insertion at one end and removal from the other. Common queue operations are enqueue and dequeue. Both structures have many applications in programming.

Uploaded by

DHRUV RAI
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
51 views

Stack and Queue

Stacks and queues are common data structures that can be implemented using arrays or linked lists. A stack follows LIFO order, allowing insertion and removal from only one end. Common stack operations are push and pop. A queue follows FIFO order, allowing insertion at one end and removal from the other. Common queue operations are enqueue and dequeue. Both structures have many applications in programming.

Uploaded by

DHRUV RAI
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 24

Stack and Queue

1
What is a Stack
• Stack of Books

2
Stacks
• 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.

3
Stacks
• 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

4
Stacks
• 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
– Parsing
– Evaluating postfix expressions
5
Stacks
• 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

6
Interface IStack
Interface Istack {
boolean empty();
void push(char c);
char pop();
char peek();
}
Using a IStack
• A balance of braces.
– (()) balanced braces
– ()(()()))) not balanced braces
• How can you use Istack to check a brace is
balanced or not?

When you implement the above


requirement, you ignore the
implementation details of Istack.
Implementing a Stack
• There are two ways we can implement a
stack:
– Using an array
– Using a linked list

9
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]

10
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

11
Reversing a Word
• We can use a stack to reverse the letters in a
word.
• How?

12
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.

13
What is a Queue?

14
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

15
Queues
• What can we do with a queue?
– Enqueue - Add an item to the queue
– Dequeue - Remove an item from the queue
• These ops are also called insert and getFront
in order to simplify things.

16
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

17
Implementing a Queue
• Just like a stack, we can implementing a
queue in two ways:
– Using an array
– Using a linked list

18
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.

19
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]

20
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.

21
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++;
}
22
Implementing a Queue
// option 2 sketch of getFront

Object getFront() {
answer = data[front];
front = (front + 1) mod size;
manyItems--;
return answer
}
23
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.

24

You might also like