stacks chapter 8. objectives in this chapter, you will: learn about stacks examine various stack...

74
Stacks Chapter 8

Upload: dora-crawford

Post on 05-Jan-2016

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Stacks

Chapter 8

Page 2: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array
Page 3: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

3

Objectives

In this chapter, you will:• Learn about stacks• Examine various stack operations• Learn how to implement a stack as an array• Learn how to implement a stack as a linked list• Discover stack applications• Learn how to use a stack to remove recursion

C++ Programming: Program Design Including Data Structures, Fifth

Edition

Page 4: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Stacks• Stack: list of homogenous elements

– Addition and deletion occur only at one end, called the top of the stack

– Example: in a cafeteria, the second tray can be removed only if first tray has been removed

– Last in first out (LIFO) data structure

• Operations: – Push: to add an element onto the stack – Pop: to remove an element from the stack

Page 5: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Stacks

• Linear list.• One end is called top.• Other end is called bottom.• Additions to and removals from the top end only.

top

bottom

Page 6: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Various types of stacks

Page 7: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Stack Of Cups

• Add a cup to the stack.

bottom

top

C

A

B

D

E

F

• Remove a cup from new stack.• A stack is a LIFO list.

bottom

top

C

A

B

D

E

Page 8: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

The Abstract Class stack

template<class T>class stack { public: virtual ~stack() {} virtual bool empty() const = 0; virtual int size() const = 0; virtual T& top() = 0; virtual void pop() = 0; virtual void push(const T& theElement) = 0;};

Page 9: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Derive From A Linear List Class

• Class arrayList• Class chain

Page 10: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

– stack top is either left end or right end of linear list– empty() => arrayList::empty()– size() => arrayList::size()– top() => get(0) or get(size() - 1)

0 1 2 3 4 5 6

a b c d e

Derive From arrayList

Page 11: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Derive From arrayList

• when top is left end of linear list–push(theElement) => insert(0, theElement)–pop() => erase(0)–use left end of list as top of stack

0 1 2 3 4 5 6

a b c d e

Page 12: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Derive From arrayList

–when top is right end of linear list• push(theElement) => insert(size(), theElement)• pop() => erase(size()-1)

–use right end of list as top of stack

0 1 2 3 4 5 6

a b c d e

Page 13: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Derive From Chain

–stack top is either left end or right end of linear list

–empty() => chain::empty()–size() => chain::size()

a b c d e

NULL

firstNode

Page 14: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Derive From Chain

a b c d e

NULL

firstNode

– when top is left end of linear list top() => get(0)push(theElement) => insert(0, theElement)pop() => erase(0)

Page 15: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Derive From Chain

a b c d enull

firstNode

– when top is right end of linear list• top() => get(size() - 1)• push(theElement) => insert(size(), theElement)• pop() => erase(size()-1)

•use left end of list as top of stack

Page 16: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Derive From arrayList

