36
Ceng-112 Data Structures I Turgut Kalfaoglu 1 Chapter 3 Stacks

Ceng-112 Data Structures ITurgut Kalfaoglu 1 Chapter 3 Stacks

Embed Size (px)

Citation preview

Ceng-112 Data Structures I Turgut Kalfaoglu 1

Chapter 3

Stacks

Ceng-112 Data Structures I Turgut Kalfaoglu 2

Figure 3-2

Linear Lists

Operations are;1. Insertion2. Deletion3. Retrieval4. Traversal (exception for restristed lists).

Ceng-112 Data Structures I Turgut Kalfaoglu 3

Figure 4-1

Stacks

A stack is a Last in First out (LIFO) data structure in which all insertions and deletions are restricted to one end called top.

Ceng-112 Data Structures I Turgut Kalfaoglu 4

Figure 4-2

Stack Basic Operations

Overflow?

Ceng-112 Data Structures I Turgut Kalfaoglu 5

Figure 4-3

Stack Basic Operations

Underflow?

Ceng-112 Data Structures I Turgut Kalfaoglu 6

Figure 4-4

Stack Basic Operations

Ceng-112 Data Structures I Turgut Kalfaoglu 7

Figure 4-5

Ceng-112 Data Structures I Turgut Kalfaoglu 8

Figure 4-6

Stack Data Structure

Ceng-112 Data Structures I Turgut Kalfaoglu 9

Figure 4-7

Stack Data Structure

Ceng-112 Data Structures I Turgut Kalfaoglu 10

Figure 4-8, Part I

Stack Operations

Ceng-112 Data Structures I Turgut Kalfaoglu 11

Figure 4-8, Part II

Stack Operations

Ceng-112 Data Structures I Turgut Kalfaoglu 12

Create Stack

algorithm createStackAllocates memory for a stack head node from dynamic memory and returns its

address to the caller.Pre NothingPost Head node allocated or error returnedReturn pointer to head node or null pointer if no memory1. if (memory available)

1. allocate (stackPtr)2. stackPtrcount = 03. stackPtrtop = null

2. else1. stackPtr = null

3. return stackPtrend createStack

Ceng-112 Data Structures I Turgut Kalfaoglu 13

Figure 4-9

Push Stack

Ceng-112 Data Structures I Turgut Kalfaoglu 14

Push Stackalgorithm pushStack(val stack <head pointer>,

val data <data type>)

Insert (push) one item into the stack.

Pre stack is a pointer to the stack head structure.

data contains data to be pushed into stack.

Post data have been pushed in stack.

1. if (stack full)1. success = false

2. else1. allocate (newPtr)

2. newPtrdata= data

3. newPtrnext= stacktop

4. stacktop=newPtr

5. stackcount = stackcount+1

6. Success=true

3. return success

end pushStack

Ceng-112 Data Structures I Turgut Kalfaoglu 15

Figure 4-10

Pop Stack

Ceng-112 Data Structures I Turgut Kalfaoglu 16

Pop Stackalgorithm popStack(val stack <head pointer>,

val dataOut <data type>)

Pops the item on the top of the stack and returns it to the user.

Pre stack is a pointer to the stack head structure.

dataOut is a reference variable to receive the data.

Post data have been returned to the calling algorithm.

1. if (stack empty)1. success = false

2. else1. dltPtr= stacktop

2. dataOut = stacktopdata

3. stacktop = stacktopnext

4. stackcount = stackcount – 1

5. recycle(dltPtr)

6. success=true

3. return success

end popStack

Ceng-112 Data Structures I Turgut Kalfaoglu 17

Destroy Stack

algorithm destroyStack(val stack <head pointer>)

This algorithm releases all nodes back to the dynamic memory.

Pre stack is a pointer to the stack head structure.

Post stack empty and all nodes recycled

1. if (stack not empty)

1. loop1. temp = stacktop

2. stacktop = stacktoplink

3. recycled(temp)

2. recycled (stack)

3. return null pointer

end destroyStack

Ceng-112 Data Structures I Turgut Kalfaoglu 18

Stack Applications

We can be classified stack applications into four categories:

1. Reversing data.

2. Parsing data.

3. Postponing data usage.

4. Backtracking steps.

Ceng-112 Data Structures I Turgut Kalfaoglu 19

Stack ApplicationsReversing Data

1 2 3 4 5 5 4 3 2 1

12345Push Pop

Ceng-112 Data Structures I Turgut Kalfaoglu 20

Figure 4-11

