You are on page 1of 35

Unit-2

Stack-Definition and operations


Queue-Definition and operations
Applications of stack
Types of queues and their applications

Compiled by Ms.V.Kala
Applications of stack
 CONVERSION OF INFIX TO POSTFIX
 EVALUATION OF POSTFIX EXPRESSION
 RECURSION
Infix, Prefix and Postfix expressions
Prefix Postfix
Infix Expression Expression Expression
A+B +AB AB+

A+B*C +A*BC ABC*+


An Expression with Parentheses

Infix Prefix Postfix


Expression Expression Expression
(A + B) * C *+ABC AB+C*
Examples of Infix, Prefix, and
Postfix

Prefix Postfix
Infix Expression Expression Expression
A+B*C+D ++A*BCD ABC*+D+
(A + B) * (C + D) *+AB+CD AB+CD+*
Examples of Infix, Prefix, and Postfix
expressions

Prefix Postfix
Infix Expression
Expression Expression

A+B+C+D
? ?
A*B+C*D
? ?
Solution -Examples of Infix, Prefix,
and Postfix Expressions

Infix Expression Prefix Expression Postfix Expression

A*B+C*D +*AB*CD AB*CD*+


A+B+C+D +++ABCD AB+C+D+
Conversion of Infix Expressions to Prefix and Postfix
expressions

The first technique that we will consider uses the notion of a fully parenthesized expression.
A + B * C can be written as (A + (B * C)) to show explicitly that the multiplication has precedence over the
addition.
Moving Operators to the Right for Postfix Notation

Moving Operators to the Left for Prefix Notation


A more complex infix expression: (A + B) * C - (D - E) * (F + G).
Algorithm –Conversion of Infix to Postfix Expression using stack
Assume the infix expression is a string of tokens delimited by spaces. The
operator tokens are *, /, +, and -, along with the left and right parentheses, ( and
). The operand tokens are the single-character identifiers A, B, C, and so on. The
following steps will produce a string of tokens in postfix order.
1. Create an empty stack called opstack for keeping operators. Create an empty
list for output.
2. Scan the token list from left to right.
If the token is an operand, append it to the end of the output list.
If the token is a left parenthesis, push it on the opstack.
Algorithm –Conversion of Infix to Postfix Expression using stack
If the token is a right parenthesis, pop the opstack until the corresponding
left parenthesis is removed. Append each operator to the end of the
output list.

If the token is an operator, *, /, +, or -, push it on the opstack. However,


first remove any operators already on the opstack that have higher or
equal precedence and append them to the output list.

3. When the input expression has been completely processed, check the
opstack. Any operators still on the stack can be removed and appended to
the end of the output list.
Example of Infix Expression to Postfix using stack
Evaluation of Postfix expression-Example

Consider the postfix expression 4 5 6 * +

Stack Contents During Evaluation


A slightly more complex example, 7 8 + 3 2 + /.
Evaluation of Postfix expression-Algorithm
Assume the postfix expression is a string of tokens delimited by spaces. The operators are *, /, +, and
- and the operands are assumed to be single-digit integer values. The output will be an integer result.
1. Create an empty stack called operandStack..
2. Scan the token list from left to right.
• If the token is an operand, convert it from a string to an integer and push the value
onto the operandStack.
• If the token is an operator, *, /, +, or -, it will need two operands. Pop the operandStack
twice.
The first pop is the second operand and the second pop is the first operand. Perform the
arithmetic operation. Push the result back on the operandStack.
3. When the input expression has been completely processed, the result is on the stack. Pop the
operandStack and return the value.
Evaluate the postfix expression ?

6 2 3 + -3 8 2 /+*2 $ 3+
Recursion
Recursion- If a function calls itself, it is
recursion (Example: Factorial of a number)
Recursion
What is a base condition in recursion?
In the recursive program, the solution to the base case is
provided and the solution of the bigger problem is expressed in
terms of smaller problems.

How a particular problem is solved using recursion?


The idea is to represent a problem in terms of one or more
smaller problems, and add one or more base conditions that
stop the recursion.
Recursion-Factorial of a number
void main()
{
Long f;
f=fact(3);
printf(“The factorial is %ld”, f);
}
long fact(int n)
{
if (n == 0) // base case
return 1;
return(n*fact(n-1)); //recursive case
}
Recursion-Flow of control
Why Stack Overflow error occurs in recursion?
If the base case is not reached or not defined, then the stack overflow problem may arise.
Let us take an example to understand this.
int fact(int n)
{
// wrong base case (it may cause stack overflow).
if (n == 100)
return 1;
else
return n*fact(n-1);
}
Types of Queues
Simple Queue
Circular Queue
Priority Queue
Double Ended Queue
Simple Queue
A simple queue is the most basic queue. In this queue, the enqueue operation takes
place at the rear, while the dequeue operation takes place at the front:

Its applications are process scheduling, disk scheduling, memory


management, IO buffer,call center phone systems, and interrupt handling.
Circular Queue
A circular queue permits better memory utilization than a simple queue when the queue has a
fixed size.
In this queue, the last node points to the first node and creates a circular connection. Thus, it
allows us to insert an item at the first node of the queue when the last node is full and the first
node is free. It’s also called a ring buffer.
Circular Queue
Applications
It’s used to switch on and off the lights of the traffic signal systems. Apart from
that, it can be also used in place of a simple queue in all the applications
mentioned in the previous slide.
Priority Queue
A priority queue is a special kind of queue in which each item has a predefined
priority of service. In this queue, the enqueue operation takes place at the rear in the
order of arrival of the items, while the dequeue operation takes place at the front based
on the priority of the items.
That is ,an item with a high priority will be dequeued before an item with a low
priority. In case, when two or more items have the same priority, then they’ll be
dequeued in the order of their arrival. Hence, it may or may not strictly follow the FIFO
rule.
Priority Queue
Generally, the value of the element itself is considered
for assigning the priority. For example, The element with
the highest value is considered as the highest priority
element.
However, in other cases, we can assume the element
with the lowest value as the highest priority element.
In other cases, we can set priorities according to our
needs.

It’s used in interrupt handling, Prim’s algorithm, Dijkstra’s


algorithm, heap sort, and Huffman code generation.
Difference between Priority Queue and
Normal Queue

In a queue, the first-in-first-out rule is implemented whereas,


in a priority queue, the values are removed on the basis of
priority.
The element with the highest priority is removed first.
Types of Priority Queues
1.Ascending Priority Queue: Element can be inserted arbitrarily but only smallest
element can be removed.
For example, suppose there is an array having elements 4, 2, 8 in the same order. So,
while inserting the elements, the insertion will be in the same sequence but while
deleting, the order will be 2, 4, 8.
2.Descending priority Queue: Element can be inserted arbitrarily but only the largest
element can be removed first from the given Queue.
For example, suppose there is an array having elements 4, 2, 8 in the same order. So,
while inserting the elements, the insertion will be in the same sequence but while
deleting, the order will be 8, 4, 2.
The priority queue is primarily used to implement the CPU scheduling algorithms.
Double-Ended Queue (Deque)
A deque is also a special type of queue. In this queue, the enqueue and dequeue
operations take place at both front and rear. That means, we can insert an item at both
the ends and can remove an item from both the ends. Thus, it may or may not adhere to
the FIFO order.
Input-restricted queue
In this case, the enqueue operation takes place only at the rear, but the dequeue
operation takes place at both rear and front.
Output-restricted queue
In the second case, the enqueue operation takes place at both rear and front, but the
dequeue operation takes place only at the front.

An output-restricted queue is handy when we need to insert an item at


the front of the queue.
Thank You

You might also like