0% found this document useful (0 votes)
30 views

5-Stack Using Structures-25-07-2022

A stack is a linear data structure that follows the LIFO (last-in, first-out) principle. Elements can only be inserted and removed from one end, called the top. New elements are added to the top of the stack and elements are removed from the top of the stack. Common stack operations include push to add an element and pop to remove the top element. Stacks can be implemented using arrays, linked lists, or other data structures.

Uploaded by

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

5-Stack Using Structures-25-07-2022

A stack is a linear data structure that follows the LIFO (last-in, first-out) principle. Elements can only be inserted and removed from one end, called the top. New elements are added to the top of the stack and elements are removed from the top of the stack. Common stack operations include push to add an element and pop to remove the top element. Stacks can be implemented using arrays, linked lists, or other data structures.

Uploaded by

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

Stack

Array and Linked List based


• What is a Stack?
• Stack is a linear data structure in which the
insertion and deletion operations are
performed at only one end.
• In a stack, adding and removing of elements
are performed at a single position which is
known as "top". That means, a new element is
added at top of the stack and an element is
removed from the top of the stack.
• In stack, the insertion and deletion operations
are performed based on LIFO (Last In First
Out) principle.
Stacks
• What is a Stack?
– A stack is a data structure of ordered items
such that items can be inserted and removed
only at one end.
Stacks
• What can we do with a stack?
– push - place an item on the stack
– pop - Look at the item on top of the
stack and remove it
Stack
• A stack is a data structure that stores data
in such a way that the last piece of data
stored, is the first one retrieved
– also called last-in, first-out ( LIFO )
• Only access to the stack is the top
element
Stack
• Primary operations: Push and Pop
• Push
– the operation to place a new item at the top of
the stack
• Pop
– the operation to remove the next item from
the top of the stack
Push and Pop
• Push
– Add an element to the top of the stack
• Pop
– Remove the element at the top of the stack

empty stack push an element push another pop

top
B
top top
top A A A
Stack

M
C C C
R push(M) item = pop()
R R
item = M
X X X
A A A
10
Stacks
• Problem:
– What happens if we try to pop an item off the
stack when the stack is empty?
• This is called a stack underflow. The pop method
needs some way of telling us that this has
happened.
Implementing a Stack
• At least three different ways to implement
a stack
– array
– vector
– linked list
• Which method to use depends on the
application
– what advantages and disadvantages does
each implementation have?
Implementing Stacks: Array
• Advantages
– best performance
• Disadvantage
– fixed size
• Basic implementation
– initially empty array
– field to record where the next data gets placed into
– if array is full, push() returns false
• otherwise adds it into the correct spot
– if array is empty, pop() returns null
• otherwise removes the next(top) item in the stack
Stack Class (array based)
Variable top;
Variable MAX;
variable stack[MAX];

top=-1;
max=4;

full()
empty()
push(int value)
pop()
display()
push() Method (array based)
void push(int value)
{
top++;
a[top]= value;
}
pop() Method (array based)
char pop()
{
char temp;
temp=a[top];
top--;
return temp;
}
Remaining Methods (array based)
bool full(){
bool empty(){ if (top==max)
if (top==-1) return true;
return true; else
return false;
else }
return false;
}
Remaining Methods (array based)
void display()
{
if (top==-1)
cout<<"\n No elements in stack \n";
else
{
cout<<"The elements in stack are:";
for (int i=top;i>=0;i--)
cout<<"\n"<<a[i];
}
}
Array implementation - Algorithm
begin procedure pop: stack
begin procedure push: stack, data
if stack isempty
if stack isfull
return null
return null
endif
endif
data ← stack[top]
top ← top + 1
top ← top - 1
stack[top] ← data
return data
end procedure
end procedure

begin procedure isfull begin procedure isempty

if top equals to MAXSIZE if top less than 0


return true return true
else else
return false return false
endif endif

end procedure end procedure


