Data Structures Algorithms - Lecture 23 24 25 - Stack Queue ADT

You might also like

Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 151

DATA STRUCTURES AND

ALGORITHMS
COMPILED BY: SULAMAN
AHMAD NAZ
Lecture
Stack & Queue ADT
INSTRUCTOR: Saeed
Ahmed Awan
1
STACK ADT
■ A stack is an Abstract Data Type (ADT), commonly used in
most programming languages.
■ It is named stack as it behaves like a real-world stack.
Recall Lecture # 12, 13 & 14
■ We can place or remove a card or plate from the top of the
stack only.
■ At any given time, we can only access the top element of a
stack.
2
STACK ADT

3
Implementation
■ A stack can be implemented by:
– Arrays
– Linked List

■ In the first case, it will be of fixed size because arrays are


basically static.
■ In the second case, stack will be of dynamic size.

■ Each has its own merits & demerits.


4
Basic Operations on LIST ADT
■ Push() To insert at the top of stack
■ Pop() To access and remove the top of stack
■ Peek() To access the top of stack without removal

■ The stack will be full when its top reaches the maximum limit.
■ The stack will be considered empty, if there is no element in the
stack.

5
Array Based Implementation ― Push()
Algorithm Push(value)
//MAX is the maximum size of Array (Stack)
If Top == MAX Then return FALSE
Top++
Stack[Top] = value
return TRUE
End Push

6
MAX = 5
Push() Value = 10

Algorithm Push(value) 5
//MAX is the maximum size of Array (Stack) 4
If Top == MAX Then return FALSE
Top++ 3
Stack[Top] = value
2
return TRUE
End Push 1

Top 0
7
MAX = 5
Push() Value = 10

Algorithm Push(value) 5
//MAX is the maximum size of Array (Stack) 4
If Top == MAX Then return FALSE
Top++ 3
Stack[Top] = value
2
return TRUE
End Push 1

Top 0
8
MAX = 5
Push() Value = 10

Algorithm Push(value) 5
//MAX is the maximum size of Array (Stack) 4
If Top == MAX Then return FALSE
Top++ 3
Stack[Top] = value
2
return TRUE
End Push Top 1

0
9
MAX = 5
Push() Value = 10

Algorithm Push(value) 5
//MAX is the maximum size of Array (Stack) 4
If Top == MAX Then return FALSE
Top++ 3
Stack[Top] = value
2
return TRUE
End Push Top 1 10

0
10
MAX = 5
Push() Value = 10

Algorithm Push(value) 5
//MAX is the maximum size of Array (Stack) 4
If Top == MAX Then return FALSE
Top++ 3
Stack[Top] = value
2
return TRUE
End Push Top 1 10

0
11
MAX = 5
Push() Value = 5

Algorithm Push(value)
Top 5 12

//MAX is the maximum size of Array (Stack) 4 11

If Top == MAX Then return FALSE


Top++ 3 -5

Stack[Top] = value
2 4
return TRUE
End Push 1 10

0
12
MAX = 5
Push() Value = 5

Algorithm Push(value)
Top 5 12

//MAX is the maximum size of Array (Stack) 4 11

If Top == MAX Then return FALSE


Top++ 3 -5

Stack[Top] = value
2 4
return TRUE
End Push 1 10

0
13
Array Based Implementation ― Pop()
Algorithm Pop()
//MAX is the maximum size of Array (Stack)
If Top == 0 Then return NULL
value = Stack[Top]
Top ― ―
return value
End Pop

14
MAX = 5
Pop()
Algorithm Pop() 5
//MAX is the maximum size of Array (Stack) 4
If Top == 0 Then return NULL
value = Stack[Top] 3
Top ― ―
2
return value
End Pop Top 1 10

0
15
MAX = 5
Pop()
Algorithm Pop() 5
//MAX is the maximum size of Array (Stack) 4
If Top == 0 Then return NULL
value = Stack[Top] 3
Top ― ―
2
return value
End Pop Top 1 10

0
16
MAX = 5
Pop()
value = 10

Algorithm Pop() 5
//MAX is the maximum size of Array (Stack) 4
If Top == 0 Then return NULL
value = Stack[Top] 3
Top ― ―
2
return value
End Pop Top 1 10

0
17
MAX = 5
Pop()
value = 10

Algorithm Pop() 5
//MAX is the maximum size of Array (Stack) 4
If Top == 0 Then return NULL
value = Stack[Top] 3
Top ― ―
2
return value
End Pop 1 10

Top 0
18
MAX = 5
Pop()
value = 10

Algorithm Pop() 5
//MAX is the maximum size of Array (Stack) 4
If Top == 0 Then return NULL
value = Stack[Top] 3
Top ― ―
2
return value
End Pop 1 10

Top 0
19
MAX = 5
Pop()
value = 10
return 10 5
Algorithm Pop()
//MAX is the maximum size of Array (Stack) 4
If Top == 0 Then return NULL
value = Stack[Top] 3
Top ― ―
2
return value
End Pop 1 10

Top 0
20
MAX = 5
Pop()
Algorithm Pop() 5
//MAX is the maximum size of Array (Stack) 4
If Top == 0 Then return NULL
value = Stack[Top] 3
Top ― ―
2
return value
End Pop 1

