Stacks
CS 302 – Data Structures
Sections 5.1, 5.2, 6.1, 6.5
Warning
• Although data structure concepts between
this and last semesters will be the same,
there might be implementation differences.
• Your answers in questions in quizzes and
exams should be based on this semester’s
(CS302) implementations!
Definitions
• ImageType.h
• ImageType.cpp
• Driver.cpp
class specification
class implementation
application
(client code)
Question
• In object oriented programming, class
implementation details are hidden from
applications that use the class.
• Why?
What is a stack?
• It is an ordered group of homogeneous items.
• Items are added to and removed from the top of the stack
LIFO property: Last In, First Out
• The last item added would be the first to be removed
TOP OF THE STACK TOP OF THE STACK
Stack Implementations
Array-based
Linked-list-based
Array-based Stacks
template<class ItemType>
class StackType {
public:
StackType(int);
void MakeEmpty();
bool IsEmpty() const;
bool IsFull() const;
void Push(ItemType);
void Pop(ItemType&);
private:
int top, maxStack;
ItemType *items;
};
dynamically allocated array
Array-based Stacks (cont’d)
template<class ItemType>
StackType<ItemType>::StackType(int size)
{
top = -1;
maxStack = size;
items = new ItemType[max];
}
template<class ItemType>
StackType<ItemType>::~StackType()
{
delete [ ] items;
}
O(1)
O(1)
Array-based Stacks (cont’d)
template<class ItemType>
void StackType<ItemType>::MakeEmpty()
{
top = -1;
} O(1)
Array-based Stacks (cont.)
template<class ItemType>
bool StackType<ItemType>::IsEmpty() const
{
return (top == -1);
}
template<class ItemType>
bool StackType<ItemType>::IsFull() const
{
return (top == maxStack-1);
}
O(1)
O(1)
Push (ItemType newItem)
• Function: Adds newItem to the top of
the stack.
• Preconditions: Stack has been
initialized and is not full.
• Postconditions: newItem is at the top
of the stack.
Stack overflow
• The condition resulting from trying to push
an element onto a full stack.
if(!stack.IsFull())
stack.Push(item);
Array-based Stacks (cont.)
template<class ItemType>
void StackType<ItemType>::Push(ItemType newItem)
{
top++;
items[top] = newItem;
} O(1)
Pop (ItemType& item)
• Function: Removes topItem from stack and
returns it in item.
• Preconditions: Stack has been initialized
and is not empty.
• Postconditions: Top element has been
removed from stack and item is a copy of
the removed element.
Stack underflow
• The condition resulting from trying to pop
an empty stack.
if(!stack.IsEmpty())
stack.Pop(item);
Array-based Stacks (cont.)
template<class ItemType>
void StackType<ItemType>::Pop(ItemType& item)
{
item = items[top];
top--;
}
O(1)
Templates
• Templates allow the compiler to generate multiple
versions of a class type by allowing parameterized
types.
• Compiler generates distinct class types and gives
its own internal name to each of the types.
Compiling Templates
• Cannot anymore compile StackType.cpp separately
from the application of the class (e.g., driver.cpp)
• Compiler needs to know the data type of the stack
to instantiate the class!
• Where can the compiler find this information?
Compiling Templates (cont’d)
// Client code
StackType<int> myStack;
StackType<float> yourStack;
StackType<StrType> anotherStack;
myStack.Push(35);
yourStack.Push(584.39);
Compiling Templates (cont’d)
• Must compile StackType.cpp and client code (e.g.,
driver.cpp) together!
(1) Use “include” directive to include StackType.cpp
StackType.cpp at the end
of StackType.h
StackType.h
(2) “include” StackType.h
StackType.h in client’s code
(3) Compile client code
Linked-list-based Stacks
template<class ItemType>
struct NodeType<ItemType> {
ItemType info;
NodeType<ItemType>* next;
};
Linked-list-based Stacks (cont’d)
template<class ItemType>
struct NodeType<ItemType>;
template<class ItemType>
class StackType {
public:
StackType();
~StackType();
void MakeEmpty();
bool IsEmpty() const;
bool IsFull() const;
void Push(ItemType);
void Pop(ItemType&);
private:
NodeType<ItemType>* topPtr;
};
Linked-list-based Stacks (cont’d)
template<class ItemType>
StackType<ItemType>::StackType()
StackType()
{
topPtr = NULL;
}
template<class ItemType>
void StackType<ItemType>::MakeEmpty()
MakeEmpty()
{
NodeType<ItemType>* tempPtr;
while(topPtr != NULL) {
tempPtr = topPtr;
topPtr = topPtr->next;
delete tempPtr;
}
}
O(N)
O(1)
Linked-list-based Stacks (cont’d)
template<class ItemType>
bool StackType<ItemType>::IsEmpty()
IsEmpty() const
{
return(topPtr == NULL);
}
template<class ItemType>
StackType<ItemType>::~StackType()
StackType()
{
MakeEmpty();
}
O(1)
O(N)
Linked-list-based Stacks (cont’d)
template<class ItemType>
bool StackType<ItemType>::IsFull()
IsFull() const
{
NodeType<ItemType>* location;
location = new NodeType<ItemType>; // test
if(location == NULL)
return true;
else {
delete location;
return false;
}
}
O(1)
Push (ItemType newItem)
• Function: Adds newItem to the top of
the stack.
• Preconditions: Stack has been
initialized and is not full.
• Postconditions: newItem is at the top
of the stack.
Pushing on a
non-empty
stack
Pushing on a non-empty stack
(cont.)
• The order of changing the pointers is
important!
Special Case: pushing on an
empty stack
Function Push
template <class ItemType>
void StackType<ItemType>::Push
Push(ItemType
item)
{
NodeType<ItemType>* location;
location = new NodeType<ItemType>;
location->info = newItem;
location->next = topPtr;
topPtr = location;
}
O(1)
Pop (ItemType& item)
• Function: Removes topItem from stack and
returns it in item.
• Preconditions: Stack has been initialized
and is not empty.
• Postconditions: Top element has been
removed from stack and item is a copy of
the removed element.
Popping the top element
Popping the top
element
(cont.)
Need a
temporary
pointer !
Special case: popping the last
element on the stack
tempPtr
Function Pop
template <class ItemType>
void StackType<ItemType>::Pop
Pop(ItemType& item)
{
NodeType<ItemType>* tempPtr;
item = topPtr->info;
tempPtr = topPtr;
topPtr = topPtr->next;
delete tempPtr;
}
O(1)
Comparing stack implementations
Big-O Comparison of Stack Operations
Operation Array
Implementation
Linked
Implementation
Constructor O(1) O(1)
MakeEmpty O(1) O(N)
IsFull O(1) O(1)
IsEmpty O(1) O(1)
Push O(1) O(1)
Pop O(1) O(1)
Destructor O(1) O(N)
Array-vs Linked-list-based
Stack Implementations
• Array-based implementation is simple but:
– The size of the stack must be determined when
a stack object is declared.
– Space is wasted if we use less elements.
– We cannot "enqueue" more elements than the
array can hold.
• Linked-list-based implementation alleviates
these problems but time requirements might
increase.
Example using stacks:
evaluate postfix expressions
• Postfix notation is another way of writing arithmetic
expressions.
• In postfix notation, the operator is written after the two
operands.
infix: 2+5 postfix: 2 5 +
• Why using postfix notation?
Precedence rules and parentheses are not required!
Example: postfix expressions
(cont.)
Expressions are evaluated from left to right.
Postfix expressions:
Algorithm using stacks (cont.)
Exercise 15: Write the body for a client function that
replaces each copy of an item in a stack with another item.
Use the following specification.
ReplaceItem(StackType& stack, ItemType oldItem,
ItemType newItem)
Function: Replaces all occurrences of oldItem with
newItem.
Precondition: stack has been initialized.
Postconditions: Each occurrence of oldItem in stack has
been replaced by newItem. Order of other elements remains
unchanged.
Warning: you may not assume any knowledge of how the
stack is implemented!
{
ItemType item;
StackType tempStack;
while (!Stack.IsEmpty()) {
Stack.Pop(item);
if (item==oldItem)
tempStack.Push(newItem);
else
tempStack.Push(item);
}
while (!tempStack.IsEmpty()) {
tempStack.Pop(item);
Stack.Push(item);
}
}
1
2
3
3
5
1
1
5
3
Stack
Stack
tempStack
oldItem = 2
newItem = 5
{
ItemType item;
StackType tempStack;
while (!Stack.IsEmpty()) {
Stack.Pop(item);
if (item==oldItem)
tempStack.Push(newItem);
else
tempStack.Push(item);
}
while (!tempStack.IsEmpty()) {
tempStack.Pop(item);
Stack.Push(item);
}
}
O(N)
What are the time
requirements using big-O?
Exercises 19, 20
Exercises 19, 20
Exercise 20
small large
Exercise 20 (cont’d)
etc.
Exercise 20 (cont’d)