template<class T>class derivedArrayStack : private arrayList<T>, public stack<T>{ public: // code for stack methods comes here };

Page 17: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Constructor

derivedArrayStack(int initialCapacity = 10) : arrayList<T> (initialCapacity) {}

Page 18: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

empty() And size()

bool empty() const{return arrayList<T>::empty();}

int size() const{return arrayList<T>::size();}

0 1 2 3 4 5 6

a b c d e

Page 19: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

top()

T& top(){ if (arrayList<T>::empty()) throw stackEmpty(); return get(arrayList<T>::size() - 1);}

0 1 2 3 4 5 6

a b c d e

Page 20: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

push(theElement)

void push(const T& theElement){insert(arrayList<T>::size(), theElement);}

0 1 2 3 4 5 6

a b c d e

Page 21: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

pop()

void pop(){ if (arrayList<T>::empty()) throw stackEmpty(); erase(arrayList<T>::size() - 1);}

0 1 2 3 4 5 6

a b c d e

Page 22: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

template<class T>

class derivedArrayStack : private arrayList<T>,public stack<T>

{

public:

derivedArrayStack(int initialCapacity = 10) :arrayList<T>(initialCapacity) {}

bool empty() const {return arrayList<T>::empty();}

int size() const {return arrayList<T>::size();}

T& top() { if (arrayList<T>::empty())

throw stackEmpty();

return get(arrayList<T>::size() - 1); }

void pop() { if (arrayList<T>::empty())

throw stackEmpty();

erase(arrayList<T>::size() - 1); }

void push(const T& theElement)

{insert(arrayList<T>::size(), theElement);}

};

Page 23: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Evaluation

• Merits of deriving from arrayList– Code for derived class is quite simple and easy to

develop.– Code is expected to require little debugging.– Code for other stack implementations such as a

linked implementation are easily obtained.• Just replace private arrayList<T> with private chain<T>• For efficiency reasons we must also make changes to use

the left end of the list as the stack top rather than the right end.

Page 24: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Code From Scratch

• Use a 1D array stack whose data type is T.– same as using array element in arrayList

• Use an int variable stackTop.– Stack elements are in stack[0:stackTop].– Top element is in stack[stackTop].– Bottom element is in stack[0].– Stack is empty iff stackTop = -1.– Number of elements in stack is stackTop + 1.

Page 25: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Code From Scratchtemplate class<T>class arrayStack : public stack<T>{ public: // public methods come here private: int stackTop; // current top of stack int arrayLength; // stack capacity T *stack; // element array};

Page 26: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Constructor

template<class T>arrayStack<T>::arrayStack(int initialCapacity){// Constructor. if (initialCapacity < 1) {// code to throw an exception comes here } arrayLength = initialCapacity; stack = new T[arrayLength]; stackTop = -1;}

Page 27: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

push(…)

template<class T>void arrayStack<T>::push(const T& theElement){// Add theElement to stack. if (stackTop == arrayLength - 1) {// code to double capacity coms here } // add at stack top stack[++stackTop] = theElement;}

0 1 2 3 4

a b c d e

top

Page 28: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

pop()

void pop(){ if (stackTop == -1) throw stackEmpty(); stack[stackTop--].~T(); // destructor for T}

0 1 2 3 4

a b c d e

top

Page 29: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Linked Stacktemplate<class T>

class linkedStack : public stack<T>

{ public:

linkedStack(int initialCapacity = 10) {stackTop = NULL; stackSize = 0;}

~linkedStack();

bool empty() const {return stackSize == 0;}

int size() const {return stackSize;}

T& top() { if (stackSize == 0) throw stackEmpty();

return stackTop->element; }

void pop();

void push(const T& theElement);

private:

chainNode<T>* stackTop; // pointer to stack top

int stackSize; // number of elements in stack

};

Page 30: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Push()

template<class T>

void linkedStack<T>::push(const T& theElement)

{

stackTop = new chainNode<T>(theElement, stackTop);

stackSize++;

}

Page 31: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Pop()

template<class T>

void linkedStack<T>::pop()

{// Delete top element.

if (stackSize == 0)

throw stackEmpty();

chainNode<T>* nextNode = stackTop->next;

delete stackTop;

stackTop = nextNode;

stackSize--;

}

Page 32: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Implement stack

• derivedArrayStack.h• derivedLinkedStack.h• arrayStack.h• linkedStack.h

Page 33: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Stack in C++

Page 34: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Applications

Page 35: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Parentheses Matching

• (((a+b)*c+d-e)/(f+g)-(h+j)*(k-l))/(m-n)– Output pairs (u,v) such that the left parenthesis at

position u is matched with the right parenthesis at v.• (2,6) (1,13) (15,19) (21,25) (27,31) (0,32) (34,38)

• (a+b))*((c+d)– (0,4)– right parenthesis at 5 has no matching left parenthesis– (8,12)– left parenthesis at 7 has no matching right parenthesis

Page 36: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Parentheses Matching

• scan expression from left to right• when a left parenthesis is encountered, add its

position to the stack• when a right parenthesis is encountered, remove

matching position from stack

Page 37: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Example

• (((a+b)*c+d-e)/(f+g)-(h+j)*(k-l))/(m-n)

0 1 2

Page 38: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Example

• (((a+b)*c+d-e)/(f+g)-(h+j)*(k-l))/(m-n)

0 1

(2,6)

Page 39: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Example

• (((a+b)*c+d-e)/(f+g)-(h+j)*(k-l))/(m-n)

0 1

(2,6) (1,13)15

Page 40: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Example

• (((a+b)*c+d-e)/(f+g)-(h+j)*(k-l))/(m-n)

0 1

(2,6) (1,13) (15,19)21

Page 41: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Example

• (((a+b)*c+d-e)/(f+g)-(h+j)*(k-l))/(m-n)

0 1

(2,6) (1,13) (15,19) (21,25)27

Page 42: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Example

• (((a+b)*c+d-e)/(f+g)-(h+j)*(k-l))/(m-n)

0 1

(2,6) (1,13) (15,19) (21,25)(27,31) (0,32)

• and so on

Page 43: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Homework 2.1

• Write a program that look for matched pairs of parentheses and matched pairs of brackets ([]) and report a nesting problem.

• For example: in the string (a+[b*(c-d)+f]), the output should be (0,14),(3,13),(6,10).

Page 44: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Towers Of Hanoi/Brahma

A B C

1234

• 64 gold disks to be moved from tower A to tower C• each tower operates as a stack• cannot place big disk on top of a smaller one

Page 45: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Towers Of Hanoi/Brahma

• 3-disk Towers Of Hanoi/Brahma

A B C

123

Page 46: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Towers Of Hanoi/Brahma

• 3-disk Towers Of Hanoi/Brahma

A B C

12

3

Page 47: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Towers Of Hanoi/Brahma

• 3-disk Towers Of Hanoi/Brahma

A B C

1 2 3

Page 48: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Towers Of Hanoi/Brahma

• 3-disk Towers Of Hanoi/Brahma

A B C

1 23

Page 49: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Towers Of Hanoi/Brahma

• 3-disk Towers Of Hanoi/Brahma

A B C

123

Page 50: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Towers Of Hanoi/Brahma

• 3-disk Towers Of Hanoi/Brahma

A B C

123

Page 51: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Towers Of Hanoi/Brahma

• 3-disk Towers Of Hanoi/Brahma

A B C

12

3

Page 52: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Towers Of Hanoi/Brahma

• 3-disk Towers Of Hanoi/Brahma

A B C

123

• 7 disk moves

Page 53: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Recursive Solution

A B C

1

• n > 0 gold disks to be moved from A to C using B• move top n-1 disks from A to B using C

Page 54: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Recursive Solution

A B C

1

• move top disk from A to C

Page 55: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Recursive Solution

A B C

1

• move top n-1 disks from B to C using A

Page 56: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Recursive Solution

A B C

1

• moves(n) = 0 when n = 0• moves(n) = 2*moves(n-1) + 1 = 2n-1 when n > 0

Page 57: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Homework 2.2• 2.2.1: Write a recursive version of program

to solve n-disk Tower of Hanoi problem• 2.2.2: determine the maximum number of

disk you can solve using recursive and stack programs.

Page 58: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Rat In A Maze

Page 59: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Rat In A Maze

• Move order is: right, down, left, up• Block positions to avoid revisit.

Page 60: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Rat In A Maze

• Move order is: right, down, left, up• Block positions to avoid revisit.

Page 61: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Rat In A Maze

• Move backward until we reach a square from which a forward move is possible.

Page 62: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Rat In A Maze

• Move down.

Page 63: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Rat In A Maze

• Move left.

Page 64: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Rat In A Maze

• Move down.

Page 65: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Rat In A Maze

• Move backward until we reach a square from which a forward move is possible.

Page 66: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Rat In A Maze

• Move backward until we reach a square from which a forward move is possible.

• Move downward.

Page 67: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Rat In A Maze

• Move right.• Backtrack.

Page 68: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Rat In A Maze

• Move downward.

Page 69: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Rat In A Maze

• Move right.

Page 70: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Rat In A Maze

• Move one down and then right.

Page 71: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Rat In A Maze

• Move one up and then right.

Page 72: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Rat In A Maze

• Move down to exit and eat cheese.• Path from maze entry to current position operates as

a stack.

Page 73: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Homework 2.3 (bonus)

• Implement the Rat in a maze

Page 74: Stacks Chapter 8. Objectives In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array

Homework 2• Due date: Feb 24