Top 0
21
MAX = 5
Pop()
return NULL

Algorithm Pop() 5
//MAX is the maximum size of Array (Stack) 4
If Top == 0 Then return NULL
value = Stack[Top] 3
Top ― ―
2
return value
End Pop 1

Top 0
22
Array Based Implementation ― Peek()
Algorithm Peek() 5
//MAX is the maximum size of Array (Stack) 4
If Top == 0 Then return NULL
return Stack[Top] Top 3 5

End Peek
2 2

1 -3

0
23
Linked List Based Implementation ― Push()
Algorithm Push(value) //Initially Position is 0, when stack is empty
If Position == MAX
return FALSE
Create New Node NewNode
NewNode.data = value
If Head == NULL
Head = NewNode
Else
Top.Next = NewNode
End If
Top = NewNode
Position++
return TRUE
End Push 24
Push()
Algorithm Push(value) //Initially Size is 0, when stack is empty
If Size == MAX
return FALSE
Create New Node NewNode

Head

Top
NewNode.data = value
If Head == NULL
Head = NewNode
Else

NULL
Top.Next = NewNode 12 4 0
End If
Top = NewNode
Size++
return TRUE
End Push 25
Push()
Algorithm Push(value) //Initially Size is 0, when stack is empty
If Size == MAX NULL
return FALSE
Create New Node NewNode
Top 0
NewNode.data = value
If Head == NULL
Head = NewNode
Else 4
Top.Up = NewNode
End If
Top = NewNode Head 12
Size++
return TRUE
End Push 26
Value = 10
Push() MAX = 4

Algorithm Push(value) //Initially Size is 0, when stack is empty


If Size == MAX NULL
return FALSE Size = 3
Create New Node NewNode
Top 0
NewNode.data = value
If Head == NULL
Head = NewNode
Else 4
Top.Up = NewNode
End If
Top = NewNode Head 12
Size++
return TRUE
End Push 27
Value = 10
Push() MAX = 4

Algorithm Push(value) //Initially Size is 0, when stack is empty


If Size == MAX NULL
return FALSE Size = 3
Create New Node NewNode
Top 0
NewNode.data = value
If Head == NULL
Head = NewNode
Else 4
Top.Up = NewNode
End If
Top = NewNode Head 12
Size++
return TRUE
End Push 28
Value = 10 NULL
Push() MAX = 4
NewNode
Algorithm Push(value) //Initially Size is 0, when stack is empty
If Size == MAX NULL
return FALSE Size = 3
Create New Node NewNode
Top 0
NewNode.data = value
If Head == NULL
Head = NewNode
Else 4
Top.Up = NewNode
End If
Top = NewNode Head 12
Size++
return TRUE
End Push 29
Value = 10 NULL
Push() MAX = 4
10 NewNode
Algorithm Push(value) //Initially Size is 0, when stack is empty
If Size == MAX NULL
return FALSE Size = 3
Create New Node NewNode
Top 0
NewNode.data = value
If Head == NULL
Head = NewNode
Else 4
Top.Up = NewNode
End If
Top = NewNode Head 12
Size++
return TRUE
End Push 30
Value = 10 NULL
Push() MAX = 4
10 NewNode
Algorithm Push(value) //Initially Size is 0, when stack is empty
If Size == MAX NULL
return FALSE Size = 3
Create New Node NewNode
Top 0
NewNode.data = value
If Head == NULL
Head = NewNode
Else 4
Top.Up = NewNode
End If
Top = NewNode Head 12
Size++
return TRUE
End Push 31
Value = 10 NULL
Push() MAX = 4
10 NewNode
Algorithm Push(value) //Initially Size is 0, when stack is empty
If Size == MAX
return FALSE Size = 3
Create New Node NewNode
Top 0
NewNode.data = value
If Head == NULL
Head = NewNode
Else 4
Top.Up = NewNode
End If
Top = NewNode Head 12
Size++
return TRUE
End Push 32
Value = 10 NULL
Push() MAX = 4
Top 10 NewNode
Algorithm Push(value) //Initially Size is 0, when stack is empty
If Size == MAX
return FALSE Size = 3
Create New Node NewNode
0
NewNode.data = value
If Head == NULL
Head = NewNode
Else 4
Top.Up = NewNode
End If
Top = NewNode Head 12
Size++
return TRUE
End Push 33
Value = 10
NULL
Push() MAX = 4

Algorithm Push(value) //Initially Size is 0, when stack is empty Top 10 NewNode


If Size == MAX
return FALSE Size = 4
Create New Node NewNode
0
NewNode.data = value
If Head == NULL
Head = NewNode
Else 4
Top.Up = NewNode
End If
Top = NewNode Head 12
Size++
return TRUE
End Push 34
Value = 10
NULL
Push() MAX = 4

Algorithm Push(value) //Initially Size is 0, when stack is empty Top 10 NewNode


If Size == MAX
return FALSE Size = 4
Create New Node NewNode return TRUE
0
NewNode.data = value
If Head == NULL
Head = NewNode
Else 4
Top.Up = NewNode
End If
Top = NewNode Head 12
Size++
return TRUE
End Push 35
Value = 15
NULL
Push() MAX = 4

