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 stackn");
	scanf("%d",&m);
	initstack(&p,m);
	do {
	printMenu();	
	printf("Enter your choicen");
	scanf("%d",&ch);
	switch(ch) {
	  case 1:
		printf("Enter the element to be pushedn");
		scanf("%d",&data);
		push(&p, data);
		break;
	  case 2:
		data1 = pop(&p);
		if(data1 != -1000)
		printf("The popped element is %dn",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 : Pushn");
	printf("Choice 2 : Popn");
	printf("Choice 3 : Displayn");
	printf("Any other choice : Exitn");
}

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 fulln");
    }
    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 emptyn");
      return -1000;
    }
  else
    return p->a[p->top--];   
}

Leave a Reply

Shopping cart