Data Structure and Algorithms [CO2003]
Chapter 5 - Stack and Queue
Lecturer: Vuong Ba Thinh
Contact: vbthinh@[Link]
Faculty of Computer Science and Engineering
Hochiminh city University of Technology
Contents
1. Basic operations of Stacks
2. Implementation of Stacks
3. Applications of Stack
4. Basic operations of Queues
5. Implementation of Queue
6. Applications of Queue
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 1 / 52
Outcomes
• L.O.2.1 - Depict the following concepts: (a) array list and linked list, including single link
and double links, and multiple links; (b) stack; and (c) queue and circular queue.
• L.O.2.2 - Describe storage structures by using pseudocode for: (a) array list and linked
list, including single link and double links, and multiple links; (b) stack; and (c) queue and
circular queue.
• L.O.2.3 - List necessary methods supplied for list, stack, and queue, and describe them
using pseudocode.
• L.O.2.4 - Implement list, stack, and queue using C/C++.
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 2 / 52
Outcomes
• L.O.2.5 - Use list, stack, and queue for problems in real-life, and choose an appropriate
implementation type (array vs. link).
• L.O.2.6 - Analyze the complexity and develop experiment (program) to evaluate the
eciency of methods supplied for list, stack, and queue.
• L.O.8.4 - Develop recursive implementations for methods supplied for the following
structures: list, tree, heap, searching, and graphs.
• L.O.1.2 - Analyze algorithms and use Big-O notation to characterize the computational
complexity of algorithms composed by using the following control structures: sequence,
branching, and iteration (not recursion).
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 3 / 52
Basic operations of Stacks
Linear List Concepts
General list:
• No restrictions on which operation can be used on the list.
• No restrictions on where data can be inserted/deleted.
Restricted list:
• Only some operations can be used on the list.
• Data can be inserted/deleted only at the ends of the list.
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 4 / 52
Linear list concepts
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 5 / 52
Stack
Denition
A stack of elements of type T is a nite sequence of elements of T, in which all insertions and
deletions are restricted to one end, called the top.
Stack is a Last In - First Out (LIFO) data structure.
LIFO: The last item put on the stack is the rst item that can be taken o.
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 6 / 52
Basic operations of Stacks
Basic operations:
• Construct a stack, leaving it empty.
• Push an element: put a new element on to the top of the stack.
• Pop an element: remove the top element from the top of the stack.
• Top an element: retrieve the top element.
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 7 / 52
Basic operations of Stacks
Extended operations:
• Determine whether the stack is empty or not.
• Determine whether the stack is full or not.
• Find the size of the stack.
• Clear the stack to make it empty.
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 8 / 52
Basic operations of Stacks: Push
Figure 1: Successful Push operation
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 9 / 52
Basic operations of Stacks: Push
Figure 2: Unsuccessful Push operation. Stack remains unchanged.
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 10 / 52
Basic operations of Stacks: Pop
Figure 3: Successful Pop operation
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 11 / 52
Basic operations of Stacks: Pop
Figure 4: Unsuccessful Pop operation. Stack remains unchanged.
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 12 / 52
Basic operations of Stacks: Top
Figure 5: Successful Top operation. Stack remains unchanged.
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 13 / 52
Basic operations of Stacks: Top
Figure 6: Unsuccessful Top operation. Stack remains unchanged.
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 14 / 52
Implementation of Stacks
Linked-list implementation
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 15 / 52
Linked-list implementation
Stack structure
stack
count <i n t e g e r >
top <node p o i n t e r >
end s t a c k
Stack node structure
node
data <dataType>
n e x t <node p o i n t e r >
end node
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 16 / 52
Create an empty Linked Stack
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 17 / 52
Create an empty Linked Stack
Algorithm createStack(ref stack <metadata>)
Initializes the metadata of a stack
Pre: stack is a metadata structure of a stack
Post: metadata initialized
[Link] = 0
[Link] = null
return
End createStack
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 18 / 52
Push data into a Linked Stack
1. Allocate memory for the new node and set up data.
2. Update pointers:
• Point the new node to the top node (before adding the new node).
• Point top to the new node.
3. Update count
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 19 / 52
Push data into a Linked Stack
Algorithm pushStack(ref stack <metadata>, val data <dataType>)
Inserts (pushes) one item into the stack
Pre: stack is a metadata structure to a valid stack
data contains value to be pushed into the stack
Post: data have been pushed in stack
Return true if successful; false if memory overow
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 20 / 52
Push data into a Linked Stack
if then
stack full
success = false
else
allocate (pNew)
pNew -> data = data
pNew -> next = [Link]
[Link] = pNew
[Link] = [Link] + 1
success = true
end
return success
End pushStack
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 21 / 52
Push data into a Linked Stack
• Push is successful when allocation memory for the new node is successful.
• There is no dierence between push data into a stack having elements and push data into
an empty stack (top having NULL value is assigned to pNew->next: that's corresponding
to a list having only one element).
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 22 / 52
Pop Linked Stack
1. dltPtr holds the element on the top of the stack.
2. top points to the next element.
3. Recycle dltPtr. Decrease count by 1.
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 23 / 52
Pop Linked Stack
Algorithm popStack(ref stack <metadata>, ref dataOut <dataType>)
Pops the item on the top of the stack and returns it to caller
Pre: stack is a metadata structure to a valid stack
dataOut is to receive the popped data
Post: data have been returned to caller
Return true if successful; false if stack is empty
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 24 / 52
Pop Linked Stack
if stack emptythen
success = false
else
dltPtr = [Link]
dataOut = [Link] -> data
[Link] = [Link] -> next
[Link] = [Link] - 1
recycle(dltPtr)
success = true
end
return success
End popStack
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 25 / 52
Pop Linked Stack
• Pop is successful when the stack is not empty.
• There is no dierence between pop an element from a stack having elements and pop the
only-one element in the stack (dltPtr->next having NULL value is assigned to top:
that's corresponding to an empty stack).
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 26 / 52
Stack Top
Algorithm stackTop(ref stack <metadata>, ref dataOut <dataType>)
Retrieves the data from the top of the stack without changing the stack
Pre: stack is a metadata structure to a valid stack
dataOut is to receive top stack data
Post: data have been returned to caller
Return true if successful; false if stack is empty
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 27 / 52
Stack Top
if then
stack empty
success = false
else
dataOut = [Link] -> data
success = true
end
return success
End stackTop
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 28 / 52
Destroy Stack
Algorithm destroyStack(ref stack <metadata>)
Releases all nodes back to memory
Pre: stack is a metadata structure to a valid stack
Post: stack empty and all nodes recycled
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 29 / 52
Destroy Stack
if stack not empty then
while [Link] not null do
temp = [Link]
[Link] = [Link] -> next
recycle(temp)
end
end
[Link] = 0
return
End destroyStack
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 30 / 52
isEmpty Linked Stack
Algorithm isEmpty(ref stack <metadata>)
Determines if the stack is empty
Pre: stack is a metadata structure to a valid stack
Post: return stack status
Return true if the stack is empty, false otherwise
if count = 0 then
Return true
else
Return false
end
End isEmpty
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 31 / 52
Applications of Stack
Applications of Stack
• Reversing data items
• Reverse a list
• Convert Decimal to Binary
• Parsing
• Brackets Parse
• Postponement of processing data items
• Inx to Postx Transformation
• Evaluate a Postx Expression
• Backtracking
• Goal Seeking Problem
• Knight's Tour
• Exiting a Maze
• Eight Queens Problem
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 32 / 52
Basic operations of Queues
Queue
Denition
A queue of elements of type T is a nite sequence of elements of T, in which data can only be
inserted at one end called the rear, and deleted from the other end called the front.
Queue is a First In - First Out (FIFO) data structure.
FIFO: The rst item stored in the queue is the rst item that can be taken out.
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 33 / 52
Basic operations of Queues
Basic operations:
• Construct a queue, leaving it empty.
• Enqueue: put a new element in to the rear of the queue.
• Dequeue: remove the rst element from the front of the queue.
• Queue Front: retrieve the front element.
• Queue Rear: retrieve the rear element.
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 34 / 52
Basic operations of Queues: Enqueue
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 35 / 52
Basic operations of Queues: Dequeue
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 36 / 52
Basic operations of Queues: Queue Front
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 37 / 52
Basic operations of Queues: Queue Rear
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 38 / 52
Implementation of Queue
Linked-list implementation
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 39 / 52
Linked-list implementation
Queue structure
queue
count <i n t e g e r >
f r o n t <node p o i n t e r >
r e a r <node p o i n t e r >
endqueue
Queue node structure
node
data <dataType>
n e x t <node p o i n t e r >
end node
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 40 / 52
Create Queue
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 41 / 52
Create Queue
Algorithm createQueue(ref queue <metadata>)
Initializes the metadata of a queue
Pre: queue is a metadata structure of a queue
Post: metadata initialized
[Link]= 0
[Link] = null
[Link] = null
return
End createQueue
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 42 / 52
Enqueue: Insert into an empty queue
Figure 7: Insert into an empty queue
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 43 / 52
Enqueue: Insert into a queue with data
Figure 8: Insert into a queue with data
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 44 / 52
Enqueue
Algorithm enqueue(ref queue <metadata>, val data <dataType>)
Inserts one item at the rear of the queue
Pre: queue is a metadata structure of a valid queue
data contains data to be inserted into queue
Post: data have been inserted in queue
Return true if successful, false if memory overow
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 45 / 52
Enqueue
if then
queue full
return false
end
allocate (newPtr)
newPtr -> data = data
newPtr -> next = null
if [Link] = 0 then
[Link] = newPtr // Insert into an empty queue
else
[Link] -> next = newPtr // Insert into a queue with data
end
[Link] = newPtr
[Link] = [Link] + 1
return true
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 46 / 52
Dequeue: Delete data in a queue with only one item
Figure 9: Delete data in a queue with only one item
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 47 / 52
Dequeue: Delete data in a queue with more than one item
Figure 10: Delete data in a queue with more than one item
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 48 / 52
Dequeue
Algorithm dequeue(ref queue <metadata>, ref dataOut <dataType>)
Deletes one item at the front of the queue and returns its data to caller
Pre: queue is a metadata structure of a valid queue
dataOut is to receive dequeued data
Post: front data have been returned to caller
Return true if successful, false if memory overow
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 49 / 52
Dequeue
if queue empty then
return false
end
dataOut = [Link] -> data
dltPtr = [Link]
if [Link] = 1 then
// Delete data in a queue with only one item
[Link] = NULL
end
[Link] = [Link] -> next
[Link] = [Link] - 1
recycle (dltPtr)
return true
End dequeue
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 50 / 52
Applications of Queue
Applications of Queue
• Polynomial Arithmetic
• Categorizing Data
• Evaluate a Prex Expression
• Radix Sort
• Queue Simulation
Lecturer: Vuong Ba Thinh Contact: vbthinh@[Link] Data Structure and Algorithms [CO2003] 51 / 52