Algorithm Push(value) //Initially Size is 0, when stack is empty Top 10


If Size == MAX
return FALSE Size = 4
Create New Node NewNode
0
NewNode.data = value
If Head == NULL
Head = NewNode
Else 4
Top.Up = NewNode
End If
Top = NewNode Head 12
Size++
return TRUE
End Push 36
Value = 15
NULL
Push() MAX = 4

Algorithm Push(value) //Initially Size is 0, when stack is empty Top 10


If Size == MAX
return FALSE Size = 4
Create New Node NewNode
0
NewNode.data = value
If Head == NULL
Head = NewNode
Else 4
Top.Up = NewNode
End If
Top = NewNode Head 12
Size++
return TRUE
End Push 37
Value = 15
NULL
Push() MAX = 4

Algorithm Push(value) //Initially Size is 0, when stack is empty Top 10


If Size == MAX
return FALSE Size = 4
Create New Node NewNode return FALSE
0
NewNode.data = value
If Head == NULL
Head = NewNode
Else 4
Top.Up = NewNode
End If
Top = NewNode Head 12
Size++
return TRUE
End Push 38
Value = 20
Push() MAX = 4

Algorithm Push(value) //Initially Size is 0, when stack is empty


If Size == MAX
return FALSE Size = 0
Create New Node NewNode
NewNode.data = value
If Head == NULL
Head = NewNode
Else
Top.Up = NewNode
End If Top
Top = NewNode Head NULL
Size++
return TRUE
End Push 39
Value = 20
Push() MAX = 4

Algorithm Push(value) //Initially Size is 0, when stack is empty


If Size == MAX
return FALSE Size = 0
Create New Node NewNode
NewNode.data = value
If Head == NULL
Head = NewNode
Else
Top.Up = NewNode
End If Top
Top = NewNode Head NULL
Size++
return TRUE
End Push 40
Value = 20
Push() MAX = 4

Algorithm Push(value) //Initially Size is 0, when stack is empty


If Size == MAX
return FALSE Size = 0
Create New Node NewNode
NewNode.data = value
If Head == NULL NULL
Head = NewNode
Else NewNode
Top.Up = NewNode
End If Top
Top = NewNode Head NULL
Size++
return TRUE
End Push 41
Value = 20
Push() MAX = 4

Algorithm Push(value) //Initially Size is 0, when stack is empty


If Size == MAX
return FALSE Size = 0
Create New Node NewNode
NewNode.data = value
If Head == NULL NULL
Head = NewNode
Else NewNode
20
Top.Up = NewNode
End If Top
Top = NewNode Head NULL
Size++
return TRUE
End Push 42
Value = 20
Push() MAX = 4

Algorithm Push(value) //Initially Size is 0, when stack is empty


If Size == MAX
return FALSE Size = 0
Create New Node NewNode
NewNode.data = value
If Head == NULL NULL
Head = NewNode
Else NewNode
20
Top.Up = NewNode
End If Top
Top = NewNode Head NULL
Size++
return TRUE
End Push 43
Value = 20
Push() MAX = 4

Algorithm Push(value) //Initially Size is 0, when stack is empty


If Size == MAX
return FALSE Size = 0
Create New Node NewNode
NewNode.data = value
If Head == NULL NULL
Head = NewNode
Else NewNode
20
Top.Up = NewNode
End If Top
Top = NewNode Head NULL
Size++
return TRUE
End Push 44
Value = 20
Push() MAX = 4

Algorithm Push(value) //Initially Size is 0, when stack is empty


If Size == MAX
return FALSE Size = 0
Create New Node NewNode
NewNode.data = value
If Head == NULL NULL
Head = NewNode
Else NewNode
20
Top.Up = NewNode
Top
End If
Top = NewNode Head
Size++
return TRUE
End Push 45
Value = 20
Push() MAX = 4

Algorithm Push(value) //Initially Size is 0, when stack is empty


If Size == MAX
return FALSE Size = 1
Create New Node NewNode
NewNode.data = value
If Head == NULL NULL
Head = NewNode
Else NewNode
20
Top.Up = NewNode
Top
End If
Top = NewNode Head
Size++
return TRUE
End Push 46
Value = 20
Push() MAX = 4

Algorithm Push(value) //Initially Size is 0, when stack is empty