Stack ApplicationsParsing Data

Breaks the data into independent pieces for further processing.

source program Compiler machine language

Ceng-112 Data Structures I Turgut Kalfaoglu 21

Stack ApplicationsParsing Data

3.Pop )2.Push (1.Push (

3.Pop )2.Pop )1.Push (

Ceng-112 Data Structures I Turgut Kalfaoglu 22

Stack ApplicationsPosponement

Arithmetic expression can be represent three different formats:

1. Prefix + a b

2. Infix a + b

3. Postfix a b +

Arithmetic precedence;

multiply and divide

before

add and subtract!

Ceng-112 Data Structures I Turgut Kalfaoglu 23

Stack ApplicationsPosponement

A + B * C

Place the paranthesis

( A + ( B * C))

Replace it in postfix format

(A(BC*)+)

Remove all paranthesis

ABC*+

Implementation by computer is too hard!

Ceng-112 Data Structures I Turgut Kalfaoglu 24

Figure 4-12, Part I

Stack ApplicationsPosponement

* and / operators have higher priority than the operator at the top of the stack.

Ceng-112 Data Structures I Turgut Kalfaoglu 25

Figure 4-12, Part II

Stack ApplicationsPosponement

Ceng-112 Data Structures I Turgut Kalfaoglu 26

Figure 4-13

Stack ApplicationsEvaluation of Postfix Expression

Ceng-112 Data Structures I Turgut Kalfaoglu 27

Excercise

• Change the following infix expression to postfix expression using the algoritmic method (a stack).

a+b*c-d

Solution: abc*+d-

Ceng-112 Data Structures I Turgut Kalfaoglu 28

• Infix String : a+b*c-d

• The first character scanned is 'a'. 'a' is added to the Postfix string. The next character scanned is '+'. It being an operator, it is pushed to the stack.

• Next character scanned is 'b' which will be placed in the Postfix string. Next character is '*' which is an operator. Now, the top element of the stack is '+' which has lower precedence than '*', so '*' will be pushed to the stack.

• The next character is 'c' which is placed in the Postfix string. Next character scanned is '-'. The topmost character in the stack is '*' which has a higher precedence than '-'. Thus '*' will be popped out from the stack and added to the Postfix string. Even now the stack is not empty. Now the topmost element of the stack is '+' which has equal priority to '-'. So pop the '+' from the stack and add it to the Postfix string. The '-' will be pushed to the stack.

• Next character is 'd' which is added to Postfix string. Now all characters have been scanned so we must pop the remaining elements from the stack and add it to the Postfix string. At this stage we have only a '-' in the stack. It is popped out and added to the Postfix string. So, after all characters are scanned, this is how the stack and Postfix string will be :

• End result :

• * Infix String : a+b*c-d

• * Postfix String : abc*+d-

Ceng-112 Data Structures I Turgut Kalfaoglu 29

Figure 4-14

Stack ApplicationsBackTracking

Ceng-112 Data Structures I Turgut Kalfaoglu 30

Figure 4-15

Ceng-112 Data Structures I Turgut Kalfaoglu 31

Figure 4-16

Stack ApplicationsBackTracking

Ceng-112 Data Structures I Turgut Kalfaoglu 32

Figure 4-17

Ceng-112 Data Structures I Turgut Kalfaoglu 33

Figure 4-20

Array Implementation of Stacks

stackstackAry <pointer to array of dataType>count <integer>stackMax <integer>top <index>

end stack

Ceng-112 Data Structures I Turgut Kalfaoglu 34

Hw-5

Write a program that accepts parentheses and brackets characters, one per line on standard input. Use a stack to determine whether pairs of characters are matching or not. Therefore complete the body of below function.

bool balanced(const char p[ ], size_t n) // Precondition: p[0]...p[n-1] contains n characters, each of which // is '(', ')', '{' or '}'. // Postcondition: The function returns true if the characters form a // sequence of correctly balanced parentheses with each '(' matching // a ')' and each '{' matching a '}'. Note that a sequence such as // ( { ) } is NOT balanced because when we draw lines to match the // parentheses to their partners, the lines cross each other. On the // other hand, ( { } ) amd { ( ) } are both balanced.

Load your HW-5 to FTP site until 13 Apr. 07 at 09:00 am.

Ceng-112 Data Structures I Turgut Kalfaoglu 35

Figure 4-21

Exercises

Projects – 23 page 211, 212

Ceng-112 Data Structures I Turgut Kalfaoglu 36

Figure 4-22

Exercises

Projects – 24 page 212