Prepared By:Mitali Sonar -...

37
Prepared By:Mitali Sonar

Transcript of Prepared By:Mitali Sonar -...

Page 1: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

Prepared By:Mitali Sonar

Page 2: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

We are allowed to delete an element from

and insert an element to any position in

list.

A subclass of a list that permits insertion

and deletion of an element to occur at

only one end is called a stack.

Page 3: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

Ex:= shunting of trains in a railway yard

IN OUT

Suppose There is a railway

yard with a single track.

Trains enter into railway

yard for placement When

they exit it just in opposite

order in which they entered.

The Last train comes out

first.

Ex:- Plates on a Tray

Ex:- Racks of Books

Page 4: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

The stack is a data structure which works on a

principal of

LAST IN FIRST OUT(LIFO)

So we can remove elements in opposite order

from which they are added to stack such a list is

referred as LIFO.

PUSH

POP

TOP OF THE STACK

Page 5: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

First we have to allocate a memory block to accommodate stack then from the first location of memory, items of the stack can be stored in sequential form.

:

:

ITEM I

:

:

ITEM 2

ITEM 1

TOP

l

l + 1

l + i -1

u

Size = l + u -1

l and u denotes lower and

upper bounds of array.

Page 6: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

LINKED LIST REPRESENTATION :

Sometime size of a stack may vary during the

execution of a program At that time Link list is useful.

In link list there are two fields

DATA field for ITEMS

LINK field points to the next item

Here top of stack is represented by the first item in the list

Page 7: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

What is major advantage of link list

structure over array implementation of

stack?

With array implementation we have to

preallocate the maximum stack size in link list

there is no need for stack size

With array we must check for stack overflow but

with link list we don’t need this

LL allows sequential access. array allows

random access.

Insertion/ Deletion of values in arrays are very

expensive compared to link list and requires

memory reallocation.

Page 8: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

Insertion operation is referred as “PUSH”

Deletion operation is referred as “POP”

These operations are performed at one end of stack & often known as top of stack.

A pointer TOP keeps track of top element in the stack.

When stack is empty TOP has value zero.

Stack has one element then top has value 1 and so on.

Each time when a new element is added in to stack top pointer is incremented by 1.The pointer is decremented by 1 each time deletion is made from stack.

Page 9: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

TOP

A TOP A

TOPB

A

TOP

B

C

INSERTION INTO STACK

A

B

C TOP

A

TOPB

A TOP

DELETIONS FROM THE STACK

TOP

Page 10: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

PUSH(S, TOP, X):-

S:- stack with N elements

TOP:- pointer denoting top element in the stack.

X:- is the element inserted top of the stack

[1] [Check stack overflow]

if TOP>=N then

Write(“stack is overflow”)

Return

[2] [Increment TOP]

TOP TOP + 1

[3] [insert an element]

S[TOP] X

[4] [finished]

return

Page 11: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

POP(S,TOP):-

S:- Stack S with N element

TOP –Denotes TOP element of the stack

1.[check for underflow]

If TOP=0

Then write(“stack underflow”)

exit

2.[Decrement pointer]

ITEM=A[TOP]

TOP TOP-1

3.[Return to top element of stack]

Return

Page 12: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

APPLICATION OF STACK:-

Stacks are used where last in first out

principal is required like reversing string,

checking whether the arithmetic expression

is properly parenthesized, Evaluation of

postfix expression, implementing recursion

And function calls

Recursion

Polish notations

Stack machines

Evaluation of arithmetic Expression

Tower of Hanoi Problem

Page 13: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

RECURSION :-

A procedure that contains procedure call to

second procedure which eventually call first

procedure OR

A procedure that contains call to itself is

known as recursion

There are two important conditions that

must be satisfied

1) Each time a procedure call itself it must be

nearer in some sense to solution

2) There must be a condition for stopping the

recursion process.

Page 14: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

In each recursive call the current value of

parameter, local variables and return address

from the call are required to be stored. For

storing all these values stack is maintained.

1st CALL

1st CALL

2nd CALL

1st CALL

2nd CALL

3RD CALL

Memory Allocation

Page 15: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

FACTORIAL(N)= 1 IF n=0