If Size == MAX
return FALSE Size = 1
Create New Node NewNode return TRUE
NewNode.data = value
If Head == NULL NULL
Head = NewNode
Else NewNode
20
Top.Up = NewNode
Top
End If
Top = NewNode Head
Size++
return TRUE
End Push 47
Linked List Based Implementation ― Pop()
Algorithm Pop( )
If Size == 0 Then return NULL
value = Top.data
If Size == 1
Delete Top
Top = Head = NULL
Else
CurrentNode=Head
While CurrentNode.Up != Top
CurrentNode = CurrentNode.Up
CurrentNode.Up = NULL
Delete Top
Top = CurrentNode
End If
Size ― ―
return value 48
Pop()
Size = 1
Algorithm Pop( )
If Size == 0 Then return NULL
value = Top.data
If Size == 1
Delete Top
Top = Head = NULL
Else NULL
CurrentNode=Head
While CurrentNode.Up != Top
CurrentNode = CurrentNode.Up 20
CurrentNode.Up = NULL
Top
Delete Top
Top = CurrentNode Head
End If
Size ― ―
return value 49
Pop()
Size = 1
Algorithm Pop( )
If Size == 0 Then return NULL
value = Top.data
If Size == 1
Delete Top
Top = Head = NULL
Else NULL
CurrentNode=Head
While CurrentNode.Up != Top
CurrentNode = CurrentNode.Up 20
CurrentNode.Up = NULL
Top
Delete Top
Top = CurrentNode Head
End If
Size ― ―
return value 50
Pop()
Size = 1
Algorithm Pop( )
value = 20
If Size == 0 Then return NULL
value = Top.data
If Size == 1
Delete Top
Top = Head = NULL
Else NULL
CurrentNode=Head
While CurrentNode.Up != Top
CurrentNode = CurrentNode.Up 20
CurrentNode.Up = NULL
Top
Delete Top
Top = CurrentNode Head
End If
Size ― ―
return value 51
Pop()
Size = 1
Algorithm Pop( )
value = 20
If Size == 0 Then return NULL
value = Top.data
If Size == 1
Delete Top
Top = Head = NULL
Else NULL
CurrentNode=Head
While CurrentNode.Up != Top
CurrentNode = CurrentNode.Up 20
CurrentNode.Up = NULL
Top
Delete Top
Top = CurrentNode Head
End If
Size ― ―
return value 52
Pop()
Size = 1
Algorithm Pop( )
value = 20
If Size == 0 Then return NULL
value = Top.data
If Size == 1
Delete Top
Top = Head = NULL
Else
CurrentNode=Head
While CurrentNode.Up != Top NULL
CurrentNode = CurrentNode.Up
CurrentNode.Up = NULL
Top
Delete Top
Top = CurrentNode Head
End If
Size ― ―
return value 53
Pop()
Size = 1
Algorithm Pop( )
value = 20
If Size == 0 Then return NULL
value = Top.data
If Size == 1
Delete Top
Top = Head = NULL
Else
CurrentNode=Head
While CurrentNode.Up != Top NULL
CurrentNode = CurrentNode.Up
CurrentNode.Up = NULL
Top
Delete Top
Top = CurrentNode Head
End If
Size ― ―
return value 54
Pop()
Size = 0
Algorithm Pop( )
value = 20
If Size == 0 Then return NULL
value = Top.data
If Size == 1
Delete Top
Top = Head = NULL
Else
CurrentNode=Head
While CurrentNode.Up != Top NULL
CurrentNode = CurrentNode.Up
CurrentNode.Up = NULL
Top
Delete Top
Top = CurrentNode Head
End If
Size ― ―
return value 55
Pop()
Size = 0
Algorithm Pop( )
value = 20
If Size == 0 Then return NULL
value = Top.data
return 20
If Size == 1
Delete Top
Top = Head = NULL
Else
CurrentNode=Head
While CurrentNode.Up != Top NULL
CurrentNode = CurrentNode.Up
CurrentNode.Up = NULL
Top
Delete Top
Top = CurrentNode Head
End If
Size ― ―
return value 56
Pop()
Size = 4
Algorithm Pop( )
If Size == 0 Then return NULL
NULL
value = Top.data
If Size == 1
Top 10
Delete Top
Top = Head = NULL
Else
CurrentNode=Head 0
While CurrentNode.Up != Top
CurrentNode = CurrentNode.Up
CurrentNode.Up = NULL
Delete Top 4
Top = CurrentNode
End If
Size ― ― Head 12
return value 57
Pop()
Size = 4
Algorithm Pop( )
If Size == 0 Then return NULL
NULL
value = Top.data
If Size == 1
Top 10
Delete Top
Top = Head = NULL
Else
CurrentNode=Head 0
While CurrentNode.Up != Top
CurrentNode = CurrentNode.Up
CurrentNode.Up = NULL
Delete Top 4
Top = CurrentNode
End If
Size ― ― Head 12
return value 58
Pop()
Size = 4
Algorithm Pop( )
value = 10 NULL
If Size == 0 Then return NULL
value = Top.data
If Size == 1
Top 10
Delete Top
Top = Head = NULL
Else
CurrentNode=Head 0
While CurrentNode.Up != Top
CurrentNode = CurrentNode.Up
CurrentNode.Up = NULL
Delete Top 4
Top = CurrentNode
End If
Size ― ― Head 12
return value 59
Pop()
Size = 4
Algorithm Pop( )
value = 10 NULL
If Size == 0 Then return NULL
value = Top.data
If Size == 1
Top 10
Delete Top
Top = Head = NULL
Else
CurrentNode=Head 0
While CurrentNode.Up != Top
CurrentNode = CurrentNode.Up
CurrentNode.Up = NULL
Delete Top 4
Top = CurrentNode
End If
Size ― ― Head 12
return value 60
Pop()
Size = 4
Algorithm Pop( )
value = 10 NULL
If Size == 0 Then return NULL
value = Top.data
If Size == 1
Top 10
Delete Top
Top = Head = NULL
Else
CurrentNode=Head 0
While CurrentNode.Up != Top
CurrentNode = CurrentNode.Up
CurrentNode.Up = NULL
Delete Top 4
Top = CurrentNode
End If
Size ― ― Current
Head 12
return value Node
61
Pop()
Size = 4
Algorithm Pop( )
value = 10 NULL
If Size == 0 Then return NULL
value = Top.data
If Size == 1
Top 10
Delete Top
Top = Head = NULL
Else
CurrentNode=Head 0
While CurrentNode.Up != Top
CurrentNode = CurrentNode.Up
CurrentNode.Up = NULL
Delete Top 4
Top = CurrentNode
End If
Size ― ― Current
Head 12
return value Node
62
Pop()
Size = 4
Algorithm Pop( )
value = 10 NULL
If Size == 0 Then return NULL
value = Top.data
If Size == 1
Top 10
Delete Top
Top = Head = NULL
Else
CurrentNode=Head 0
While CurrentNode.Up != Top
CurrentNode = CurrentNode.Up
CurrentNode.Up = NULL Current
Delete Top 4
Node
Top = CurrentNode
End If
Size ― ― Head 12
return value 63
Pop()
Size = 4
Algorithm Pop( )
value = 10 NULL
If Size == 0 Then return NULL
value = Top.data
If Size == 1
Top 10
Delete Top
Top = Head = NULL
Else
CurrentNode=Head 0
While CurrentNode.Up != Top
CurrentNode = CurrentNode.Up
CurrentNode.Up = NULL Current
Delete Top 4
Node
Top = CurrentNode
End If
Size ― ― Head 12
return value 64
Pop()
Size = 4
Algorithm Pop( )
value = 10 NULL
If Size == 0 Then return NULL
value = Top.data
If Size == 1
Top 10
Delete Top
Top = Head = NULL
Else
CurrentNode=Head Current
0
Node
While CurrentNode.Up != Top
CurrentNode = CurrentNode.Up
CurrentNode.Up = NULL
Delete Top 4
Top = CurrentNode
End If
Size ― ― Head 12
return value 65
Pop()
Size = 4
Algorithm Pop( )
value = 10 NULL
If Size == 0 Then return NULL
value = Top.data
If Size == 1
Top 10
Delete Top
Top = Head = NULL
Else
CurrentNode=Head Current
0
Node
While CurrentNode.Up != Top
CurrentNode = CurrentNode.Up
CurrentNode.Up = NULL
Delete Top 4
Top = CurrentNode
End If
Size ― ― Head 12
return value 66
Pop()
Size = 4
Algorithm Pop( )
value = 10 NULL
If Size == 0 Then return NULL
value = Top.data
If Size == 1
Top
Delete Top
Top = Head = NULL
Else
CurrentNode=Head Current
0
Node
While CurrentNode.Up != Top
CurrentNode = CurrentNode.Up
CurrentNode.Up = NULL
Delete Top 4
Top = CurrentNode
End If
Size ― ― Head 12
return value 67
Pop()
Size = 4
Algorithm Pop( )
value = 10
If Size == 0 Then return NULL
value = Top.data
If Size == 1
Delete Top NULL
Top = Head = NULL
Else
CurrentNode=Head Current
Top 0
Node
While CurrentNode.Up != Top
CurrentNode = CurrentNode.Up
CurrentNode.Up = NULL
Delete Top 4
Top = CurrentNode
End If
Size ― ― Head 12
return value 68
Pop()
Size = 3
Algorithm Pop( )
value = 10
If Size == 0 Then return NULL
value = Top.data
If Size == 1
Delete Top NULL
Top = Head = NULL
Else
CurrentNode=Head Current
Top 0
Node
While CurrentNode.Up != Top
CurrentNode = CurrentNode.Up
CurrentNode.Up = NULL
Delete Top 4
Top = CurrentNode
End If
Size ― ― Head 12
return value 69
Pop()
Size = 3
Algorithm Pop( )
value = 10
If Size == 0 Then return NULL
value = Top.data
return 10
If Size == 1
Delete Top NULL
Top = Head = NULL
Else
CurrentNode=Head Current
Top 0
Node
While CurrentNode.Up != Top
CurrentNode = CurrentNode.Up
CurrentNode.Up = NULL
Delete Top 4
Top = CurrentNode
End If
Size ― ― Head 12
return value 70
Applications of Stack
■ Stacks can be used for expression evaluation.

