SlideShare a Scribd company logo
D A T A S T R U C T U R E S
STACKS:
It is an ordered group of homogeneous items of elements. Elements are added
to and removed from the top of the stack (the most recently added items are at
the top of the stack). The last element to be added is the first to be removed
(LIFO: Last In, First Out).
A stack is a list of elements in which an element may be inserted or deleted only at
one end, called TOP of the stack. The elements are removed in reverse order of
that in which they were inserted into the stack.
Basic operations:
These are two basic operations associated with stack:
 Push() is the term used to insert/add an element into a stack. 
 Pop() is the term used to delete/remove an element from a stack.
Other names for stacks are piles and push-down lists. 
There are two ways to represent Stack in memory. One is using array and other is
using linked list.
Array representation of stacks:
Usually the stacks are represented in the computer by a linear array. In the following
algorithms/procedures of pushing and popping an item from the stacks, we have
considered, a linear array STACK, a variable TOP which contain the location of the
top element of the stack; and a variable STACKSIZE which gives the maximum
number of elements that can be hold by the stack.
STACK
Data 1 Data 2 Data 3
0 1 2 3 4 5 6 7 8
TOP STACKSIZE2 9
D A T A S T R U C T U R E S
Push Operation
Push an item onto the top of the stack (insert an item)
D A T A S T R U C T U R E S
Pop Operation
Pop an item off the top of the stack (delete an item)
Algorithm for PUSH:
Algorithm: PUSH(STACK, TOP, STACKSIZE, ITEM)
1. [STACK already filled?]
If TOP=STACKSIZE-1, then: Print: OVERFLOW / Stack Full, and Return.
2. Set TOP:=TOP+1. [Increase TOP by 1.]
3. Set STACK[TOP]=ITEM. [Insert ITEM in new TOP position.]
4. RETURN.
Algorithm for POP:
Algorithm: POP(STACK, TOP, ITEM)
This procedure deletes the top element of STACK and assigns it to the
variable ITEM.
1. [STACK has an item to be removed? Check for empty stack] If
TOP=-1, then: Print: UNDERFLOW/ Stack is empty, and Return.
2. Set ITEM=STACK[TOP]. [Assign TOP element to ITEM.]
3. Set TOP=TOP-1. [Decrease TOP by 1.]
4. Return.
D A T A S T R U C T U R E S
Here are the minimal operations we'd need for an abstract stack (and their
typical names):
o Push: Places an element/value on top of the stack.
o Pop: Removes value/element from top of the stack.
o IsEmpty: Reports whether the stack is Empty or not.
o IsFull: Reports whether the stack is Full or not.
1. Run this program and examine its behavior.
// A Program that exercise the operations on Stack Implementing Array
// i.e. (Push, Pop, Traverse)
#include <conio.h>
#include <iostream.h>
#include <process.h>
#define STACKSIZE 10 // int const STACKSIZE = 10;
// global variable and array declaration
int Top=-1;
int Stack[STACKSIZE];
void Push(int); // functions prototyping
int Pop(void);
bool IsEmpty(void);
bool IsFull(void);
void Traverse(void);
int main( )
{ int item, choice;
while( 1 )
{
cout<< "nnnnn";
cout<< " ******* STACK OPERATIONS ********* nn";
cout<< " 1- Push item n 2- Pop Item n";
cout<< " 3- Traverse / Display Stack Items n 4- Exit.";
cout<< " nnt Your choice ---> ";
cin>> choice;
switch(choice)
{ case 1: if(IsFull())cout<< "n Stack Full/Overflown";
else
{ cout<< "n Enter a number: ";
cin>>item;
Push(item); }
break;
case 2: if(IsEmpty())cout<< "n Stack is empty)
n"; else
{item=Pop();
cout<< "n deleted from Stack =
"<<item<<endl;} break;
case 3: if(IsEmpty())cout<< "n Stack is empty)
n"; else
{ cout<< "n List of Item pushed on
Stack:n"; Traverse();
}
break;
D A T A S T R U C T U R E S
case 4: exit(0);
default:
cout<< "nnt Invalid Choice: n";
} // end of switch block
} // end of while loop
} // end of of main() function
void Push(int item)
{
Stack[++Top] = item;
}
int Pop( )
{
return Stack[Top--];
}
bool IsEmpty( )
{ if(Top == -1 ) return true else return false; }
bool IsFull( )
{ if(Top == STACKSIZE-1 ) return true else return false; }
void Traverse( )
{ int TopTemp = Top;
do{ cout<< Stack[TopTemp--]<<endl;} while(TopTemp>= 0);
}
1- Run this program and examine its behavior.
// A Program that exercise the operations on Stack
// Implementing POINTER (Linked Structures) (Dynamic Binding)
// Programed by SHAHID LONE
// This program provides you the concepts that how STACK is
// implemented using Pointer/Linked Structures
#include <iostream.h.h>
#include <process.h>
struct node {
int info;
struct node *next;
};
struct node *TOP = NULL;
void push (int x)
{ struct node *NewNode;
NewNode = new (node); // (struct node *) malloc(sizeof(node));
if(NewNode==NULL) { cout<<"nn Memeory
Crashnn"; return; }
NewNode->info = x;
NewNode->next = NULL;
D A T A S T R U C T U R E S
if(TOP == NULL) TOP =
NewNode; else
{ NewNode->next =
TOP; TOP=NewNode;
}
}
struct node* pop ()
{ struct node *T;
T=TOP;
TOP = TOP->next;
return T;
}
void Traverse()
{ struct node *T;
for( T=TOP ; T!=NULL ;T=T->next) cout<<T->info<<endl;
}
bool IsEmpty()
{ if(TOP == NULL) return true; else return false; }
int main ()
{ struct node *T;
int item, ch;
while(1)
{ cout<<"nnnnnn ***** Stack Operations *****n";
cout<<"nn 1- Push Item n 2- Pop Item n";
cout<<" 3- Traverse/Print stack-valuesn 4- Exitnn";
cout<<"n Your Choice --> ";
cin>>ch;
switch(ch)
{ case 1:
cout<<"nPut a value:
"; cin>>item;
Push(item);
break;
case 2:
if(IsEmpty()) {cout<<"nn Stack is
Emptyn"; break;
}
T= Pop();
cout<< T->info <<"nn has been deleted
n"; break;
case 3:
if(IsEmpty()) {cout<<"nn Stack is
Emptyn"; break;
}
Traverse();
break;
case 4:
exit(0);
} // end of switch
block } // end of loop
return 0;
} // end of main function
D A T A S T R U C T U R E S
Application of the Stack (Arithmetic Expressions)
I N F I X , P O S T F I X A N D P R E F I X N
O T A T I O N S
In f ix , P o s tf ix a n d P r e f ix n o ta tio n s a r e u s e d in m a n y c a
lc u la to r s . T h e e a s ie s t w a y to im p le m e n t th e
P o s tf ix a n d P r e f ix o p e ra tio n s is to u s e s ta c k . In f ix
a n d p r e f ix n o ta tio n s c a n b e c o n v e r te d to p o s tfix
n o ta tio n u s in g s ta c k .
T h e r e a s o n w h y p o s tf ix n o ta tio n is p r e f e r r e d is th a t
y o u d o n ’t n e e d a n y p a re n th e s is a n d th e r e is n o
p r e s c ie n c e p r o b le m .
Stacks are used by compilers to help in the process of converting infix to postfix
arithmetic expressions and also evaluating arithmetic expressions. Arithmetic
expressions consisting variables, constants, arithmetic operators and parentheses.
Humans generally write expressions in which the operator is written between the
operands (3 + 4, for example). This is called infix notation. Computers ―prefer‖
postfix notation in which the operator is written to the right of two operands. The
preceding infix expression would appear in postfix notation as 3 4 +.
To evaluate a complex infix expression, a compiler would first convert the expression
to postfix notation, and then evaluate the postfix version of the expression. We use
the following three levels of precedence for the five binary operations.
Precedence Binary Operations
Highest Exponentiations (^)
Next Highest Multiplication (*), Division (/) and Mod (%)
Lowest Addition (+) and Subtraction (-)
For example:
(66 + 2) * 5 – 567 /
42 to postfix
66 22 + 5 * 567 42 / –
Transforming Infix Expression into Postfix Expression:
The following algorithm transform the infix expression Q into its equivalent
postfix expression P. It uses a stack to temporary hold the operators and left
parenthesis.
The postfix expression will be constructed from left to right using operands from Q
and operators popped from STACK.
D A T A S T R U C T U R E S
Algorithm: Infix_to_PostFix(Q, P)
Suppose Q is an arithmetic expression written in infix notation. This
algorithm finds the equivalent postfix expression P.
1. Push ―(― onto STACK, and add ―)‖ to the end of Q.
2. Scan Q from left to right and repeat Steps 3 to 6 for each element of Q until
the STACK is empty:
3. If an operand is encountered, add it to P.
4. If a left parenthesis is encountered, push it onto STACK.
5. If an operator © is encountered, then:
a) Repeatedly pop from STACK and add to P each operator
(on the top of STACK) which has the same or
higher precedence/priority than ©
b) Add © to STACK.
[End of If structure.]
6. If a right parenthesis is encountered, then:
a) Repeatedly pop from STACK and add to P each operator (on the
top of STACK) until a left parenthesis is encountered.
b) Remove the left parenthesis. [Do not add the left parenthesis to P.]
[End of If structure.]
[End of Step 2
loop.] 7. Exit.
Convert Q: A+( B * C – ( D / E ^ F ) * G ) * H into postfix form showing stack status .
Now add “)” at the end of expression A+( B * C – ( D / E ^ F ) * G ) * H )
and also Push a “(“ on Stack.
Symbol Scanned Stack Expression Y
(
A ( A
+ (+ A
( (+( A
B (+( AB
* (+(* AB
C (+(* ABC
- (+(- ABC*
( (+(-( ABC*
D (+(-( ABC*D
/ (+(-(/ ABC*D
E (+(-(/ ABC*DE
^ (+(-(/^ ABC*DE
F (+(-(/^ ABC*DEF
) (+(- ABC*DEF^/
* (+(-* ABC*DEF^/
G (+(-* ABC*DEF^/G
) (+ ABC*DEF^/G*-
* (+* ABC*DEF^/G*-
H (+* ABC*DEF^/G*-H
) empty ABC*DEF^/G*-H*+
D A T A S T R U C T U R E S
Evaluation of Postfix Expression:
If P is an arithmetic expression written in postfix notation. This algorithm
uses STACK to hold operands, and evaluate P.
Algorithm: This algorithm finds the VALUE of P written in postfix notation.
1. Add a Dollar Sign ‖$‖ at the end of P. [This acts as sentinel.]
2. Scan P from left to right and repeat Steps 3 and 4 for each element of P
until the sentinel ―$‖ is encountered.
3. If an operand is encountered, put it on STACK.
4. If an operator © is encountered, then:
a) Remove the two top elements of STACK, where A is the top
element and B is the next-to—top-element.
b) Evaluate B © A.
c) Place the result of (b) back on STACK.
[End of If structure.]
[End of Step 2 loop.]
5. Set VALUE equal to the top element on STACK.
6. Exit.
For example:
Following is an infix arithmetic expression
(5 + 2) * 3 – 9 / 3
And its postfix is:
5 2 + 3 * 9 3 / –
Now add “$” at the end of expression as a sentinel.
5 2 + 3 * 8 4 / – $
Scanned Elements Stack Action to do _
5 5 Pushed on stack
2 5, 2 Pushed on Stack
+ 7 Remove the two top elements and calculate
5 + 2 and push the result on stack
3 7, 3 Pushed on Stack
* 21 Remove the two top elements and calculate
7 * 3 and push the result on stack
8 21, 8 Pushed on Stack
4 21, 8, 4 Pushed on Stack
/ 21, 2 Remove the two top elements and calculate
8 / 2 and push the result on stack
- 19 Remove the two top elements and calculate
21 - 2 and push the result on stack
$ 19 Sentinel $ encouter , Result is on top of the STACK
D A T A S T R U C T U R E S
Following code will transform an infix arithmetic expression into Postfix arithmetic
expression. You will also see the Program which evaluates a Postfix expression.
// This program provides you the concepts that how an infix
// arithmetic expression will be converted into post-fix expression
// using STACK
// Conversion Infix Expression into Post-fix
// NOTE: ^ is used for raise-to-the-power
#include<iostream.h>
#include<conio.h>
#include<string.h>
int main()
{ int const null=-1;
char Q[100],P[100],stack[100];// Q is infix and P is postfix array
int n=0; // used to count item inserted in P
int c=0; // used as an index for P
int top=null; // it assign -1 to top
int k,i;
cout<<“Put an arithematic INFIX _Expressionnntt";
cin.getline(Q,99); // reads an infix expression into Q as string
k=strlen(Q); // it calculates the length of Q and store it in k
// following two lines will do initial work with Q and stack
strcat(Q,”)”); // This function add ) at the and of Q
stack[++top]='('; // This statement will push first ( on Stack
while(top!= null)
{
for(i=0;i<=k;i++)
{
switch(Q[i])
{
case '+':
case '-':
for(;;)
{
if(stack[top]!='(' )
{ P[c++]=stack[top--];n++;
} else
break;
}
stack[++top]=Q[i];
break;
case '*':
case '/':
case '%':
for(;;)
{if(stack[top]=='(' || stack[top]=='+'
|| stack[top]=='-') break;
else
{ P[c++]=stack[top--]; n++; }
}
D A T A S T R U C T U R E S
stack[++top]=Q[i];
break;
case '^':
for(;;)
{
if(stack[top]=='(' || stack[top]=='+' ||
stack[top]=='-' || stack[top]=='/' ||
stack[top]=='*' || stack[top]=='%') break;
else
{ P[c++]=stack[top--]; n++; }
}
stack[++top]=Q[i];
break;
case '(':
stack[++top]=Q[i];
break;
case ')':
for(;;)
{
if(stack[top]=='(' ) {top--; break;}
else { P[c++]=stack[top--]; n++;}
}
break;
default : // it means that read item is an operand
P[c++]=Q[i];
n++;
} //END OF SWITCH
} //END OF FOR LOOP
} //END OF WHILE LOOP
P[n]='0'; // this statement will put string terminator at the
// end of P which is Postfix expression
cout<<"nnPOSTFIX EXPRESION IS nntt"<<P<<endl;
} //END OF MAIN FUNCTION
D A T A S T R U C T U R E S
// This program provides you the concepts that how a post-fixed
// expression is evaluated using STACK. In this program you will
// see that linked structures (pointers are used to maintain the stack.
// NOTE: ^ is used for raise-to-the-power
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include<math.h>
#include <stdlib.h>
#include <ctype.h>
struct node {
int info;
struct node
*next; };
struct node *TOP = NULL;
void push (int x)
{ struct node *Q;
// in c++ Q = new node;
Q = (struct node *) malloc(sizeof(node)); // creation of new
node Q->info = x;
Q->next = NULL;
if(TOP == NULL) TOP =
Q; else
{ Q->next =
TOP; TOP=Q;
}
}
struct node* pop ()
{ struct node *Q;
if(TOP==NULL) { cout<<"nStack is emptynn";
exit(0);
}
else
{Q=TOP;
TOP = TOP->next;
return Q;
}
}
int main(void)
{char t;
struct node *Q, *A, *B;
cout<<"nn Put a post-fix arithmatic expression end with $: n ";
while(1)
{ t=getche(); // this will read one character and store it in
t if(isdigit(t)) push(t-'0'); // this will convert char into
int else if(t==' ')continue;
else if(t=='$') break;
D A T A S T R U C T U R E S
else
{ A= pop();
B= pop();
switch (t)
{
case '+':
push(B->info + A->info);
break;
case '-':
push(B->info - A->info);
break;
case '*':
push(B->info * A->info);
break;
case '/': push(B->info / A->info);
break;
case '^': push(pow(B->info, A->info));
break;
default: cout<<"Error unknown operator";
} // end of switch
} // End of if structure
} // end of while loop
Q=pop(); // this will get top value from stack which is result
cout<<"nnnThe result of this expression is = "<<Q->info<<endl;
return 0;
} // end of main function

More Related Content

What's hot (20)

PPT
Stack Operation In Data Structure
DivyeshKumar Jagatiya
 
PPTX
Application of Stack - Yadraj Meena
Dipayan Sarkar
 
PDF
High Order Function Computations in c++14 (C++ Dev Meetup Iasi)
Ovidiu Farauanu
 
PPTX
Stack - Data Structure
Bhavesh Sanghvi
 
PPTX
Monadic Computations in C++14
Ovidiu Farauanu
 
PPTX
stacks and queues
EktaVaswani2
 
PPTX
Stack_Application_Infix_Prefix.pptx
sandeep54552
 
PPTX
Stack using Linked List
Sayantan Sur
 
PPSX
Stack
Seema Sharma
 
PPT
Application of Stacks
Ain-ul-Moiz Khawaja
 
DOCX
Qprgs
Ssankett Negi
 
PPTX
Stack of Data structure
Sheikh Monirul Hasan
 
PPTX
Operation on stack
chetan handa
 
PPTX
Data structure by Digvijay
Digvijay Singh Karakoti
 
PPTX
Stack using Array
Sayantan Sur
 
PDF
STACK ( LIFO STRUCTURE) - Data Structure
Yaksh Jethva
 
PPT
Unit 5 Foc
JAYA
 
PPTX
Lambda expressions
Yuriy Seniuk
 
PPT
Stack, queue and hashing
Dumindu Pahalawatta
 
PPSX
Stacks Implementation and Examples
greatqadirgee4u
 
Stack Operation In Data Structure
DivyeshKumar Jagatiya
 
Application of Stack - Yadraj Meena
Dipayan Sarkar
 
High Order Function Computations in c++14 (C++ Dev Meetup Iasi)
Ovidiu Farauanu
 
Stack - Data Structure
Bhavesh Sanghvi
 
Monadic Computations in C++14
Ovidiu Farauanu
 
stacks and queues
EktaVaswani2
 
Stack_Application_Infix_Prefix.pptx
sandeep54552
 
Stack using Linked List
Sayantan Sur
 
Application of Stacks
Ain-ul-Moiz Khawaja
 
Stack of Data structure
Sheikh Monirul Hasan
 
Operation on stack
chetan handa
 
Data structure by Digvijay
Digvijay Singh Karakoti
 
Stack using Array
Sayantan Sur
 
STACK ( LIFO STRUCTURE) - Data Structure
Yaksh Jethva
 
Unit 5 Foc
JAYA
 
Lambda expressions
Yuriy Seniuk
 
Stack, queue and hashing
Dumindu Pahalawatta
 
Stacks Implementation and Examples
greatqadirgee4u
 

Viewers also liked (20)

PDF
Periódico Triduo Pascual
Parroquialainmaculada
 
DOC
Tecnologiafuturo
Jéssica Soria
 
PPTX
Población inicial del ecuador aborigem
Daniel Peralta
 
PPS
Presupuestos educación 2010 vs 2011
n/a
 
PPTX
TAREA6
Jéssica Soria
 
PPTX
Integradora 1
Michell-21
 
PDF
Lista de ganadores tótem 2014
letskalk
 
DOCX
Indicar
Walter Joaquin
 
DOC
Escuela tradicional escuela nueva bueno
sanb09
 
PPSX
Lugares de la Pasión
Parroquialainmaculada
 
PDF
Anexo primera infancia
Felipe Arias
 
PDF
Empleo autoempleo
laslokitas
 
PPS
Dium4adv a10cas
Jesus Garcia
 
PPTX
Trabajo de sistemas con camilo .. 8ºa
cbionet
 
PDF
ISBA iFinancia
iFinancia
 
PPTX
Proyecto UTN
institutosandiego
 
PPT
A forma xurídica
laslokitas
 
PPSX
Iniciación a la papiroplexia el barco
sorisella
 
DOCX
Adicion
carmenlizbeth
 
Periódico Triduo Pascual
Parroquialainmaculada
 
Tecnologiafuturo
Jéssica Soria
 
Población inicial del ecuador aborigem
Daniel Peralta
 
Presupuestos educación 2010 vs 2011
n/a
 
Integradora 1
Michell-21
 
Lista de ganadores tótem 2014
letskalk
 
Escuela tradicional escuela nueva bueno
sanb09
 
Lugares de la Pasión
Parroquialainmaculada
 
Anexo primera infancia
Felipe Arias
 
Empleo autoempleo
laslokitas
 
Dium4adv a10cas
Jesus Garcia
 
Trabajo de sistemas con camilo .. 8ºa
cbionet
 
ISBA iFinancia
iFinancia
 
Proyecto UTN
institutosandiego
 
A forma xurídica
laslokitas
 
Iniciación a la papiroplexia el barco
sorisella
 
Adicion
carmenlizbeth
 
Ad

Similar to Data structures stacks (20)

PDF
Stacks,queues,linked-list
pinakspatel
 
PPTX
Stacks in c++
Vineeta Garg
 
PPTX
Stacks in DATA STRUCTURE
Mandeep Singh
 
PPT
Data structure lecture7
Kumar
 
PDF
stacks and queues
DurgaDeviCbit
 
PPTX
Lec5-Stack-bukc-28022024-112316am (1) .pptx
haaamin01
 
PDF
Data structure lab manual
nikshaikh786
 
PDF
Data Structures And Algorithms(stacks queues)
lahariit406
 
PPT
Stack ppt file of Stack DSA For lab in the lab of DSA lecture and Lab.ppt
aamirali1061a
 
PPTX
Data strutcure and annalysis topic stack
MihirMishra36
 
PPTX
Stack and Queue.pptx university exam preparation
RAtna29
 
PPTX
Stack.pptx
AliRaza899305
 
PPTX
Implementation of stacks and queues in C
HarishKrishnanP
 
PPT
Stack
Tejas Patel
 
PPTX
Introduction to information about Data Structure.pptx
tarrebulehora
 
PDF
Stacks
Sadaf Ismail
 
PPTX
Stack data structure
rogineojerio020496
 
PPTX
Stacks and queues using aaray line .pptx
ramkumar649780
 
PPTX
Data Structures Stack and Queue Data Structures
poongothai11
 
PDF
Stack
Zaid Shabbir
 
Stacks,queues,linked-list
pinakspatel
 
Stacks in c++
Vineeta Garg
 
Stacks in DATA STRUCTURE
Mandeep Singh
 
Data structure lecture7
Kumar
 
stacks and queues
DurgaDeviCbit
 
Lec5-Stack-bukc-28022024-112316am (1) .pptx
haaamin01
 
Data structure lab manual
nikshaikh786
 
Data Structures And Algorithms(stacks queues)
lahariit406
 
Stack ppt file of Stack DSA For lab in the lab of DSA lecture and Lab.ppt
aamirali1061a
 
Data strutcure and annalysis topic stack
MihirMishra36
 
Stack and Queue.pptx university exam preparation
RAtna29
 
Stack.pptx
AliRaza899305
 
Implementation of stacks and queues in C
HarishKrishnanP
 
Introduction to information about Data Structure.pptx
tarrebulehora
 
Stacks
Sadaf Ismail
 
Stack data structure
rogineojerio020496
 
Stacks and queues using aaray line .pptx
ramkumar649780
 
Data Structures Stack and Queue Data Structures
poongothai11
 
Ad

More from maamir farooq (20)

DOCX
Ooad lab1
maamir farooq
 
PPT
Lesson 03
maamir farooq
 
PPT
Lesson 02
maamir farooq
 
PDF
Php client libray
maamir farooq
 
PDF
Swiftmailer
maamir farooq
 
PDF
Lect15
maamir farooq
 
PDF
Lec 7
maamir farooq
 
PPTX
Lec 6
maamir farooq
 
PDF
Lec 5
maamir farooq
 
PDF
J query 1.7 cheat sheet
maamir farooq
 
PDF
Assignment
maamir farooq
 
PDF
Java script summary
maamir farooq
 
PDF
Lec 3
maamir farooq
 
PDF
Lec 2
maamir farooq
 
PPTX
Lec 1
maamir farooq
 
PPTX
Css summary
maamir farooq
 
DOCX
Manual of image processing lab
maamir farooq
 
PDF
Session management
maamir farooq
 
PDF
Data management
maamir farooq
 
PPTX
Content provider
maamir farooq
 
Ooad lab1
maamir farooq
 
Lesson 03
maamir farooq
 
Lesson 02
maamir farooq
 
Php client libray
maamir farooq
 
Swiftmailer
maamir farooq
 
J query 1.7 cheat sheet
maamir farooq
 
Assignment
maamir farooq
 
Java script summary
maamir farooq
 
Css summary
maamir farooq
 
Manual of image processing lab
maamir farooq
 
Session management
maamir farooq
 
Data management
maamir farooq
 
Content provider
maamir farooq
 

Recently uploaded (20)

PDF
Chapter-V-DED-Entrepreneurship: Institutions Facilitating Entrepreneurship
Dayanand Huded
 
PPT
Talk on Critical Theory, Part One, Philosophy of Social Sciences
Soraj Hongladarom
 
PPTX
Stereochemistry-Optical Isomerism in organic compoundsptx
Tarannum Nadaf-Mansuri
 
PDF
0725.WHITEPAPER-UNIQUEWAYSOFPROTOTYPINGANDUXNOW.pdf
Thomas GIRARD, MA, CDP
 
PDF
DIGESTION OF CARBOHYDRATES,PROTEINS,LIPIDS
raviralanaresh2
 
PPTX
2025 Winter SWAYAM NPTEL & A Student.pptx
Utsav Yagnik
 
PDF
LAW OF CONTRACT (5 YEAR LLB & UNITARY LLB )- MODULE - 1.& 2 - LEARN THROUGH P...
APARNA T SHAIL KUMAR
 
PDF
Isharyanti-2025-Cross Language Communication in Indonesian Language
Neny Isharyanti
 
PDF
Biological Bilingual Glossary Hindi and English Medium
World of Wisdom
 
PPTX
How to Set Maximum Difference Odoo 18 POS
Celine George
 
PDF
community health nursing question paper 2.pdf
Prince kumar
 
PPTX
STAFF DEVELOPMENT AND WELFARE: MANAGEMENT
PRADEEP ABOTHU
 
PPTX
HYDROCEPHALUS: NURSING MANAGEMENT .pptx
PRADEEP ABOTHU
 
PPTX
How to Create a PDF Report in Odoo 18 - Odoo Slides
Celine George
 
PDF
BÀI TẬP BỔ TRỢ TIẾNG ANH 8 - GLOBAL SUCCESS - CẢ NĂM - NĂM 2024 (VOCABULARY, ...
Nguyen Thanh Tu Collection
 
PDF
SSHS-2025-PKLP_Quarter-1-Dr.-Kerby-Alvarez.pdf
AishahSangcopan1
 
PPSX
HEALTH ASSESSMENT (Community Health Nursing) - GNM 1st Year
Priyanshu Anand
 
PDF
LAW OF CONTRACT ( 5 YEAR LLB & UNITARY LLB)- MODULE-3 - LEARN THROUGH PICTURE
APARNA T SHAIL KUMAR
 
PPTX
MENINGITIS: NURSING MANAGEMENT, BACTERIAL MENINGITIS, VIRAL MENINGITIS.pptx
PRADEEP ABOTHU
 
PPTX
How to Convert an Opportunity into a Quotation in Odoo 18 CRM
Celine George
 
Chapter-V-DED-Entrepreneurship: Institutions Facilitating Entrepreneurship
Dayanand Huded
 
Talk on Critical Theory, Part One, Philosophy of Social Sciences
Soraj Hongladarom
 
Stereochemistry-Optical Isomerism in organic compoundsptx
Tarannum Nadaf-Mansuri
 
0725.WHITEPAPER-UNIQUEWAYSOFPROTOTYPINGANDUXNOW.pdf
Thomas GIRARD, MA, CDP
 
DIGESTION OF CARBOHYDRATES,PROTEINS,LIPIDS
raviralanaresh2
 
2025 Winter SWAYAM NPTEL & A Student.pptx
Utsav Yagnik
 
LAW OF CONTRACT (5 YEAR LLB & UNITARY LLB )- MODULE - 1.& 2 - LEARN THROUGH P...
APARNA T SHAIL KUMAR
 
Isharyanti-2025-Cross Language Communication in Indonesian Language
Neny Isharyanti
 
Biological Bilingual Glossary Hindi and English Medium
World of Wisdom
 
How to Set Maximum Difference Odoo 18 POS
Celine George
 
community health nursing question paper 2.pdf
Prince kumar
 
STAFF DEVELOPMENT AND WELFARE: MANAGEMENT
PRADEEP ABOTHU
 
HYDROCEPHALUS: NURSING MANAGEMENT .pptx
PRADEEP ABOTHU
 
How to Create a PDF Report in Odoo 18 - Odoo Slides
Celine George
 
BÀI TẬP BỔ TRỢ TIẾNG ANH 8 - GLOBAL SUCCESS - CẢ NĂM - NĂM 2024 (VOCABULARY, ...
Nguyen Thanh Tu Collection
 
SSHS-2025-PKLP_Quarter-1-Dr.-Kerby-Alvarez.pdf
AishahSangcopan1
 
HEALTH ASSESSMENT (Community Health Nursing) - GNM 1st Year
Priyanshu Anand
 
LAW OF CONTRACT ( 5 YEAR LLB & UNITARY LLB)- MODULE-3 - LEARN THROUGH PICTURE
APARNA T SHAIL KUMAR
 
MENINGITIS: NURSING MANAGEMENT, BACTERIAL MENINGITIS, VIRAL MENINGITIS.pptx
PRADEEP ABOTHU
 
How to Convert an Opportunity into a Quotation in Odoo 18 CRM
Celine George
 

Data structures stacks

  • 1. D A T A S T R U C T U R E S STACKS: It is an ordered group of homogeneous items of elements. Elements are added to and removed from the top of the stack (the most recently added items are at the top of the stack). The last element to be added is the first to be removed (LIFO: Last In, First Out). A stack is a list of elements in which an element may be inserted or deleted only at one end, called TOP of the stack. The elements are removed in reverse order of that in which they were inserted into the stack. Basic operations: These are two basic operations associated with stack:  Push() is the term used to insert/add an element into a stack.   Pop() is the term used to delete/remove an element from a stack. Other names for stacks are piles and push-down lists.  There are two ways to represent Stack in memory. One is using array and other is using linked list. Array representation of stacks: Usually the stacks are represented in the computer by a linear array. In the following algorithms/procedures of pushing and popping an item from the stacks, we have considered, a linear array STACK, a variable TOP which contain the location of the top element of the stack; and a variable STACKSIZE which gives the maximum number of elements that can be hold by the stack. STACK Data 1 Data 2 Data 3 0 1 2 3 4 5 6 7 8 TOP STACKSIZE2 9
  • 2. D A T A S T R U C T U R E S Push Operation Push an item onto the top of the stack (insert an item)
  • 3. D A T A S T R U C T U R E S Pop Operation Pop an item off the top of the stack (delete an item) Algorithm for PUSH: Algorithm: PUSH(STACK, TOP, STACKSIZE, ITEM) 1. [STACK already filled?] If TOP=STACKSIZE-1, then: Print: OVERFLOW / Stack Full, and Return. 2. Set TOP:=TOP+1. [Increase TOP by 1.] 3. Set STACK[TOP]=ITEM. [Insert ITEM in new TOP position.] 4. RETURN. Algorithm for POP: Algorithm: POP(STACK, TOP, ITEM) This procedure deletes the top element of STACK and assigns it to the variable ITEM. 1. [STACK has an item to be removed? Check for empty stack] If TOP=-1, then: Print: UNDERFLOW/ Stack is empty, and Return. 2. Set ITEM=STACK[TOP]. [Assign TOP element to ITEM.] 3. Set TOP=TOP-1. [Decrease TOP by 1.] 4. Return.
  • 4. D A T A S T R U C T U R E S Here are the minimal operations we'd need for an abstract stack (and their typical names): o Push: Places an element/value on top of the stack. o Pop: Removes value/element from top of the stack. o IsEmpty: Reports whether the stack is Empty or not. o IsFull: Reports whether the stack is Full or not. 1. Run this program and examine its behavior. // A Program that exercise the operations on Stack Implementing Array // i.e. (Push, Pop, Traverse) #include <conio.h> #include <iostream.h> #include <process.h> #define STACKSIZE 10 // int const STACKSIZE = 10; // global variable and array declaration int Top=-1; int Stack[STACKSIZE]; void Push(int); // functions prototyping int Pop(void); bool IsEmpty(void); bool IsFull(void); void Traverse(void); int main( ) { int item, choice; while( 1 ) { cout<< "nnnnn"; cout<< " ******* STACK OPERATIONS ********* nn"; cout<< " 1- Push item n 2- Pop Item n"; cout<< " 3- Traverse / Display Stack Items n 4- Exit."; cout<< " nnt Your choice ---> "; cin>> choice; switch(choice) { case 1: if(IsFull())cout<< "n Stack Full/Overflown"; else { cout<< "n Enter a number: "; cin>>item; Push(item); } break; case 2: if(IsEmpty())cout<< "n Stack is empty) n"; else {item=Pop(); cout<< "n deleted from Stack = "<<item<<endl;} break; case 3: if(IsEmpty())cout<< "n Stack is empty) n"; else { cout<< "n List of Item pushed on Stack:n"; Traverse(); } break;
  • 5. D A T A S T R U C T U R E S case 4: exit(0); default: cout<< "nnt Invalid Choice: n"; } // end of switch block } // end of while loop } // end of of main() function void Push(int item) { Stack[++Top] = item; } int Pop( ) { return Stack[Top--]; } bool IsEmpty( ) { if(Top == -1 ) return true else return false; } bool IsFull( ) { if(Top == STACKSIZE-1 ) return true else return false; } void Traverse( ) { int TopTemp = Top; do{ cout<< Stack[TopTemp--]<<endl;} while(TopTemp>= 0); } 1- Run this program and examine its behavior. // A Program that exercise the operations on Stack // Implementing POINTER (Linked Structures) (Dynamic Binding) // Programed by SHAHID LONE // This program provides you the concepts that how STACK is // implemented using Pointer/Linked Structures #include <iostream.h.h> #include <process.h> struct node { int info; struct node *next; }; struct node *TOP = NULL; void push (int x) { struct node *NewNode; NewNode = new (node); // (struct node *) malloc(sizeof(node)); if(NewNode==NULL) { cout<<"nn Memeory Crashnn"; return; } NewNode->info = x; NewNode->next = NULL;
  • 6. D A T A S T R U C T U R E S if(TOP == NULL) TOP = NewNode; else { NewNode->next = TOP; TOP=NewNode; } } struct node* pop () { struct node *T; T=TOP; TOP = TOP->next; return T; } void Traverse() { struct node *T; for( T=TOP ; T!=NULL ;T=T->next) cout<<T->info<<endl; } bool IsEmpty() { if(TOP == NULL) return true; else return false; } int main () { struct node *T; int item, ch; while(1) { cout<<"nnnnnn ***** Stack Operations *****n"; cout<<"nn 1- Push Item n 2- Pop Item n"; cout<<" 3- Traverse/Print stack-valuesn 4- Exitnn"; cout<<"n Your Choice --> "; cin>>ch; switch(ch) { case 1: cout<<"nPut a value: "; cin>>item; Push(item); break; case 2: if(IsEmpty()) {cout<<"nn Stack is Emptyn"; break; } T= Pop(); cout<< T->info <<"nn has been deleted n"; break; case 3: if(IsEmpty()) {cout<<"nn Stack is Emptyn"; break; } Traverse(); break; case 4: exit(0); } // end of switch block } // end of loop return 0; } // end of main function
  • 7. D A T A S T R U C T U R E S Application of the Stack (Arithmetic Expressions) I N F I X , P O S T F I X A N D P R E F I X N O T A T I O N S In f ix , P o s tf ix a n d P r e f ix n o ta tio n s a r e u s e d in m a n y c a lc u la to r s . T h e e a s ie s t w a y to im p le m e n t th e P o s tf ix a n d P r e f ix o p e ra tio n s is to u s e s ta c k . In f ix a n d p r e f ix n o ta tio n s c a n b e c o n v e r te d to p o s tfix n o ta tio n u s in g s ta c k . T h e r e a s o n w h y p o s tf ix n o ta tio n is p r e f e r r e d is th a t y o u d o n ’t n e e d a n y p a re n th e s is a n d th e r e is n o p r e s c ie n c e p r o b le m . Stacks are used by compilers to help in the process of converting infix to postfix arithmetic expressions and also evaluating arithmetic expressions. Arithmetic expressions consisting variables, constants, arithmetic operators and parentheses. Humans generally write expressions in which the operator is written between the operands (3 + 4, for example). This is called infix notation. Computers ―prefer‖ postfix notation in which the operator is written to the right of two operands. The preceding infix expression would appear in postfix notation as 3 4 +. To evaluate a complex infix expression, a compiler would first convert the expression to postfix notation, and then evaluate the postfix version of the expression. We use the following three levels of precedence for the five binary operations. Precedence Binary Operations Highest Exponentiations (^) Next Highest Multiplication (*), Division (/) and Mod (%) Lowest Addition (+) and Subtraction (-) For example: (66 + 2) * 5 – 567 / 42 to postfix 66 22 + 5 * 567 42 / – Transforming Infix Expression into Postfix Expression: The following algorithm transform the infix expression Q into its equivalent postfix expression P. It uses a stack to temporary hold the operators and left parenthesis. The postfix expression will be constructed from left to right using operands from Q and operators popped from STACK.
  • 8. D A T A S T R U C T U R E S Algorithm: Infix_to_PostFix(Q, P) Suppose Q is an arithmetic expression written in infix notation. This algorithm finds the equivalent postfix expression P. 1. Push ―(― onto STACK, and add ―)‖ to the end of Q. 2. Scan Q from left to right and repeat Steps 3 to 6 for each element of Q until the STACK is empty: 3. If an operand is encountered, add it to P. 4. If a left parenthesis is encountered, push it onto STACK. 5. If an operator © is encountered, then: a) Repeatedly pop from STACK and add to P each operator (on the top of STACK) which has the same or higher precedence/priority than © b) Add © to STACK. [End of If structure.] 6. If a right parenthesis is encountered, then: a) Repeatedly pop from STACK and add to P each operator (on the top of STACK) until a left parenthesis is encountered. b) Remove the left parenthesis. [Do not add the left parenthesis to P.] [End of If structure.] [End of Step 2 loop.] 7. Exit. Convert Q: A+( B * C – ( D / E ^ F ) * G ) * H into postfix form showing stack status . Now add “)” at the end of expression A+( B * C – ( D / E ^ F ) * G ) * H ) and also Push a “(“ on Stack. Symbol Scanned Stack Expression Y ( A ( A + (+ A ( (+( A B (+( AB * (+(* AB C (+(* ABC - (+(- ABC* ( (+(-( ABC* D (+(-( ABC*D / (+(-(/ ABC*D E (+(-(/ ABC*DE ^ (+(-(/^ ABC*DE F (+(-(/^ ABC*DEF ) (+(- ABC*DEF^/ * (+(-* ABC*DEF^/ G (+(-* ABC*DEF^/G ) (+ ABC*DEF^/G*- * (+* ABC*DEF^/G*- H (+* ABC*DEF^/G*-H ) empty ABC*DEF^/G*-H*+
  • 9. D A T A S T R U C T U R E S Evaluation of Postfix Expression: If P is an arithmetic expression written in postfix notation. This algorithm uses STACK to hold operands, and evaluate P. Algorithm: This algorithm finds the VALUE of P written in postfix notation. 1. Add a Dollar Sign ‖$‖ at the end of P. [This acts as sentinel.] 2. Scan P from left to right and repeat Steps 3 and 4 for each element of P until the sentinel ―$‖ is encountered. 3. If an operand is encountered, put it on STACK. 4. If an operator © is encountered, then: a) Remove the two top elements of STACK, where A is the top element and B is the next-to—top-element. b) Evaluate B © A. c) Place the result of (b) back on STACK. [End of If structure.] [End of Step 2 loop.] 5. Set VALUE equal to the top element on STACK. 6. Exit. For example: Following is an infix arithmetic expression (5 + 2) * 3 – 9 / 3 And its postfix is: 5 2 + 3 * 9 3 / – Now add “$” at the end of expression as a sentinel. 5 2 + 3 * 8 4 / – $ Scanned Elements Stack Action to do _ 5 5 Pushed on stack 2 5, 2 Pushed on Stack + 7 Remove the two top elements and calculate 5 + 2 and push the result on stack 3 7, 3 Pushed on Stack * 21 Remove the two top elements and calculate 7 * 3 and push the result on stack 8 21, 8 Pushed on Stack 4 21, 8, 4 Pushed on Stack / 21, 2 Remove the two top elements and calculate 8 / 2 and push the result on stack - 19 Remove the two top elements and calculate 21 - 2 and push the result on stack $ 19 Sentinel $ encouter , Result is on top of the STACK
  • 10. D A T A S T R U C T U R E S Following code will transform an infix arithmetic expression into Postfix arithmetic expression. You will also see the Program which evaluates a Postfix expression. // This program provides you the concepts that how an infix // arithmetic expression will be converted into post-fix expression // using STACK // Conversion Infix Expression into Post-fix // NOTE: ^ is used for raise-to-the-power #include<iostream.h> #include<conio.h> #include<string.h> int main() { int const null=-1; char Q[100],P[100],stack[100];// Q is infix and P is postfix array int n=0; // used to count item inserted in P int c=0; // used as an index for P int top=null; // it assign -1 to top int k,i; cout<<“Put an arithematic INFIX _Expressionnntt"; cin.getline(Q,99); // reads an infix expression into Q as string k=strlen(Q); // it calculates the length of Q and store it in k // following two lines will do initial work with Q and stack strcat(Q,”)”); // This function add ) at the and of Q stack[++top]='('; // This statement will push first ( on Stack while(top!= null) { for(i=0;i<=k;i++) { switch(Q[i]) { case '+': case '-': for(;;) { if(stack[top]!='(' ) { P[c++]=stack[top--];n++; } else break; } stack[++top]=Q[i]; break; case '*': case '/': case '%': for(;;) {if(stack[top]=='(' || stack[top]=='+' || stack[top]=='-') break; else { P[c++]=stack[top--]; n++; } }
  • 11. D A T A S T R U C T U R E S stack[++top]=Q[i]; break; case '^': for(;;) { if(stack[top]=='(' || stack[top]=='+' || stack[top]=='-' || stack[top]=='/' || stack[top]=='*' || stack[top]=='%') break; else { P[c++]=stack[top--]; n++; } } stack[++top]=Q[i]; break; case '(': stack[++top]=Q[i]; break; case ')': for(;;) { if(stack[top]=='(' ) {top--; break;} else { P[c++]=stack[top--]; n++;} } break; default : // it means that read item is an operand P[c++]=Q[i]; n++; } //END OF SWITCH } //END OF FOR LOOP } //END OF WHILE LOOP P[n]='0'; // this statement will put string terminator at the // end of P which is Postfix expression cout<<"nnPOSTFIX EXPRESION IS nntt"<<P<<endl; } //END OF MAIN FUNCTION
  • 12. D A T A S T R U C T U R E S // This program provides you the concepts that how a post-fixed // expression is evaluated using STACK. In this program you will // see that linked structures (pointers are used to maintain the stack. // NOTE: ^ is used for raise-to-the-power #include <stdlib.h> #include <stdio.h> #include <conio.h> #include<math.h> #include <stdlib.h> #include <ctype.h> struct node { int info; struct node *next; }; struct node *TOP = NULL; void push (int x) { struct node *Q; // in c++ Q = new node; Q = (struct node *) malloc(sizeof(node)); // creation of new node Q->info = x; Q->next = NULL; if(TOP == NULL) TOP = Q; else { Q->next = TOP; TOP=Q; } } struct node* pop () { struct node *Q; if(TOP==NULL) { cout<<"nStack is emptynn"; exit(0); } else {Q=TOP; TOP = TOP->next; return Q; } } int main(void) {char t; struct node *Q, *A, *B; cout<<"nn Put a post-fix arithmatic expression end with $: n "; while(1) { t=getche(); // this will read one character and store it in t if(isdigit(t)) push(t-'0'); // this will convert char into int else if(t==' ')continue; else if(t=='$') break;
  • 13. D A T A S T R U C T U R E S else { A= pop(); B= pop(); switch (t) { case '+': push(B->info + A->info); break; case '-': push(B->info - A->info); break; case '*': push(B->info * A->info); break; case '/': push(B->info / A->info); break; case '^': push(pow(B->info, A->info)); break; default: cout<<"Error unknown operator"; } // end of switch } // End of if structure } // end of while loop Q=pop(); // this will get top value from stack which is result cout<<"nnnThe result of this expression is = "<<Q->info<<endl; return 0; } // end of main function