n * factorial(n-1) otherwise

The factorial of a given positive number n is

defined as the product of all number from 1 to n

denoted n!.

N!= 1* 2* 3* 4* …………………………..*(n-1)*n

ALGORITHM :-FACTORIAL – Given an integer N

this algorithm computes N!

N- integer number, A – stack

RET-ADDR-Contains current return address

TEMP_REC- Contains two var (PARAM & ADDRESS)

PARAM is assigned a value of N

ADDRESS is assigned value of RET_ADDR.

Page 16: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

1.[Save N & return address]

call push(A, TOP, TEMP_REC)

2.[Is base criteria found?]

if N=0 then FACTORIAL 1

go to step-4

else PARAM N-1, ADDRESS Step 3

Goto step-1

3.[Calculate N!]

FACTORIAL N* FACTORIAL

4.[Restore previous N & return address]

TEMP_REC POP(A,TOP)

goto ADDRESS

Page 17: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

2

Main

address

Step 1: PUSH(A , 0 (2,main address))

Step 2: N != 0

PARAM 1, ADDR step 3

TOP

Step 1: PUSH(A , 1 (1,step 3))

Step 2: N != 0

PARAM 0, ADDR step 3

2 1

Main

address

Step 3

TOP

Step 1: PUSH(A , 2 (0,step 3))

Step 2: N = 0

FACTORIAL 1

2 1 0

Main

address

Step 3 Step 3

TOP

Page 18: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

Step 3: FACTORIAL 1 * 1

Step 4: POP(A,2)

go to step 3

2

Main

address

TOP

Step 3: FACTORIAL 2 * 1

Step 4: POP(A,1)

go to main address

TOP

Step 4: POP (A,3) Go to step 32 1

Main

address

Step 3

TOP

Page 19: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

Polish Notation

INFIX – Operator comes between operand

operand operator operand

a + b, a * b ,a / b

PREFIX- operator comes before operand

operator operand operand

+ab, *ab, /ab

POSTFIX – operator follows operand.

operand operand operator

ab+, ab*, ab/

Page 20: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

INFIX POSTFIX PREFIX

A + B AB+ +AB

A+B+C AB+C+ ++ABC

A+(B+C) ABC++ +A+BC

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

A*(B+C) ABC+* *A+BC

A*B*C AB*C* **ABC

Page 21: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

Convert following expression into prefix

P + (q + r) * s

P + (+ qr) * s

P + * + qrs

+ p * + qrs

A * (M + C ) + (M/D) * Z + Y * U

Page 22: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

Symbol Precedence Rank

+, - 1 -1

*, / 2 -1

a,b,c 3 1

# 0 -----------

Page 23: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

Convert infix to postfix with following arithmetic

expression using stack

A + B * C – D / E * H

CHAR SCANNED CONTENT OF STACK POSTFIX

#

A # A

+ # + A

B # + B A

* # + * A B

C # + * C A B

- # - A B C * +

D # - D A B C * +

/ # - / A B C * + D

E # - / E A B C * + D

* # - * A B C * + D E /

H #- * H A B C * + D E /

# A B C * + D E / H* -

Page 24: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

A * B + C / DCHAR SCANNED CONTENT OF STACK POSTFIX

#

A #A

* # * A

B # * B A

+ # + A B *

C # + C A B *

/ # + / A B * C

D # + / D A B * C

# A B * C D / +

Page 25: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

A B * C D / + IF A =2, B=3, C=25,D=5

CHAR SCANNED CONTENT OF STACK

#

2 #2

3 # 2, 3

* # 6

25 # 6, 25

5 # 6 ,25, 5

/ # 6,5

+ #11

Page 26: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

Evaluate postfix expression AB+ C *D IF A=2,

B=3,C=4,D=5

A + B – C * D / E + F $ G / ( I + J ) IF

A=1,B=2,C=3,D=4,E=6,F=6,G=1,I=3 & J=3

( A + B * C / D – E + F / G / ( H + I ) )

( A + B ) * C + D / ( B + A * C ) + D

( A - ( B / C ) ^ D ) / ( E – F )

5 4 6 + * 4 9 3 / + *

7 5 2 + * 4 1 1 + /