■ Stacks can be used to check parenthesis matching in an expression.

■ Stacks can be used for Conversion from one form of expression to


another.

■ Stacks can be used for Memory Management.

71
Applications of Stack
■ Stack data structures are used in backtracking problems.

■ Many compilers use a stack for parsing the syntax of expressions.

■ Stack is used to reverse a string or any other array.

■ Stack is used to keep information about the active functions or


subroutines.

■ Keeping track of operations for managing the UNDO function. 72


Practice Question
■ We have implemented a stack using arrays and singly linked list.

■ Construct algorithms for basic stack operations if stack is


implemented using a doubly linked list.

■ Consider UP and DOWN pointers instead of PREVIOUS and NEXT


for your convenience.

73
QUEUE ADT
■ A queue is an Abstract Data Type (ADT).
■ Unlike stacks, a queue is open at both its ends.
■ It is named queue as it behaves like a real-world queue.
■ One end is always used to insert data (enqueue) and the
other is used to remove data (dequeue).
■ Queue follows First-In-First-Out methodology, i.e., the data
item stored first will be accessed first.

74
QUEUE ADT

75
QUEUE ADT

76
Basic Operations

77
Queue vs. Stack
■ Both does not support random access.
■ Queue is FIFO, while Stack is LIFO.

78
Representation of Queue

