Operations on a Stack

Operations on a Stack

There are many operations that can be used to manipulate a stack. A stack is a data structure in which the operations are executed in constant time.

There are a number of operations that can be performed on a stack, but there are two major operations that are used to manipulate a stack.

These operations are:

• Push()
• Pop()

Push()

• The push operation in a stack is synonymous to insertion in a data structure.
• In simpler words, inserting a new  element in a stack is known as push.
• The time complexity of the Push() operation is O(1), i.e , it occurs in constant time.

Let us understand how a push() operation works. Let us consider we have to push a given number of elements in the stack.

The elements to be inserted are: 12 , 08 , 21 , 33 , 18 , 40.

Step 1:

• Initially we have an empty stack.
• Top = NULL.

Step 2:

• Push the element 12 in the stack.
• Top = 12

Step 3:

• Push the element 08 in the stack.
• Top = 08.

Step 4:

• Push the element 21 in the stack.
• Top = 21

Step 5:

• Push the element 33 in the stack.
• Top = 33.

Step 6:

• Push the element 18 in the stack.
• Top = 18

Step 7:

• Push the element 40 in the stack.
• Top = 40.

Step 8:

• Final stack is shown as follows.
• Top = 40

Pop()

• The Pop operation in a stack is synonymous to deletion in a data structure.
• In simpler words, deleting an existing element from a stack is known as pop.
• The time complexity of the Pop() operation is O(1), i.e , it occurs in constant time.

Let us understand how a pop() operation works. Let us consider we have to pop a given number of elements in the stack.

The elements to be deleted from the stack are : 40 , 18 , 33.

Step 1:

• The first element to be deleted from the stack is 40.
• We can see the value of top points to 40.
• We perform the pop operation and the element 40 is popped out off the stack.
• The remaining elements are shown in the image.
• Top = 18.

Step 2:

• The second element to be deleted from the stack is 18.
• We can see the value of top points to 18.
• We perform the pop operation and the element 18 is popped out off the stack.
• The remaining elements are shown in the image.
• Top = 33.

Step 3:

• The next element to be deleted from the stack is 33.
• We can see the value of top points to 33.
• We perform the pop operation and the element 33 is popped out off the stack.
• The remaining elements are shown in the image.
• Top = 21.

Code for Stack in C Program (using structure)

Run
```// C Program for Implmentation of stack (array) using structure
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>

// A structure to represent a stack
struct Stack {
int top;
int maxSize;
int* array;
};

struct Stack* create(int max)
{
struct Stack* stack = (struct Stack*)malloc(sizeof(struct Stack));
stack->maxSize = max;
stack->top = -1;
stack->array = (int*)malloc(stack->maxSize * sizeof(int));
//here above memory for array is being created
// size would be 10*4 = 40
return stack;
}

// Checking with this function is stack is full or not
// Will return true is stack is full else false
//Stack is full when top is equal to the last index
int isFull(struct Stack* stack)
{
if(stack->top == stack->maxSize - 1){
printf("Will not be able to push maxSize reached\n");
}
// Since array starts from 0, and maxSize starts from 1
return stack->top == stack->maxSize - 1;
}

// By definition the Stack is empty when top is equal to -1
// Will return true if top is -1
int isEmpty(struct Stack* stack)
{
return stack->top == -1;
}

// Push function here, inserts value in stack and increments stack top by 1
void push(struct Stack* stack, int item)
{
if (isFull(stack))
return;
stack->array[++stack->top] = item;
printf("We have pushed %d to stack\n", item);
}

// Function to remove an item from stack.  It decreases top by 1
int pop(struct Stack* stack)
{
if (isEmpty(stack))
return INT_MIN;
return stack->array[stack->top--];
}

// Function to return the top from stack without removing it
int peek(struct Stack* stack)
{
if (isEmpty(stack))
return INT_MIN;
return stack->array[stack->top];
}

int main()
{
struct Stack* stack = create(10);

push(stack, 5);
push(stack, 10);
push(stack, 15);

int flag=1;
while(flag)
{
if(!isEmpty(stack))
printf("We have popped %d from stack\n", pop(stack));
else
printf("Can't Pop stack must be empty\n");
flag=0;
}
return 0;
}```

Output :

```We have pushed 5 to stack
We have pushed 10 to stack
We have pushed 15 to stack
We have popped 15 from the stack
Do you want to Pop again? Yes: 1 No: 0
0```