More Related Content

PPT
Stacks.ppt
PPT
Stacks.ppt
PPT
Stacks
PPT
Stack queue
PPT
Stack queue
PPT
Stack queue
PPT
Stack queue
PPT
Stack queue
Stacks.ppt
Stacks.ppt
Stacks
Stack queue
Stack queue
Stack queue
Stack queue
Stack queue

Similar to Data Strcture and Algorithms - Destailed Analysis of Stacks (20)

PPT
Stack queue
PPT
Stack queue
PPT
StacksandQueues.pptnajaiananaajaoakanabjana
PPT
LinkedSQ.ppt, Stack and Queue implementation using array
PPTX
Data Structures and Agorithm: DS 06 Stack.pptx
PDF
Chapter 5 Stack and Queue.pdf
 
PPTX
Abscddnddmdkwkkstack implementation.pptx
PPTX
Stack in Sata Structure
PPTX
STACKS AND QUEUES CONCEPTS
PPTX
My lecture stack_queue_operation
PPTX
stack_operationss_documentation_file.ppt
PPTX
9781337102087 ppt ch18
PPT
Lecture5
PPT
Lec 4 Stack of Data Structures & Algorithms
PPT
Algo>Stacks
PPTX
Stack and its applications
PDF
LEC3-DS ALGO(updated).pdf
PPSX
Stacks fundamentals
PPTX
Stack data structure in Data Structure using C
Stack queue
Stack queue
StacksandQueues.pptnajaiananaajaoakanabjana
LinkedSQ.ppt, Stack and Queue implementation using array
Data Structures and Agorithm: DS 06 Stack.pptx
Chapter 5 Stack and Queue.pdf
 