Rear Front

79
Implementation
■ Just like a stack, a queue can also be implemented by:
– Arrays
– Linked List

■ In the first case, it will be of fixed size because arrays are


basically static.

■ In the second case, stack will be of dynamic size.

80
Enqueue()

81
Array Based Implementation ― Enqueue()
Algorithm Enqueue(value)
//MAX is the maximum size of Array (Queue)
If Rear == MAX Then return FALSE
Rear++
Queue[Rear] = value
return TRUE
End Enqueue

82
Stack
Enqueue()
Algorithm Enqueue(value) 5 5

//MAX is the maximum size of Array (Queue) 4 8

If Rear == MAX Then return FALSE


Rear++ 3 6

Queue[Rear] = value
2 21
return TRUE
End Enqueue 1 12

Top 0
83
Enqueue()
Algorithm Enqueue(value)
//MAX is the maximum size of Array (Queue)
If Rear == MAX Then return FALSE Stack
Rear++
Queue[Rear] = value To
0 p
return TRUE
12 21 6 8 5
End Enqueue 1

2
84
Enqueue()
Algorithm Enqueue(value)
//MAX is the maximum size of Array (Queue)
If Rear == MAX Then return FALSE Queue
Rear++
Queue[Rear] = value Fron Rea
t 0 r
return TRUE
12 21 6 8 5
End Enqueue 1

2
85
Linked List Based Implementation
of Enqueue()
NULL Stack

Top 0

Head

Top
4

NULL
12 4 0

Head 12

86
Linked List Based Implementation
of Enqueue()

Stack Queue

Front
Head

Rear
Top

NULL

NULL
12 4 0 12 4 0

87
Dequeue()

88
Array Based Implementation ― Dequeue()
Algorithm Dequeue(value)
If Rear == 0 Then return NULL
value = Queue[Front]
For i = Front to Rear-1
Queue[i] = Queue[i+1]
Rear ― ―
return value
End Dequeue
89
Array Based Implementation ― Dequeue()
Algorithm Dequeue(value)
If Rear == 0 Then return NULL
value = Queue[Front]
For i = Front to Rear-1
Queue[i] = Queue[i+1]
Rear ― ―
Fron Rea
return value t 0 r

End Dequeue
12 21 6 8 5
1
90
Array Based Implementation ― Dequeue()
Algorithm Dequeue(value)
If Rear == 0 Then return NULL
value = Queue[Front]
For i = Front to Rear-1
Queue[i] = Queue[i+1]
Rear ― ―
Fron Rea
return value t 0 r

End Dequeue
12 21 6 8 5
1
91
Array Based Implementation ― Dequeue()
Algorithm Dequeue(value) value = 12
If Rear == 0 Then return NULL
value = Queue[Front]
For i = Front to Rear-1
Queue[i] = Queue[i+1]
Rear ― ―
Fron Rea
return value t 0 r

End Dequeue
12 21 6 8 5
1
92
Array Based Implementation ― Dequeue()
Algorithm Dequeue(value) value = 12
If Rear == 0 Then return NULL
value = Queue[Front]
For i = Front to Rear-1
Queue[i] = Queue[i+1]
Rear ― ― i i+1
Fron Rea
return value t 0 r

End Dequeue
12 21 6 8 5
1
93
Array Based Implementation ― Dequeue()
Algorithm Dequeue(value) value = 12
If Rear == 0 Then return NULL
value = Queue[Front]
For i = Front to Rear-1
Queue[i] = Queue[i+1]
Rear ― ― i i+1
Fron Rea
return value t 0 r

End Dequeue
21 21 6 8 5
1
94
Array Based Implementation ― Dequeue()
Algorithm Dequeue(value) value = 12
If Rear == 0 Then return NULL
value = Queue[Front]
For i = Front to Rear-1
Queue[i] = Queue[i+1]
Rear ― ― i i+1
Fron Rea
return value t 0 r

End Dequeue
21 21 6 8 5
1
95
Array Based Implementation ― Dequeue()
Algorithm Dequeue(value) value = 12
If Rear == 0 Then return NULL
value = Queue[Front]
For i = Front to Rear-1
Queue[i] = Queue[i+1]
Rear ― ― i i+1
Fron Rea
return value t 0 r

End Dequeue
21 6 6 8 5
1
96
Array Based Implementation ― Dequeue()
Algorithm Dequeue(value) value = 12
If Rear == 0 Then return NULL
value = Queue[Front]
For i = Front to Rear-1
Queue[i] = Queue[i+1]
Rear ― ― i i+1
Fron Rea
return value t 0 r

