0% found this document useful (0 votes)
132 views31 pages

Stack ADT: Lecture for CS Students

The document discusses stacks and their implementation using arrays. It defines stacks as lists that only allow insertions and deletions at one end, called the top. Common stack operations like push, pop, and isEmpty are introduced. An array implementation of stacks is presented, with the top index indicating the stack size. Methods for a stack class like push, pop, and isEmpty are demonstrated, with an example program showing LIFO behavior.

Uploaded by

Mukil
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
132 views31 pages

Stack ADT: Lecture for CS Students

The document discusses stacks and their implementation using arrays. It defines stacks as lists that only allow insertions and deletions at one end, called the top. Common stack operations like push, pop, and isEmpty are introduced. An array implementation of stacks is presented, with the top index indicating the stack size. Methods for a stack class like push, pop, and isEmpty are demonstrated, with an example program showing LIFO behavior.

Uploaded by

Mukil
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 31

Lecture 04: Stack ADT CS221: Data Structures & Algo.

Stack ADT

Dr. Zahid Halim

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT CS221: Data Structures & Algo.

Stacks
“A Stack is a special kind of list in which all insertions and
deletions take place at one end, called the Top”

Other Names
 Pushdown List
 Last In First Out (LIFO)

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT CS221: Data Structures & Algo.

Stacks
Examples:

 Books on a floor

 Dishes on a shelf

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT CS221: Data Structures & Algo.

Common Operations on Stacks


1. MAKENULL(S): Make Stack S be an empty stack.
2. TOP(S): Return the element at the top of stack S.
3. POP(S): Remove the top element of the stack.
4. PUSH(S): Insert the element x at the top of the stack.
5. ISEMPTY(S): Return true if S is an empty stack; return false otherwise.

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT CS221: Data Structures & Algo.

Static and Dynamic Stacks


• There are two kinds of stack data structure -

– a) static, i.e. they have a fixed size, and are implemented as arrays.

– b) dynamic, i.e. they grow in size as needed, and implemented as


linked lists

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT CS221: Data Structures & Algo.

Push and Pop operations of Stack

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT CS221: Data Structures & Algo.

An Array Implementation of Stacks


First Implementation
 Elements are stored in contiguous cells of an array.
 New elements can be inserted to the top of the list.

top First Element


Second Element
List
Last Element

Empty
maxlength
Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi
Lecture 04: Stack ADT CS221: Data Structures & Algo.

An Array Implementation of Stacks


1
3
2

2
1

Problem with this implementation


 Every PUSH and POP requires moving the entire array up and down.

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT CS221: Data Structures & Algo.

An Array Implementation of Stacks


Since, in a stack the insertion and deletion take place only at
the top, so…

A better Implementation:
 Anchor the bottom of the stack at the bottom of the
array
 Let the stack grow towards the top of the array
 Top indicates the current position of the first stack
element.

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT CS221: Data Structures & Algo.

An Array Implementation of Stacks


A better Implementation:

top
1 First Element
2 Second Element
.
.
maxlength Last Element

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT CS221: Data Structures & Algo.

A Stack Class
#ifndef INTSTACK_H
#define INTSTACK_H
class IntStack
{
private:
int *stackArray;
int stackSize;
int top;
public:
IntStack(int);
void push(int);
void pop(int &);
bool isFull(void);
bool isEmpty(void);
};
#endif

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT CS221: Data Structures & Algo.

Implementation
//*******************
// Constructor *
//*******************
IntStack::IntStack(int size)
{
stackArray = new int[size];
stackSize = size;
top = -1;
}

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT CS221: Data Structures & Algo.

Push
// Member function push pushes the argument onto *
// the stack. *
void IntStack::push(int num)
{
if (isFull())
cout << "The stack is full.\n";
else
{
top++;
stackArray[top] = num;
}
}

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT CS221: Data Structures & Algo.

// Member function pop pops the value at the top


// of the stack off, and copies it into the variable
// passed as an argument.
void IntStack::pop(int &num)
{
if (isEmpty())
cout << "The stack is empty.\n";
else
{
num = stackArray[top];
top--;
}
}

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT CS221: Data Structures & Algo.
//***************************************************
// Member function isFull returns true if the stack *
// is full, or false otherwise. *
//***************************************************

bool IntStack::isFull(void)
{
bool status;

if (top == stackSize - 1)
status = true;
else
status = false;

return status;
}

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT CS221: Data Structures & Algo.

//**********************************************
// Member funciton isEmpty returns true if the
//stack *
// is empty, or false otherwise.*
//***********************************************
bool IntStack::isEmpty(void)
{
bool status;

if (top == -1)
status = true;
else
status = false;

return status;
}

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT CS221: Data Structures & Algo.

// This program demonstrates the IntStack class.


#include <iostream.h>
#include "intstack.h“