Abscddnddmdkwkkstack implementation.pptx
Stack in Sata Structure
STACKS AND QUEUES CONCEPTS
My lecture stack_queue_operation
stack_operationss_documentation_file.ppt
9781337102087 ppt ch18
Lecture5
Lec 4 Stack of Data Structures & Algorithms
Algo>Stacks
Stack and its applications
LEC3-DS ALGO(updated).pdf
Stacks fundamentals
Stack data structure in Data Structure using C
Ad

Recently uploaded (20)

PPTX
Management Information system : MIS-e-Business Systems.pptx
PDF
distributed database system" (DDBS) is often used to refer to both the distri...
PDF
August -2025_Top10 Read_Articles_ijait.pdf
 
PDF
Exploratory_Data_Analysis_Fundamentals.pdf
PDF
Java Basics-Introduction and program control
PDF
August 2025 - Top 10 Read Articles in Network Security & Its Applications
PPTX
Graph Data Structures with Types, Traversals, Connectivity, and Real-Life App...
PDF
Abrasive, erosive and cavitation wear.pdf
PPTX
AUTOMOTIVE ENGINE MANAGEMENT (MECHATRONICS).pptx
PPTX
"Array and Linked List in Data Structures with Types, Operations, Implementat...
PPTX
ai_satellite_crop_management_20250815030350.pptx
PPTX
CN_Unite_1 AI&DS ENGGERING SPPU PUNE UNIVERSITY
PPTX
Chemical Technological Processes, Feasibility Study and Chemical Process Indu...
PDF
Accra-Kumasi Expressway - Prefeasibility Report Volume 1 of 7.11.2018.pdf
PPTX
mechattonicsand iotwith sensor and actuator
 
PPTX
Amdahl’s law is explained in the above power point presentations
PPTX
Petroleum Refining & Petrochemicals.pptx
PDF
Soil Improvement Techniques Note - Rabbi
PDF
Prof. Dr. KAYIHURA A. SILAS MUNYANEZA, PhD..pdf
PPTX
Sorting and Hashing in Data Structures with Algorithms, Techniques, Implement...
Management Information system : MIS-e-Business Systems.pptx
distributed database system" (DDBS) is often used to refer to both the distri...
August -2025_Top10 Read_Articles_ijait.pdf
 
Exploratory_Data_Analysis_Fundamentals.pdf
Java Basics-Introduction and program control
August 2025 - Top 10 Read Articles in Network Security & Its Applications
Graph Data Structures with Types, Traversals, Connectivity, and Real-Life App...
Abrasive, erosive and cavitation wear.pdf
AUTOMOTIVE ENGINE MANAGEMENT (MECHATRONICS).pptx
"Array and Linked List in Data Structures with Types, Operations, Implementat...
ai_satellite_crop_management_20250815030350.pptx
CN_Unite_1 AI&DS ENGGERING SPPU PUNE UNIVERSITY
Chemical Technological Processes, Feasibility Study and Chemical Process Indu...
Accra-Kumasi Expressway - Prefeasibility Report Volume 1 of 7.11.2018.pdf
mechattonicsand iotwith sensor and actuator
 
