Stack using Array Implementation : Push and Pop

Consider implementing a dynamically sized stack using an array.

Create a structure

struct stack

{

int * a;

int top;

int maxSize;

};

 

The structure stack has a pointer ‘a’ to a dynamically allocated array (used to hold the contents of the stack), an integer ‘maxSize’ that holds the size of this array (i.e the maximum number of data that can be held in this array) and an integer ‘top’ which stores the array index of the top element in the stack.

 

Write a program to implement push and pop operation on stack and to display the contents of the stack.

 

code:

#include<stdio.h>
#include<stdlib.h>
struct stack {
	int * a;
	int top;
	int maxSize;
};
void initstack(struct stack * p, int maxSize);
void push(struct stack * p, int item);
void display(struct stack p);
int pop(struct stack * p);
void printMenu();


int main()  {
	struct stack p;
	int data,ch, data1, m;
	printf("Enter the maximum size of the stack\n");
	scanf("%d",&m);
	initstack(&p,m);
	do {
	printMenu();	
	printf("Enter your choice\n");
	scanf("%d",&ch);
	switch(ch) {
	  case 1:
		printf("Enter the element to be pushed\n");
		scanf("%d",&data);
		push(&p, data);
		break;
	  case 2:
		data1 = pop(&p);
		if(data1 != -1000)
		printf("The popped element is %d\n",data1);
		break;
	  case 3:
		printf("The contents of the stack are");
		display(p);
		printf("\n");
		break;
	  default:
		return 0;
	}
	} while(1);
	return 0;
}

void printMenu()
{
	printf("Choice 1 : Push\n");
	printf("Choice 2 : Pop\n");
	printf("Choice 3 : Display\n");
	printf("Any other choice : Exit\n");
}

void initstack(struct stack * p, int maxSize) {
	//Fill in the code here
 int *newContents;
  newContents=malloc(sizeof(int)*maxSize);
  p->a=newContents;
  p->maxSize=maxSize;
  p->top=-1; 
}

void push(struct stack * p, int item) {
	//Fill in the code here
	 if(p->top >= p->maxSize-1)
    {
      printf("Stack is full\n");
    }
    else
    {
    p->a[++p->top]=item; 
    }
}

void display(struct stack p) {
    
	//Fill in the code here	
	 int i;
  struct stack *b=&p;
  if(b->top<0)
  {
    printf(" {}");
  }
  for(i=0;i<=b->top;i++)   
  {
    printf(" %d",b->a[i]);
  }
}

int pop(struct stack * p) {
	//Fill in the code here if(StackIsEmpty(p))
    if(p->top<0)
    {
      printf("Stack is empty\n");
      return -1000;
    }
  else
    return p->a[p->top--];   
}

Buy now at Amazon

Leave a Reply

Your email address will not be published. Required fields are marked *