void main(void)
{
IntStack stack(5);
int catchVar;

cout << "Pushing 5\n";


stack.push(5);
cout << "Pushing 10\n";
stack.push(10);
cout << "Pushing 15\n";
stack.push(15);
cout << "Pushing 20\n";
stack.push(20);
cout << "Pushing 25\n";
stack.push(25);
Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi
Lecture 04: Stack ADT CS221: Data Structures & Algo.
cout << "Popping...\n";
stack.pop(catchVar);
cout << catchVar << endl;
stack.pop(catchVar);
cout << catchVar << endl;
stack.pop(catchVar);
cout << catchVar << endl;
stack.pop(catchVar);
cout << catchVar << endl;
stack.pop(catchVar);
cout << catchVar << endl;
}

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT CS221: Data Structures & Algo.

Program Output
Pushing 5
Pushing 10
Pushing 15
Pushing 20
Pushing 25
Popping...
25
20
15
10
5

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT CS221: Data Structures & Algo.

About Program 1

• In the program, the constructor is called with the


argument 5. This sets up the member variables as
shown in Figure 1. Since top is set to –1, the stack is
empty

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT CS221: Data Structures & Algo.

• Figure 3 shows the state of the member variables after all five
calls to the push function. Now the top of the stack is at element
4, and the stack is full.

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT CS221: Data Structures & Algo.

Notice that the pop function uses a reference


parameter, num.

The value that is popped off the stack is copied into


num so it can be used later in the program.

Figure 4 (on the next slide) depicts the state of


the class members, and the num parameter, just
after the first value is popped off the stack.

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT CS221: Data Structures & Algo.

Implementing other Stack Operations

More complex operations can be built on the basic stack class we


have just described, e.g. a class called MathStack.

MathStack has 2 member functions :- add( ) sub( )

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT CS221: Data Structures & Algo.

Stack Templates
The stack class so far work with integers only. A stack template
can be used to work with any data type.

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT CS221: Data Structures & Algo.

A Linked-List Implementation of Stacks


• Stack can expand or shrink with each PUSH or POP operation.

• PUSH and POP operate only on the header cell and the first
cell on the list.

Top
x y z .

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT CS221: Data Structures & Algo.

Linked List Implementation of Stack


class Stack
{
struct node
{
int data;
node *next;
};
node *top;
public:
void Push(int newelement);
int Pop(void);
bool IsEmpty();
};

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT CS221: Data Structures & Algo.

1. void Stack::Push(int newelement)


2. {
3. node *newptr;
4. newptr=new node;
5. newptr->data=newelement;
6. newptr->next=top;
7. top=newptr;
8. }
9. int Stack:Pop(void)
10. {
11. if (IsEmpty()) { cout<<“underflow error”; return;}
12. tempptr=top;
13. int returnvalue=top->data;
14. top=top->next;
15. delete tempptr;
16. return returnvalue;
17. }

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT CS221: Data Structures & Algo.

void Stack::IsEmpty()
{
if (top==NULL) return true;
else return false;
}

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT CS221: Data Structures & Algo.
Program 3

// This program demonstrates the dynamic stack


// class DynIntClass.

#include <iostream.h>
#include "dynintstack.h“

void main(void)
{
DynIntStack stack;
int catchVar;

cout << "Pushing 5\n";


stack.push(5);
cout << "Pushing 10\n";
stack.push(10);
cout << "Pushing 15\n";
stack.push(15);
Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi
Lecture 04: Stack ADT CS221: Data Structures & Algo.
cout << "Popping...\n";
stack.pop(catchVar);
cout << catchVar << endl;
stack.pop(catchVar);
cout << catchVar << endl;
stack.pop(catchVar);
cout << catchVar << endl;

cout << "\nAttempting to pop again... ";


stack.pop(catchVar);
}
Program Output
Pushing 5
Pushing 10
Pushing 15
Popping...
15
10
5
 
Attempting to pop again... The stack is empty.

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi


Lecture 04: Stack ADT Quiz 1 CS221: Data Structures & Algo.

Q1. Given two data structures Alpha and Beta and a set of operation
insertion, deletion and searching with the percentage of occurrence of
each as 70%, 10% and 20 %. Which one of the two data structures
(Alpha and Beta) will you be selecting and why.

Q2. What is the time complexity of following code:


•delNodeDoubly()
•{
•IntList *ptrCurrent=ListHeadPtr;
• while (ptrCurrent!=NULL && ptrCurrent->data!=key)
• { ptrCurrent = ptrCurrent->next;
• }
• if (ptrCurrent == NULL)
• { cout<<"\nElement to delete not found in the list";
• return;
• }
• if (ptrCurrent == ListHeadPtr) //node to delete is first node
• {
• ListHeadPtr = ListHeadPtr->next;
• ListHeadPtr->previous = NULL; }

Ghulam Ishaq Khan Institute of Engineering Sciences and Technology, Topi

You might also like