End Dequeue
21 6 6 8 5
1
97
Array Based Implementation ― Dequeue()
Algorithm Dequeue(value) value = 12
If Rear == 0 Then return NULL
value = Queue[Front]
For i = Front to Rear-1
Queue[i] = Queue[i+1]
Rear ― ― i i+1
Fron Rea
return value t 0 r

End Dequeue
21 6 8 8 5
1
98
Array Based Implementation ― Dequeue()
Algorithm Dequeue(value) value = 12
If Rear == 0 Then return NULL
value = Queue[Front]
For i = Front to Rear-1
Queue[i] = Queue[i+1]
Rear ― ― i i+1
Fron Rea
return value t 0 r

End Dequeue
21 6 8 8 5
1
99
Array Based Implementation ― Dequeue()
Algorithm Dequeue(value) value = 12
If Rear == 0 Then return NULL
value = Queue[Front]
For i = Front to Rear-1
Queue[i] = Queue[i+1]
Rear ― ― i i+1
Fron Rea
return value t 0 r

End Dequeue
21 6 8 5 5
1
100
Array Based Implementation ― Dequeue()
Algorithm Dequeue(value) value = 12
If Rear == 0 Then return NULL
value = Queue[Front]
For i = Front to Rear-1
Queue[i] = Queue[i+1]
Rear ― ― i i+1
Fron Rea
return value t 0 r

End Dequeue
21 6 8 5 5
1
101
Array Based Implementation ― Dequeue()
Algorithm Dequeue(value) value = 12
If Rear == 0 Then return NULL
value = Queue[Front]
For i = Front to Rear-1
Queue[i] = Queue[i+1]
Rear ― ― i i+1
Fron Rea
return value t 0 r

End Dequeue
21 6 8 5 5
1
102
Array Based Implementation ― Dequeue()
Algorithm Dequeue(value) value = 12
If Rear == 0 Then return NULL
value = Queue[Front]
For i = Front to Rear-1
Queue[i] = Queue[i+1]
Rear ― ― i i+1
Fron Rea
return value t 0 r

End Dequeue
21 6 8 5 5
1
103
Array Based Implementation ― Dequeue()
Algorithm Dequeue(value) value = 12
return 12
If Rear == 0 Then return NULL
value = Queue[Front]
For i = Front to Rear-1
Queue[i] = Queue[i+1]
Rear ― ― i i+1
Fron Rea
return value t 0 r

End Dequeue
21 6 8 5 5
1
104
Array Based Implementation ― Dequeue()
Algorithm Dequeue(value)
If Rear == 0 Then return NULL
value = Queue[Front]
For i = Front to Rear-1
Queue[i] = Queue[i+1]
Rear ― ― Rea
Fron
r
return value t 0
End Dequeue
12
1
105
Array Based Implementation ― Dequeue()
Algorithm Dequeue(value)
If Rear == 0 Then return NULL
value = Queue[Front]
For i = Front to Rear-1
Queue[i] = Queue[i+1]
Rear ― ― Rea
Fron
r
return value t 0
End Dequeue
12
1
106
Array Based Implementation ― Dequeue()
Algorithm Dequeue(value) value = 12
If Rear == 0 Then return NULL
value = Queue[Front]
For i = Front to Rear-1
Queue[i] = Queue[i+1]
Rear ― ― Rea
Fron
r
return value t 0
End Dequeue
12
1
107
Array Based Implementation ― Dequeue()
Algorithm Dequeue(value) value = 12
If Rear == 0 Then return NULL
value = Queue[Front]
For i = Front to Rear-1
Queue[i] = Queue[i+1]
Rear ― ― i i+1
Rea
Fron
r
return value t 0
End Dequeue
12
1
108
Array Based Implementation ― Dequeue()
Algorithm Dequeue(value) value = 12
If Rear == 0 Then return NULL
value = Queue[Front]
For i = Front to Rear-1
Queue[i] = Queue[i+1]
Rear ― ― i i+1
Rea
r Fron
return value t 0
End Dequeue
12
1
109
Array Based Implementation ― Dequeue()
Algorithm Dequeue(value) value = 12
If Rear == 0 Then return NULL
value = Queue[Front]
For i = Front to Rear-1
Queue[i] = Queue[i+1]
Rear ― ― i i+1
Rea
r Fron
return value t 0
End Dequeue
12
1
110
Array Based Implementation ― Dequeue()
Algorithm Dequeue(value) value = 12
return 12
If Rear == 0 Then return NULL
value = Queue[Front]
For i = Front to Rear-1
Queue[i] = Queue[i+1]
Rear ― ― i i+1
Rea
r Fron
return value t 0
End Dequeue
12
1
111
DLL Based Implementation ― Dequeue()

Front

Rear
NULL

NULL
12 4 0

112
DLL Based Implementation ― Dequeue()

Front

Rear
NULL

NULL
12 4 0

value = 12

113
DLL Based Implementation ― Dequeue()

Front

Rear
NULL

NULL
12 4 0

value = 12

114
DLL Based Implementation ― Dequeue()

Front

Rear
12
NULL

NULL
4 0

value = 12

115
DLL Based Implementation ― Dequeue()

Front

Rear
NULL

NULL
4 0