Page 27: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

ALGORITHM :-

INFIX –rep. infix exp.

S – rep. stack

NEXTCHAR- function which reads next char of

an input string

RANK- rank of each head of postfix string

TEMP –contains unstacked element

1.[initalize stack]

TOP 1, S[TOP] #

2.[INTIALIZE OUTPUT STRING & RANK COUNT]

POLISH “,

RANK 0

3.[GET FIRST INPUT SYMBOL]

NEXT NEXTCHAR(INFIX)

Page 28: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

4.[TRANSLATE INFIX EXP.]

Repeat through step-6 while NEXT != #

5.[Remove symbol with greater or equal

symbol precedence from stack]

repeat while f(NEXT)<= f(S[TOP])

TEMPPOP(S,TOP)

POLISH POLISH ° TEMP

RANK RANK + r(TEMP)

IF RANK<1

Then write(“invalid”)

exit

6.[push the current symbol onto stackand

obtain next input symbol]

Page 29: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

call PUSH(S,TOP,NEXTCHAR)

NEXT NEXTCHAR(INFIX)

7.[Remove remaining elements from stack]

Repeat while S[TOP] != #

TEMP POP(S,TOP)

POLISH POLISH ° TEMP

RANK RANK + r(TEMP)

IF RANK<1

Then write(“invalid”)

exit

8.[Is the exp. Is valid?]

if RANK= 1

then write (“valid”)

else write(“invalid”)

exit

Page 30: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

TOWER OF HANOI

Suppose there are 3 pillars A,B & C.There are N

discs of decreasing size.Intially all the discs are

on one pillar in their decreasing order of size.

The problem is to move all the discs from one

pillar to another.A B C A B C

•Only one disc may be moved at a time

•A disc may be moved from one pillar to another pillar

•At no time a larger disc may be placed on smaller

one.

Page 31: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

A B C A B C

A B C A B C

1 2

3 4

Page 32: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

A B C

5

A B C

6

A B C

7

A B C

8

Page 33: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

The solution is

Move N disc from A to C means

Move (N-1) discs from A to B

Move Nth Disc from A to C

Move all (N-1) discs from B to C

Page 34: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

HANOI-

N-Number of Discs

SN_VALUE – Starting disk

IN_VALUE – Intermediate Pillar

DN_VALUE- Destination Pillar

1.[save parameters and return address]

PUSH(S,TOP,TEMP_REC)

TOP TOP + 1

N[TOP] N_VALUE

SN[TOP] SN_VALUE

IN[TOP] IN_VALUE

DN[TOP] DN_VALUE

RET_ADDR[TOP] ADDRESS

Page 35: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

2.[Test for stopping value of N,if not reached

move N -1 discs from starting needle to

intermediate needle ]

if N[TOP] = 0

Then go to RET_ADDR[TOP]

else

N_VALUEN[TOP] – 1

SN_VALUESN[TOP]

IN_VALUEIN[TOP]

DN_VALUEDN[TOP]

ADDRESS step-3]

goto step 1

Page 36: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

[move nth disc from start to destination

needle, move n-1 from intermediate to

destination]

TEMP_REC POP(ST,TOP)

N_VALUE N[TOP]-1

SN_VALUEIN[TOP]

IN_VALUESN[TOP]

DN_VALUEDN[TOP]

ADDRESS Step -1

4.[return to previous level]

TEMP_REC POP(ST,TOP)

Go to RET_ADDR[TOP]

Page 37: Prepared By:Mitali Sonar - svbitce2010.weebly.comsvbitce2010.weebly.com/uploads/8/4/4/5/8445046/linear_data... · checking whether the arithmetic expression is properly parenthesized,

One of the main problem with using machine which

have a very limited no of registers is how to handle

the store of intermediate result.To solve this problem

stack machine is used

Stack machine is used at H/W level

Ex:- PDP11, Burroughs 5000.

Both machines are particularly well suited for the

stacking of local variables & parameters that arise in

procedure calls of block nested languages.

Instructions available for the machine

PUSH<name>= loads an operand from memory to

stack

POP<name>= top of the stack is removed & store into

memory

ADD, SUB, DIV, MUL :-arithmetic operations