• No results found

CS2320: DATA STRUCTURES & ALGORITHMS 4) Stacks & Queues

N/A
N/A
Protected

Academic year: 2020

Share "CS2320: DATA STRUCTURES & ALGORITHMS 4) Stacks & Queues"

Copied!
74
0
0

Loading.... (view fulltext now)

Full text

(1)

CS2320: DATA

STRUCTURES &

ALGORITHMS

(2)

Overview

◻ Stacks and Queues

Data structure holding a collection of objects, ordered by when they were inserted into the structure.

Stack can access newest object.

Queue (رﻮﺑﺎط )can access oldest object.

(3)

Stacks

3

A stack is a linear collection whose elements are

added and removed from the same end

Stacks are processed in a last in, first out (LIFO)

manner

◻ Usually, stacks are depicted vertically, and we

refer to the top of the stack as the end to which elements are added and removed

(4)

Stack Operations

4

push: places an element onto the top of a stack

pop: removes an element from the top of the stack

peek: which retrieves (copies) a value from the top of the stack without removing it

isempty: an operation to determine whether or not the stack is empty

(5)

The Stack Interface

(6)

The Stack Interface

Iast-in, first-out or LIFO policy

Last item pushed on the stack is next item popped off the stack.

Example:

■ A stack of plates.

(7)

The Stack Interface

(8)

Push

8

Push means place a new data element at the top of the stack

17 5 11

(9)

Push (cont.)

9

Push means place a new data element at the top of the stack

17 5 11 3

(10)

Push (cont.)

10

Push means place a new data element at the top of the stack

17 5 11 3

(11)

Push (cont.)

11

Push means place a new data element at the top of the stack

17 5 11 3

(12)

Pop

12

Pop means take a data element off the top of the stack

17 5 11 3

(13)

Pop (cont.)

13

Pop means take a data element off the top of the stack

17 5 11 3

(14)

Pop (cont.)

14

Pop means take a data element off the top of the stack

17 5 11 3

(15)

Pop (cont.)

15

Pop means take a data element off the top of the stack

17 5 11

(16)

Peek

16

Peek means retrieve the top of the stack without removing it

17 5 11 3

(17)

Peek (cont.)

17

Peek means retrieve the top of the stack without removing it 17 5 11 3 3

(18)

Peek (cont.)

18

Peek means retrieve the top of the stack without removing it 17 5 11 3 3

(19)

Linked-List Stack

19

◻ Stacks can be implemented with a linked list ◻ The front node is the top of the stack

(20)

Linked-List Stack (cont.)

20

top

To pop, we remove the node at the front of the linked list, and return the element to the client…

(21)

Linked-List Stack (cont.)

21

top

To pop, we remove the node at the front of the linked list, and return the element to the client…

(22)

Linked-List Stack (cont.)

22

top

To push, we place the new element in a node and insert it at the front of the linked list…

(23)

The Program (Call) Stack

◻ When a method is called

Runtime environment creates activation record Shows method's state during execution

◻ Activation record pushed onto the program stack (Java stack)

Top of stack belongs to currently executing method Next method down is the one that called current method

(24)

The Program Stack

The program stack at 3 points in time; (a) when main begins execution; (b) when methodA begins execution, (c) when methodB begins execution.

(25)

Evaluating Postfix Expressions

25

◻ Before looking further at the implementation of a stack, let's first see how one might be used

◻ Arithmetic operations are traditionally written in

infix notation, meaning that the operator is placed

between its operands in the form

<operand> <operator> <operand>

◻ When evaluating infix expressions, we rely on

precedence rules to determine the order of operator evaluation

In a postfix expression, the operator comes after its

two operands

(26)

Evaluating Postfix Expressions

26

◻ The process of evaluating a postfix expression can

be stated simply:

scan from left to right,

apply each operation to the two previous operands immediately preceding it and

replace the operator with the result

◻ Consider the infix expression: 4 + 5 * 2

(27)

Evaluating Postfix Expressions

27