value = 12

116
DLL Based Implementation ― Dequeue()

Front

Rear
NULL

NULL
4 0

value = 12
return 12

117
DLL Based Implementation ― Dequeue()

Front
Rear
NULL

NULL
999

118
DLL Based Implementation ― Dequeue()

Front
Rear
NULL

NULL
999

value = 999

119
DLL Based Implementation ― Dequeue()

Front
Rear
NULL

NULL
999

value = 999

120
DLL Based Implementation ― Dequeue()

Front
Rear
NULL

NULL
value = 999

121
DLL Based Implementation ― Dequeue()

Front
Rear
NULL

NULL
value = 999
return 999

122
Applications of Queue

■ Handling of interrupts in real-time systems. The interrupts are


handled in the same order as they arrive i.e First come first served.

■ Serving requests on a single shared resource, like a printer, CPU task


scheduling etc.

123
DEQUE
■ DEQUE stands for Double-Ended Queue.

■ It is a variation of queue data structure.

■ In simple queue, we can insert only at REAR and read & delete only
from FRONT.

■ In DEQUE, we can do the enqueuer and dequeuer operation at both


REAR and FRONT.
124
Priority Queue
■ A priority queue or PQUEUE is just like a regular queue with a different
ENQUEUE operation.

■ We can read and delete only from FRONT.

■ But, we save the priority of each value with the value. And all the values are
sorted w.r.t their priorities.

■ The value with highest priority value is placed at the FRONT while the
value at REAR has the lowest priority.
125
Priority Queue ― Array Based Implementation

Fron Rea
t 0 r

12 21 6 8
20 9 1 8 6

4 126
Priority Queue ― Array Based Implementation

Fron Rea
t 0 r

12 21 6 8
20 9 1 8 6

3 0
11
4 127
Priority Queue ― Array Based Implementation

Fron Rea
t 0 r

12 21 6 8
20 9 1 8 6

3 0
11
4 128
Priority Queue ― Array Based Implementation

Fron Rea
t 0 r

12 21 6 8 8
20 9 1 8 6 6

3 0
11
4 129
Priority Queue ― Array Based Implementation

Fron Rea
t 0 r

12 21 6 8 8
20 9 1 8 6 6

3 0
11
4 130
Priority Queue ― Array Based Implementation

Fron Rea
t 0 r

12 21 6 6 8
20 9 1 8 8 6

3 0
11
4 131
Priority Queue ― Array Based Implementation

Fron Rea
t 0 r

12 21 6 6 8
20 9 1 8 8 6

3 0
11
4 132
Priority Queue ― Array Based Implementation

Fron Rea
t 0 r

12 21 21 6 8
20 9 1 9 8 6

3 0
11
4 133
Priority Queue ― Array Based Implementation

Fron Rea
t 0 r

12 21 21 6 8
20 9 1 9 8 6

3 0
11
4 134
Priority Queue ― Array Based Implementation

Fron Rea
t 0 r

12 0 21 6 8
20 11 1 9 8 6

3 0
11
4 135
Priority Queue ― Array Based Implementation

Fron Rea
t 0 r

12 0 21 6 8
20 11 1 9 8 6

4 136
Priority Queue ― SLL Based Implementation

Front

Rear

NULL
12 4 0
20 11 9

137
Priority Queue ― SLL Based Implementation

Front

Rear

NULL
12 4 0
20 11 9

NULL
New 0
Node 11
138
Priority Queue ― SLL Based Implementation

Front

Rear

NULL
12 4 0
20 11 9

Current
Node

NULL
New 2
Node 10
139
Priority Queue ― SLL Based Implementation

Front

Rear

NULL
12 4 0
20 11 9

Current Current
Node Node.Next

NULL
New 2
Node 10
140
Priority Queue ― SLL Based Implementation

Front

Rear

NULL
12 4 0
20 11 9

Current Current
Node Node.Next

NULL
New 2
Node 10
141
Priority Queue ― SLL Based Implementation

Front

Rear

NULL
12 4 0
20 11 9

Current Current
Node Node.Next

New 2
Node 10
142
Priority Queue ― SLL Based Implementation

Front

Rear

NULL
12 4 0
20 11 9

Current
Node

New 2 Current
Node 10 Node.Next
143
Priority Queue ― SLL Based Implementation

Front

Rear

NULL
12 4 2 0
20 11 10 9

Current
Node

New Current
Node Node.Next
144
Priority Queue ― SLL Based Implementation

Front

Rear
NULL
4
11

If List has only 1 element.

145
Priority Queue ― SLL Based Implementation

Front

Rear
NULL
4
11

NULL
New 0
Node 22

146
Priority Queue ― SLL Based Implementation

Front

Rear
NULL
4
11

New 0
Node 22

147
Priority Queue ― SLL Based Implementation

Front

Rear
NULL
4
11

New 0
Node 22

148
Priority Queue ― SLL Based Implementation

Front

Rear
NULL
New 0 4
Node 22 11

149
Practice Question

■ With the help of your knowledge of analyzing time complexity of


algorithms, represent time complexity of the algorithms discussed in
this lecture in terms of Big-Oh.

150
End of Lecture

THANK YOU
151

You might also like