#include<stdio.h> switch(choice){
#include<conio.h> case 1: printf("Enter the value to be
insert: ");
#define SIZE 10 scanf("%d",&value);
push(value);
void push(int); break;
void pop(); case 2: pop();
void display(); break;
case 3: display();
int stack[SIZE], top = -1; break;
case 4: exit(0);
void main() default: printf("\nWrong selection!!! Try
{ again!!!");
int value, choice; }
clrscr(); }
while(1){ }
printf("\n\n***** MENU *****\n");
printf("1. Push\n2. Pop\n3. Display\n4. }
Exit"); }
printf("\nEnter your choice: "); }
scanf("%d",&choice);
void pop(){
if(top == -1)
printf("\nStack is Empty!!! Deletion is
void push(int value){
not possible!!!");
if(top == SIZE-1)
else{
printf("\nStack is Full!!! Insertion is not
printf("\nDeleted : %d", stack[top]);
possible!!!");
top--;
else{
}
top++;
}
stack[top] = value;
void display(){
printf("\nInsertion success!!!");
if(top == -1)
}
printf("\nStack is Empty!!!");
else{
int i;
printf("\nStack elements are:\n");
for(i=top; i>=0; i--)
printf("%d\n",stack[i]);
Implementing Stack Using
Linked List
Implementing a Stack: Linked List
• Advantages:
– always constant time to push or pop an element
– can grow to an infinite size
• Disadvantages
– the common case is the slowest of all the
implementations
– can grow to an infinite size
• Basic implementation
– list is initially empty
– push() method adds a new item to the head of the list
– pop() method removes the head of the list
Stack Class (list based)
struct NodeType {
ItemType info;
NodeType* next;
};

struct stack{
int data;
stack *link;
}*top;
First and last stack elements
• We need a data member to store the
pointer to the top of the stack

• The next element of the last node


should contain the value NULL
struct stacknode{
int data;
stacknode *next;
}*top;
Push(data)
push(int n)
{
stack *q;
q=new stack;
q->link=top;
q->data=n;
top=q;
}
Popping the top element
Popping the
top element
(cont.)

Need to use a
temporary
pointer
Pop()
pop()
{
item = topPtr->info;
tempPtr = topPtr;
topPtr = topPtr->next;
delete tempPtr;
}
#include<stdio.h>
#include<conio.h> switch(choice){
struct Node case 1: printf("Enter the value to be
{ insert: ");
int data; scanf("%d", &value);
struct Node *next; push(value);
}*top = NULL; break;
case 2: pop(); break;
void push(int); case 3: display(); break;
void pop(); case 4: exit(0);
void display(); default: printf("\nWrong selection!!!
Please try again!!!\n");
void main() }
{ }
int choice, value; }
clrscr();
printf("\n:: Stack using Linked List ::\n");
while(1){
printf("\n****** MENU ******\n");
printf("1. Push\n2. Pop\n3. Display\n4. Exit\n");
printf("Enter your choice: ");
scanf("%d",&choice);
void push(int value)
{
struct Node *newNode;
newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = value;
void display()
if(top == NULL)
{
newNode->next = NULL;
if(top == NULL)
else
printf("\nStack is Empty!!!\n");
newNode->next = top;
else{
top = newNode;
struct Node *temp = top;
printf("\nInsertion is Success!!!\n");
while(temp->next != NULL){
}
printf("%d--->",temp->data);
void pop()
temp = temp -> next;
{
}
if(top == NULL)
printf("%d--->NULL",temp->data);
printf("\nStack is Empty!!!\n");
}
else{
}
struct Node *temp = top;
printf("\nDeleted element: %d", temp->data);
top = temp->next;
free(temp);
}
}
Reverse Polish Notation
• Way of inputting numbers to a calculator
– (5 + 3) * 6 becomes 5 3 + 6 *
– 5 + 3 * 6 becomes 5 3 6 * +
• We can use a stack to implement this
– consider 5 3 + 6 *

+ 6 *
3 6
5 8 8 48

– try doing 5 3 6 * +
Stack Applications
• Stacks are a very common data structure
– compilers
• parsing data between delimiters (brackets)
– operating systems (Memory Management)
• program stack
– virtual machines
• manipulating numbers( Expression Evaluation)
– pop 2 numbers off stack, do work (such as add)
– push result back on stack and repeat
– artificial intelligence
• Back Tracking( Game playing,finding a path,
exhaustive search )

You might also like