stacks using array & linked list

Started by aruljothi, Mar 31, 2009, 11:00 AM

Previous topic - Next topic

aruljothi

Code :
*******************************************************************
      IMPLEMENTATION OF STACKS USING ARRAY & USING LINKED LIST
          -Niraj khatod ,pune
********************************************************************/

#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#define MAX 10

struct st_a{
         int topmost;
         int stack[MAX] ;
    };
struct st_a s;

struct stl{
         int data;
         struct stl*next ;
     }*top,*p,*q;


void stack_array();
void stack_llist();



void main()
{

int i,ch,ch1;
char c;
clrscr();
printf("   PROGRAM TO IMPLEMENT STACKS USING ARRAY & USING LINKED
LIST");

do{

printf("

   Select method to implement stacks...
      1.Array
   
       2.linked list
      3.Exit
        your choice: ");
scanf("%d",&ch);

switch(ch)
{
  case 1:
      stack_array();
      break;
  case 2:
      stack_llist();
      break;
  case 3:
      exit();
  default:
      printf("
Invalid choice");
      break;
}
printf("Return to main menu?y/n:");
scanf("%s",&c);
   } while(c=='y');

getch();
}


void stack_array()
{
void push_array();
void pop_array();
void display_array();

int i,ch2 ;
char c1;
printf("
   IMPLEMENTAION OF STACKS USING ARRAY

");

do
  {
   printf("
      *******MENU*******");
   printf("
      1.Push
      2.Pop
      3.Display
      4.Exit
     your choice:");
   scanf("%d",&ch2);
   switch(ch2)
   {
    case 1:
       push_array();
       break;
   case 2:
       pop_array();
       break;
    case 3:
       display_array();
       break;
    case 4:
       exit();
    default:
    printf("
Invalid choice");
      break;
   }
printf("
Want to perform another operation?y/n:");
scanf("%s",&c1);
  } while(c1=='y');

}


int  full()
{
if(s.topmost==MAX)
   return 1;
else
   return 0;
}

int empty()
{
  if(s.topmost==0)
    return 1;
  else
    return 0;
}

void push_array()
{
  int full();
  char ch3;
  s.topmost=0;
  do{
      if(full()==1)
      {
   printf("
The Stack is full!!");
   break;
      }

      else
      {
   s.topmost++;
   printf("
Enter the Element to be pushed : ");
   scanf("%d",&s.stack[s.topmost]);
   printf("
Push another element?y/n?:");
       //flushall();
   scanf("%s",&ch3);
      }
    } while(ch3=='y' || ch3=='Y');
}

void pop_array()
{
  int empty();
  char ch;
  do{
     if(empty()==1)
       {
    printf("
The Stack is Empty!!");
    break;
       }
     else
       {
    printf("%d has been POPPED!",s.stack[s.topmost]);
    s.stack[s.topmost--]=0;
    printf("
Pop other element?y/n:");
    //flushall();
    scanf("%s",&ch);
       }
    } while(ch=='y' || ch=='Y');
}


void display_array()
{
  int i;
  if(empty()==1)
     printf("
   No Records!!!!!!");
  else
    {
       printf("
The contents of the stack are....
");
       for(i=s.topmost ;i>=1; i--)
       printf("
%d",s.stack);
    }
}

/* Implementation of stacks using linked list */

void stack_llist()
{
int* push_llist(struct stl *,struct stl *);
int* pop_llist(struct stl *,struct stl *);
void display_llist(struct stl *);

int i,ch5 ;
char c5;
printf("
   IMPLEMENTAION OF STACKS USING LINKED LIST

");

do
  {
   printf("
      *****MENU*******");
   printf("
      1.Push
      2.Pop
      3.Display
      4.Exit
     your choice:");
   scanf("%d",&ch5);
   switch(ch5)
   {
    case 1:
      top=push_llist(top,p);
       break;
    case 2:
       top=pop_llist(top,q);
       break;
    case 3:
       display_llist(top);
       break;
    case 4:
       exit();
    default:
    printf("
Invalid choice");
      break;
   }
printf("
Want to perform another operation?y/n:");
scanf("%s",&c5);
}while(c5=='y');

}


int* push_llist(struct stl *top,struct stl *p)
{
void display_llist(struct stl *);

int num;
char c7;

do{
     printf("
Enter the Element to be pushed : ");
     scanf("%d",&num);
     p=malloc(sizeof(struct stl));
     p->data=num;
     p->next=NULL;

     if(top==NULL)
       top=p;

     else
       {
   p->next=top;
   top=p;
       }
   printf("
Push another element?y/n?:");
   scanf("%s",&c7);

   } while(c7=='y' || c7=='Y');
return(top);
}


int* pop_llist(struct stl *top,struct stl *q)
{
void display_llist(struct stl *);
char c8;
do{
   if(top==NULL)
     {
      printf("
List is empty!");
      break;
     }
   else
     {
      q=top;
      top=top->next;
      q->next=NULL;
      free(q);
     }
printf("
Pop other element?y/n:");
scanf("%s",&c8);

   } while(c8=='y' || c8=='Y');
return(top);
}


void display_llist(struct stl *top)
{
   if(top==NULL)
    printf("stack is empty!!");
   else
   {
    q=top;
    printf ( "
contents of stack are:
" ) ;
    while ( q!= NULL )     /* traverse the entire linked list */
       {
      printf ( "
%d ", q -> data ) ;
      q = q -> next ;
       }

   }
}