Sample PMT online… Browse 1120/sumII05/PMT/2004_1/ 1120/sumII05/PMT/2004_1

16
• Sample PMT online… • Browse http://www.cs.wmich.edu/gupta /teaching/cs1120/sumII05/PMT/ 2004_1/

Transcript of Sample PMT online… Browse 1120/sumII05/PMT/2004_1/ 1120/sumII05/PMT/2004_1

Page 1: Sample PMT online… Browse  1120/sumII05/PMT/2004_1/  1120/sumII05/PMT/2004_1

• Sample PMT online…

• Browse http://www.cs.wmich.edu/gupta/teaching/cs1120/sumII05/PMT/2004_1/

Page 2: Sample PMT online… Browse  1120/sumII05/PMT/2004_1/  1120/sumII05/PMT/2004_1

Stacks and Queues

Page 3: Sample PMT online… Browse  1120/sumII05/PMT/2004_1/  1120/sumII05/PMT/2004_1

Checking for Balanced Braces

Balanced: abc{dc{dc}pa}{csd+}Unbalanced: {asdf{df@#}}{dfa{df}

Page 4: Sample PMT online… Browse  1120/sumII05/PMT/2004_1/  1120/sumII05/PMT/2004_1

Pseudocode

while (not end of line) { if (ch is ‘{‘) add ch to Stack else if (ch is ‘}’){ if (Stack is empty) return unbalanced; remove from Stack }}if (Stack is empty) return balanced;return unbalanced;

Page 5: Sample PMT online… Browse  1120/sumII05/PMT/2004_1/  1120/sumII05/PMT/2004_1

Definition of Stack

• ADT level– A stack is an

ordered group of homogeneous items, in which the removal and addition of stack items can take place only at the top of the stack

• A stack is a LIFO: last in, first out

Page 6: Sample PMT online… Browse  1120/sumII05/PMT/2004_1/  1120/sumII05/PMT/2004_1

Stack ADT

6

aStack.createStack();while (not end of line) { if (ch is ‘{‘) aStack.push(ch); else if (ch is ‘}’){ if (!aStack.isEmpty()){ aStack.pop();} else{ aStack.destroyStack(); return unbalanced;} } //endelseif} //endwhileif (aStack.isEmpty()) return balanced;aStack.destroyStack();return unbalanced;

Using ADT stack for brace matching

Page 7: Sample PMT online… Browse  1120/sumII05/PMT/2004_1/  1120/sumII05/PMT/2004_1

A Stack -- Graphic

Page 8: Sample PMT online… Browse  1120/sumII05/PMT/2004_1/  1120/sumII05/PMT/2004_1

Array-Based Implementation

class Stack { Public: Stack(); ~Stack(); bool isEmpty(); void push(Item item); void pop(); Item getTop();Private: Item items[MAX]; int top;};

Page 9: Sample PMT online… Browse  1120/sumII05/PMT/2004_1/  1120/sumII05/PMT/2004_1

Array-Based Implementation

Stack::Stack:top(-1){}Stack::~Stack(){}

bool Stack::isEmpty(){ return top==-1;}

void Stack::push(Item item){ if (top>=MAX-1) exit(0); items[++top] = item;}

void Stack::pop(){ if (isEmpty()) exit(0); --top;}

Itemp Stack::getTop(){ if (isEmpty()) exit(0); return items[top];}

Page 10: Sample PMT online… Browse  1120/sumII05/PMT/2004_1/  1120/sumII05/PMT/2004_1

ADT List-Based Implementation

class Stack { public: …private: List aList;};

Page 11: Sample PMT online… Browse  1120/sumII05/PMT/2004_1/  1120/sumII05/PMT/2004_1

ADT List-Based ImplementationStack::Stack{}Stack::~Stack(){}

bool Stack::isEmpty(){ return aList.isEmpty();}

void Stack::push(Item item){ aList.insert(item, 1);}

Page 12: Sample PMT online… Browse  1120/sumII05/PMT/2004_1/  1120/sumII05/PMT/2004_1

ADT List-Based Implementation

void Stack::pop(){ aList.remove(1);}

Item Stack::getTop(){ return aList.retrieve(1);}

Page 13: Sample PMT online… Browse  1120/sumII05/PMT/2004_1/  1120/sumII05/PMT/2004_1

Compare Three Implementations

• Array v.s. LinkedList– Fixed size v.s.

dynamic size

• LinkedList v.s. ADT List– Efficiency v.s.

Simplicity

Page 14: Sample PMT online… Browse  1120/sumII05/PMT/2004_1/  1120/sumII05/PMT/2004_1

Application: Algebraic Expressions

• Infix expressions– Every binary operator appears

between its operands: a+b*c, (a+b)*c

• Prefix expressions– Operator appears before its operands:

+a*bc, *+abc

• Postfix expressions– Operator appears after its operands:

abc*+, ab+c*

Page 15: Sample PMT online… Browse  1120/sumII05/PMT/2004_1/  1120/sumII05/PMT/2004_1

Evaluating Postfix Expressions

Page 16: Sample PMT online… Browse  1120/sumII05/PMT/2004_1/  1120/sumII05/PMT/2004_1

PseudocodeStack aStack;for (each token t in the input){ if (t is an operand) aStack.push(t); else { operand2 = aStack.getTop(); aStack.pop(); operand1 = aStack.getTop(); aStack.pop(); result = operand1 t operand2; aStack.push(result); }}