Find the Smallest Two numbers in a given array

Given an 'N' number of elements, Find the Smallest Two numbers in a given array.


Implementation:

#include <stdio.h>
#include <stdlib.h>

/* Array size*/
#define MAX 1000000

/* Structure of Stack */
struct stack
{
 
 /* To mark the top index of the stack */
 int top;
 
 /* To store the items of the stack using array */
 int items[100];
};

/* Function to check whether the stack is empty */
int isempty(struct stack *s)
{
 
 /* Check whether the index top points to -1, if yes return 1 or else return 0 */
 return s->top==-1?1:0;
}

/* Function push to push data in to the stack */
void push(struct stack *s,int data)
{
 
 /* Increment the top index */
 s->top++;
 
 /* Insert the data in the incremented top index */
 s->items[s->top]=data;
}

/* Function printstack to print the elements of the stack */
void printstack(struct stack *s)
{
 /* Assignming top index to a temporary variable, so that index top is unchanged */
 int i=s->top;
 
 /* Traverse through the stack and print all the elements until i becomes -1 */
 for(;i>=0;i--)
  printf("%d ",s->items[i]);
}

/* Function pop() to delete the element at the top of the stack and return the deleted element */
int pop(struct stack *s)
{
 int d;
 
 /* Store the top of the element in d */
 d=s->items[s->top];
 
 /* Decrement the top position */
 s->top=s->top-1;
 
 /* Return the deleted element */
 return d;
}

/* Function smallest () to find the smallest element which is the top of the stack */
int smallest(struct stack *s)
{
 int d;
 
 /* Top of the stack is the smallest element */
 d=pop(s);
 
 /* To remove the elements in the top of the stack until we find second smallest element */
 while(d==s->items[s->top] && !(isempty(s)))
  pop(s);
  
 /* Return the smallest element */
 return d;
}

/* Function printarray() to print the array */
void printarray(int *a,int n)
{
 int i;
 for(i=0;i<n;i++)
  printf("%d ",*(a+i));
}

int main(void) {
 /* structure stack object which is used to access the member variables in the stack top, items[] */
 struct stack s;
 int n,a[MAX],i;
 
 /* initialize the top index of the stack to -1, denotes the stack is empty */
 s.top=-1;
 
 /* Get the number of elements of the array */
 scanf("%d",&n);
 
 for(i=0;i<n;i++)
 {
  /* Get the elements of the array from the user */
  scanf("%d",(a+i));
  
  /* Insert the first element of the array into the stack */
  if(isempty(&s))
  push(&s,*(a+i));
  
  /* Push the remaining elements of the array into the stack */
  else if(!(isempty(&s)))
  {
   
   /* Ensures that top element of the stack is always smallest number of the array */
   if(*(a+i)<s.items[s.top])
   {
    push(&s,*(a+i));
   }
   else
   push(&s,s.items[s.top]);
  }
 }
 
 /* Print the array */
 printarray(a,n);
 printf("\n");
 
 /* Print the stack */
 printstack(&s);
 printf("\n");
 
 /* Print the first smallest element of the array */
 printf("The First Smallest element is %d\n",smallest(&s));
 
 /* Print the second smallest element of the array */
 printf("The Second Smallest element is %d\n",smallest(&s));
 
 return 0;
}