Amdahl’s law is explained in the above power point presentations
Petroleum Refining & Petrochemicals.pptx
Soil Improvement Techniques Note - Rabbi
Prof. Dr. KAYIHURA A. SILAS MUNYANEZA, PhD..pdf
Sorting and Hashing in Data Structures with Algorithms, Techniques, Implement...
Ad

Data Strcture and Algorithms - Destailed Analysis of Stacks

  • 1. Stacks CS 302 – Data Structures Sections 5.1, 5.2, 6.1, 6.5
  • 2. Warning • Although data structure concepts between this and last semesters will be the same, there might be implementation differences. • Your answers in questions in quizzes and exams should be based on this semester’s (CS302) implementations!
  • 3. Definitions • ImageType.h • ImageType.cpp • Driver.cpp class specification class implementation application (client code)
  • 4. Question • In object oriented programming, class implementation details are hidden from applications that use the class. • Why?
  • 5. What is a stack? • It is an ordered group of homogeneous items. • Items are added to and removed from the top of the stack LIFO property: Last In, First Out • The last item added would be the first to be removed TOP OF THE STACK TOP OF THE STACK
  • 7. Array-based Stacks template<class ItemType> class StackType { public: StackType(int); void MakeEmpty(); bool IsEmpty() const; bool IsFull() const; void Push(ItemType); void Pop(ItemType&); private: int top, maxStack; ItemType *items; }; dynamically allocated array
  • 8. Array-based Stacks (cont’d) template<class ItemType> StackType<ItemType>::StackType(int size) { top = -1; maxStack = size; items = new ItemType[max]; } template<class ItemType> StackType<ItemType>::~StackType() { delete [ ] items; } O(1) O(1)
  • 9. Array-based Stacks (cont’d) template<class ItemType> void StackType<ItemType>::MakeEmpty() { top = -1; } O(1)
  • 10. Array-based Stacks (cont.) template<class ItemType> bool StackType<ItemType>::IsEmpty() const { return (top == -1); } template<class ItemType> bool StackType<ItemType>::IsFull() const { return (top == maxStack-1); } O(1) O(1)
  • 11. Push (ItemType newItem) • Function: Adds newItem to the top of the stack. • Preconditions: Stack has been initialized and is not full. • Postconditions: newItem is at the top of the stack.
  • 12. Stack overflow • The condition resulting from trying to push an element onto a full stack. if(!stack.IsFull()) stack.Push(item);
  • 13. Array-based Stacks (cont.) template<class ItemType> void StackType<ItemType>::Push(ItemType newItem) { top++; items[top] = newItem; } O(1)
  • 14. Pop (ItemType& item) • Function: Removes topItem from stack and returns it in item. • Preconditions: Stack has been initialized and is not empty. • Postconditions: Top element has been removed from stack and item is a copy of the removed element.
  • 15. Stack underflow • The condition resulting from trying to pop an empty stack. if(!stack.IsEmpty()) stack.Pop(item);
  • 16. Array-based Stacks (cont.) template<class ItemType> void StackType<ItemType>::Pop(ItemType& item) { item = items[top]; top--; } O(1)
  • 17. Templates • Templates allow the compiler to generate multiple versions of a class type by allowing parameterized types. • Compiler generates distinct class types and gives its own internal name to each of the types.
  • 18. Compiling Templates • Cannot anymore compile StackType.cpp separately from the application of the class (e.g., driver.cpp) • Compiler needs to know the data type of the stack to instantiate the class! • Where can the compiler find this information?
  • 19. Compiling Templates (cont’d) // Client code StackType<int> myStack; StackType<float> yourStack; StackType<StrType> anotherStack; myStack.Push(35); yourStack.Push(584.39);
  • 20. Compiling Templates (cont’d) • Must compile StackType.cpp and client code (e.g., driver.cpp) together! (1) Use “include” directive to include StackType.cpp StackType.cpp at the end of StackType.h StackType.h (2) “include” StackType.h StackType.h in client’s code (3) Compile client code
  • 21. Linked-list-based Stacks template<class ItemType> struct NodeType<ItemType> { ItemType info; NodeType<ItemType>* next; };
  • 22. Linked-list-based Stacks (cont’d) template<class ItemType> struct NodeType<ItemType>; template<class ItemType> class StackType { public: StackType(); ~StackType(); void MakeEmpty(); bool IsEmpty() const; bool IsFull() const; void Push(ItemType); void Pop(ItemType&); private: NodeType<ItemType>* topPtr; };
  • 23. Linked-list-based Stacks (cont’d) template<class ItemType> StackType<ItemType>::StackType() StackType() { topPtr = NULL; } template<class ItemType> void StackType<ItemType>::MakeEmpty() MakeEmpty() { NodeType<ItemType>* tempPtr; while(topPtr != NULL) { tempPtr = topPtr; topPtr = topPtr->next; delete tempPtr; } } O(N) O(1)
  • 24. Linked-list-based Stacks (cont’d) template<class ItemType> bool StackType<ItemType>::IsEmpty() IsEmpty() const { return(topPtr == NULL); } template<class ItemType> StackType<ItemType>::~StackType() StackType() { MakeEmpty(); } O(1) O(N)
  • 25. Linked-list-based Stacks (cont’d) template<class ItemType> bool StackType<ItemType>::IsFull() IsFull() const { NodeType<ItemType>* location; location = new NodeType<ItemType>; // test if(location == NULL) return true; else { delete location; return false; } } O(1)
  • 26. Push (ItemType newItem) • Function: Adds newItem to the top of the stack. • Preconditions: Stack has been initialized and is not full. • Postconditions: newItem is at the top of the stack.
  • 28. Pushing on a non-empty stack (cont.) • The order of changing the pointers is important!
  • 29. Special Case: pushing on an empty stack
  • 30. Function Push template <class ItemType> void StackType<ItemType>::Push Push(ItemType item) { NodeType<ItemType>* location; location = new NodeType<ItemType>; location->info = newItem; location->next = topPtr; topPtr = location; } O(1)
  • 31. Pop (ItemType& item) • Function: Removes topItem from stack and returns it in item. • Preconditions: Stack has been initialized and is not empty. • Postconditions: Top element has been removed from stack and item is a copy of the removed element.
  • 32. Popping the top element
  • 33. Popping the top element (cont.) Need a temporary pointer !
  • 34. Special case: popping the last element on the stack tempPtr
  • 35. Function Pop template <class ItemType> void StackType<ItemType>::Pop Pop(ItemType& item) { NodeType<ItemType>* tempPtr; item = topPtr->info; tempPtr = topPtr; topPtr = topPtr->next; delete tempPtr; } O(1)
  • 36. Comparing stack implementations Big-O Comparison of Stack Operations Operation Array Implementation Linked Implementation Constructor O(1) O(1) MakeEmpty O(1) O(N) IsFull O(1) O(1) IsEmpty O(1) O(1) Push O(1) O(1) Pop O(1) O(1) Destructor O(1) O(N)
  • 37. Array-vs Linked-list-based Stack Implementations • Array-based implementation is simple but: – The size of the stack must be determined when a stack object is declared. – Space is wasted if we use less elements. – We cannot "enqueue" more elements than the array can hold. • Linked-list-based implementation alleviates these problems but time requirements might increase.
  • 38. Example using stacks: evaluate postfix expressions • Postfix notation is another way of writing arithmetic expressions. • In postfix notation, the operator is written after the two operands. infix: 2+5 postfix: 2 5 + • Why using postfix notation? Precedence rules and parentheses are not required!
  • 39. Example: postfix expressions (cont.) Expressions are evaluated from left to right.
  • 41. Exercise 15: Write the body for a client function that replaces each copy of an item in a stack with another item. Use the following specification. ReplaceItem(StackType& stack, ItemType oldItem, ItemType newItem) Function: Replaces all occurrences of oldItem with newItem. Precondition: stack has been initialized. Postconditions: Each occurrence of oldItem in stack has been replaced by newItem. Order of other elements remains unchanged. Warning: you may not assume any knowledge of how the stack is implemented!
  • 42. { ItemType item; StackType tempStack; while (!Stack.IsEmpty()) { Stack.Pop(item); if (item==oldItem) tempStack.Push(newItem); else tempStack.Push(item); } while (!tempStack.IsEmpty()) { tempStack.Pop(item); Stack.Push(item); } } 1 2 3 3 5 1 1 5 3 Stack Stack tempStack oldItem = 2 newItem = 5
  • 43. { ItemType item; StackType tempStack; while (!Stack.IsEmpty()) { Stack.Pop(item); if (item==oldItem) tempStack.Push(newItem); else tempStack.Push(item); } while (!tempStack.IsEmpty()) { tempStack.Pop(item); Stack.Push(item); } } O(N) What are the time requirements using big-O?