◻ Consider the design of a program that can compute

the result of a postfix expression

◻ The evaluation rule relies on being able to retrieve

the previous two operands whenever we encounter an operator

◻ A large postfix expression will have many operators and operands to manage

◻ A stack is the perfect collection to use in this

(28)

Evaluating Postfix Expressions

28

◻ Solution algorithm:

scan the expression from left to right, identifying each token as an operator or operand

if the scanned token is an operand, push it onto the stack if the scanned token is an operator

■ pop the top two elements off the stack, ■ apply the operation to them, and

■ push the result onto the stack

◻ If we reach the end of the expression the remaining

element on the stack is the result of the expression (otherwise the expression was not well formed)

(29)

Using a Stack to Evaluate a Postfix

Expression

29

Given the expression: 7 4 -3 * 1 5 + / *

7 top 4 -3 * 1 5 + / -12 6 -2 -14 *

(30)

Infix-to-Postfix Algorithm

Symbol in

Infix Action

Operand Append to end of output expression Operator ^ Push ^ onto stack

Operator +,-, *, or /

Pop operators from stack, append to output expression until stack empty or top has

lower precedence than new operator. Then push new operator onto stack

Open

parenthesis

Push ( onto stack Close

parenthesis

Pop operators from stack, append to output expression until we pop an open

parenthesis. Discard both parentheses.

(31)

Transforming Infix to Postfix

Steps to convert the infix expression

a / b * ( c + ( d – e ) ) to postfix form.

(32)

Evaluating Postfix Expression

Fig. 21-10 The stack during the evaluation of the postfix expression a b / when a is 2 and b is 4

(33)

Evaluating Postfix Expression

Fig. 21-11 The stack during the evaluation of the postfix expression a b + c / when a is 2, b is 4 and c is 3

(34)

Evaluating Infix Expressions

Two stacks during evaluation of a + b * c when a = 2, b = 3, c = 4; (a) after reaching end of expression;

(b) while performing multiplication; (c) while performing the addition

(35)

Performance and Limitations

◻ Performance

Let n be the number of elements in the stack The space used is O(n)

Each operation runs in time O(1)

◻ Limitations

The maximum size of the stack must be defined a priori and cannot be changed

Trying to push a new element into a full stack causes an implementation-specific exception

Stacks 35

(36)

QUEUES

36

Definition: A sequence of elements of the same type. The first stored element is first accessible.

The structure is known also under the name FIFO - first in first out

(37)

Basic operations

37

EnQueue

: store a data item at

the end of the queue

DeQueue

: retrieve a data item

(38)

The Queue Interface

Queue

Very similar to a stack.

Items are inserted in one end (the back) and removed from the other end (the front).

first-in, first-out, or FIFO

(39)

The Queue Interface

(40)

Array Implementation of a Queue

40

◻ Similar to the linked-list queue, there are two data

members called front and back, but they are indexes into an Array instead of pointers

◻ When enqueuing, the back index is incremented,

(41)

Enqueue / Dequeue

41

0 1 2 3 4 5 6 7 front back

(42)

Enqueue / Dequeue (cont.)

42

0 1 2 3 4 5 6 7 front back

(43)

Enqueue / Dequeue (cont.)

43

0 1 2 3 4 5 6 7 front back

(44)

Enqueue / Dequeue (cont.)

44

0 1 2 3 4 5 6 7 front back

(45)

Enqueue / Dequeue (cont.)

45

0 1 2 3 4 5 6 7 front back

(46)

Enqueue / Dequeue (cont.)

46

0 1 2 3 4 5 6 7 front back

(47)

Enqueue / Dequeue (cont.)

47

0 1 2 3 4 5 6 7 front back

(48)

Enqueue / Dequeue (cont.)

48

0 1 2 3 4 5 6 7 front back

(49)

Enqueue / Dequeue (cont.)

49

0 1 2 3 4 5 6 7

front back

(50)

50

0 1 2 3 4 5 6 7

front back

DEQUEUE

(51)

51

0 1 2 3 4 5 6 7

front back

DEQUEUE

(52)

52

0 1 2 3 4 5 6 7

front back

DEQUEUE

(53)

53

0 1 2 3 4 5 6 7

front back

DEQUEUE

(54)

54

0 1 2 3 4 5 6 7

front back

ENQUEUE

(55)

55

0 1 2 3 4 5 6 7

front back

ENQUEUE

(56)

56

0 1 2 3 4 5 6 7

front back

DEQUEUE

(57)

57

0 1 2 3 4 5 6 7

front back

DEQUEUE

(58)

58

0 1 2 3 4 5 6 7

front back

DEQUEUE

(59)

59

0 1 2 3 4 5 6 7

front back

ENQUEUE

(60)

60

0 1 2 3 4 5 6 7

front back

ENQUEUE

?

(61)

61

0 1 2 3 4 5 6 7

front back

ENQUEUE We could double the size of the array

here.

(62)

62

0 1 2 3 4 5 6 7

front back

ENQUEUE

But if we keep doing this, we may have a million elements in the Array, but only a few at the end are used!

(63)

63

0 1 2 3 4 5 6 7

front back

ENQUEUE

We handle this problem by having the back wrap around to the beginning of the array.

(64)

64

0 1 2 3 4 5 6 7

front back

ENQUEUE

(65)

65

0 1 2 3 4 5 6 7

front back

The front also wraps to the beginning when it reaches the end of the array

(66)

How Do We Know When the Array is

Full?

66

◻ We may still need to double the capacity of the

array if it gets filled

◻ An array will be full when

back + 1 == front OR

(67)

A Full Array

67

0 1 2 3 4 5 6 7

front back

(68)

A Full Array

68

0 1 2 3 4 5 6 7

front back

If the next operation is ENQUEUE, the array capacity will need to be doubled

(69)

Implementing Queues with Links

69

◻ Because a queue is a linear collection, we can

implement a queue as a linked list of LinearNode

objects, as we did with stacks

◻ One important difference, however, is that we will

have to operate on both ends of the list

◻ So we'll add an additional reference variable (rear)

(70)

Dequeue Operation

70

front back

(71)

Dequeue Operation (cont.)

71

front back

(72)

Enqueue Operation

72

front back

(73)

Enqueue Operation (cont.)

73

front back

(74)

Summary

◻ Stacks and queues are collections of objects.

Stack follows a last-in, first-out policy.

■ Objects are pushed onto and popped off the top.

Queue follows a first-in, first-out policy.

■ Objects are added to the back and removed from the front.

Figure

Fig. 21-10 The stack during the evaluation of the postfix  expression  a b /  when  a  is 2 and  b  is 4
Fig. 21-11 The stack during the evaluation of the postfix  expression  a b + c /  when  a  is 2,   b  is 4 and  c  is 3

References

Related documents

bool pushStack (STACK* stack, void* dataInPtr) { STACK_NODE* newPtr; newPtr = (STACK_NODE*)malloc(sizeof(STACK_NODE)); if (!newPtr) return false; newPtr-&gt;dataPtr =

Pop Stack recycled Before red data next dltPtr After data next dltPtr stack stack 3 count top blue data next green 2 count top blue data next green..

Otávio Braga.. Infix to Postfix Conversion. • We use

SELReturn – Pop an element from the stack as pointed by *item and the element deletes from stack on decrement in the item pointer address... isSNotEmpty– Return true or false

q .) Hence, xp [ p ] xqp and the values of all the objects, which are not local to q , are the same in xp and xqp. By Lemma 5, xp and xqp are compatible. Since xqp is an exten- sion

Step 3 − if it is an operator pull operand from stack and perform operation Step 4 − store the output of step 3, back to stack. Step 5 − scan the expression until all operands

• When parsing expressions written in infix notation, you need parentheses and precedence rules to remove ambiguity1. • Syntax: operand1 operator

information to enable efficient computation over that information A data structure supports certain operations, each with a:. – Meaning: what does the