Friday, January 14, 2011

Data Structure OPERATION Programes

/* IMPLEMENTATION OF THE STACK USING ARRAYS */

# include

# include

# include

# include

# define size 100

int top = -1;

int flag = 0;

int stack[size];

void push(int *, int);

int pop(int *);

int peep(int *);

int update (int *);

void display(int *);

/* Definition of the push function */

void push(int s[], int d)

{

if(top ==(size-1))

flag = 0;

else

{

flag = 1;

++top;

s[top] = d;

}

}

/* Definition of the pop function */

int pop(int s[])

{

int popped_element;

if(top == -1)

{

popped_element = 0;

flag = 0;

}

else

{

flag = 1;

popped_element = s[top];

--top;

}

return (popped_element);

}

/* Definition of the push function */

int peep(int s[])

{

int i;

int peep_element;

printf("\n Input the information number to which you want to see: ");

scanf("%d", &i);

if(top - i + 1 <>

{

peep_element = 0;

flag = 0;

}

else

{

flag = 1;

peep_element = s[top - i + 1];

}

return (peep_element);

}

/* Definition of the change function */

int update(int s[])

{

int i;

int update_element;

printf("\n Input the information number to which you want to update: ");

scanf("%d", &i);

if(top - i + 1 <>

{

update_element = 0;

flag = 0;

}

else

{

flag = 1;

update_element = s[top-i +1];

printf("\n Input the new value: ");

scanf("%d", &s[top-i+1]);

}

return (update_element);

}

/* Definition of the display function */

void display(int s[])

{

int i;

if(top == -1)

printf("\n Stack is empty");

else

{

for(i = top; i >= 0; --i)

printf("\n %d", s[i] );

}

}

/* Function main */

void main()

{

int data;

char choice;

int q = 0;

int top = -1;

clrscr();

do

{

printf("\n\nPush->i Pop->p Peep->e Change->u Quit->q:");

printf("\nInput the choice : ");

do

{

choice = getchar();

choice = tolower(choice);

}

while(strchr("ipeuq",choice)==NULL);

printf("Your choice is: %c",choice);

switch(choice)

{

case 'i' :

printf("\n Input the element to push:");

scanf("%d", &data);

push(stack, data);

if(flag)

{

printf("\n After inserting ");

display(stack);

if(top == (size-1))

printf("\n Stack is full");

}

else

printf("\n Stack overflow after pushing");

break;

case 'p' :

data = pop(stack);

if(flag)

{

printf("\n Data is popped: %d", data);

printf("\n Rest data in stack is as follows:\n");

display(stack);

}

else

printf("\n Stack underflow" );

break;

case 'e' :

data = peep(stack);

if(flag)

{

printf("\n Data is peepped: %d", data);

printf("\n Stack is as follows:\n");

display(stack);

}

else

printf("\n Stack underflow");

break;

case 'u' :

data = update(stack);

if(flag)

{

printf("\n Data is peepped: %d", data);

printf("\n Stack is as follows:\n");

display(stack);

}

else

printf("\n Stack underflow");

break;

case 'q':

q = 1;

}

}

while(!q);

}

/* STACK IMPLEMENTATION USING LINKED LIST */

# include

# include

struct link

{

int info;

struct link *next;

} *start;

void display(struct link *);

struct link *push(struct link *);

struct link *pop(struct link *);

int main_menu();

void display(struct link *rec)

{

while(rec != NULL)

{

printf(" %d ",rec->info);

rec = rec->next;

}

}

struct link * push(struct link *rec)

{

struct link *new_rec;

printf("\n Input the new value for next location of the stack:");

new_rec = (struct link *)malloc(sizeof(struct link));

scanf("%d", &new_rec->info);

new_rec->next = rec;

rec = new_rec;

return(rec);

}

struct link * pop(struct link *rec)

{

struct link *temp;

if(rec == NULL)

printf("\n Stack is empty");

else

{

temp = rec->next;

free(rec);

rec = temp;

printf("\n After pop operation the stack is as follows:\n");

display(rec);

if(rec == NULL)

printf("\n Stack is empty");

}

return(rec);

}

int main_menu ()

{

int choice;

do

{

printf("\n 1<-Push ");

printf("\n 2<-Pop");

printf("\n 3<-Quit");

printf("\n Input your choice :");

scanf("%d", &choice);

if(choice <1>3)

printf("\n Incorrect choice-> Try once again");

}

while(choice <1>3);

return(choice);

}

/* main function */

void main()

{

struct link *start ;

int choice;

start = NULL;

do

{

choice = main_menu();

switch(choice)

{

case 1:

start = push(start);

printf("\n After push operation stack is as follows:\n");

display(start);

break;

case 2:

start = pop(start);

break;

default :

printf("\n End of session");

}

}

while(choice != 3);

}

/*DOUBLI LINKLIST */

#include

#include

struct linklist

{

struct linklist *llink;

int no;

struct linklist *rlink;

};

typedef struct linklist node;

node *creat(node *,int);

node *front_insert(node *,int );

node *middle_insert(node *,int ,int );

node *end_insert(node *,int );

node *front_delete(node *);

node *middle_delete(node *,int);

node *end_delete(node *);

void search(node *,int );

void count(node *);

void copy(node *);

node *sort(node *);

void reverse(node *);

void display(node *);

int flag=1;

void main()

{

node *head,*t;

int n,i,ch,x,ich,dch;

clrscr();

head=NULL;

menu:

clrscr();

printf("\n\n\n\n\t\t\t\tMENU");

printf("\n\t\t\t1.Create");

printf("\n\t\t\t2.Insert");

printf("\n\t\t\t3.Delete");

printf("\n\t\t\t4.Search");

printf("\n\t\t\t5.Display");

printf("\n\t\t\t6.Count");

printf("\n\t\t\t7.Copy");

printf("\n\t\t\t8.Sort");

printf("\n\t\t\t9.Reverse");

printf("\n\t\t\t0.Exit");

printf("\n\n\nEnter your choice: ");

scanf("%d",&ch);

switch(ch)

{

case 1:

head=NULL;

printf("How many elements you want to enter: ");

scanf("%d",&n);

for(i=0;i

{

printf("Enter the element: ");

scanf("%d",&x);

head=creat(head,x);

}

break;

case 2:

goto insertmenu;

case 3:

goto deletemenu;

case 4:

printf("Which element you want to search: ");

scanf("%d",&x);

search(head,x);

break;

case 5:

display(head);

break;

case 6:

count(head);

break;

case 7:

copy(head);

break;

case 8:

sort(head);

printf("\n\n\nSorting is perform successfully...");

break;

case 9:

reverse(head);

printf("\n\n\nReverse is perform successfully...");

break;

case 0:

exit(1);

default :

printf("\n\nInvalid choice...");

break;

}

printf("\n\n\nPress any key to continue...");

getch();

goto menu;

insertmenu:

clrscr();

printf("\n\n\n\n\t\t\t\tMENU");

printf("\n\t\t\t1.Insert at Front");

printf("\n\t\t\t2.Insert in Middle");

printf("\n\t\t\t3.Insert at End");

printf("\n\t\t\t4.Back to main menu");

printf("\n\n\nEnter your choice: ");

scanf("%d",&ich);

switch(ich)

{

case 1:

printf("Enter any no.: ");

scanf("%d",&n);

head=front_insert(head,n);

break;

case 2:

printf("Enter any no.: ");

scanf("%d",&n);

printf("After which element: ");

scanf("%d",&x);

head=middle_insert(head,n,x);

break;

case 3:

printf("Enter any no.: ");

scanf("%d",&n);

head=end_insert(head,n);

break;

case 4:

goto menu;

default :

printf("\n\nInvalid choice...");

break;

}

printf("\n\nSuccessfully Inserted...");

printf("\n\n\nPress any key to continue...");

getch();

goto insertmenu;

deletemenu:

flag=1;

clrscr();

printf("\n\n\n\n\t\t\t\tMENU");

printf("\n\t\t\t1.Delete from Front");

printf("\n\t\t\t2.Delete from Middle");

printf("\n\t\t\t3.Delete from End");

printf("\n\t\t\t4.Back to main menu");

printf("\n\n\nEnter your choice :");

scanf("%d",&dch);

switch(dch)

{

case 1:

head=front_delete (head);

break;

case 2:

printf("Which element you want to delete: ");

scanf("%d",&x);

head=middle_delete (head,x);

break;

case 3:

head=end_delete (head);

break;

case 4:

goto menu;

default :

printf("\n\nInvalid choice...");

break;

}

if(flag==1)

printf("\n\nSuccessfully Deleted...");

printf("\n\n\nPress any key to continue...");

getch();

goto deletemenu;

}

node *creat(node *head,int n)

{

node *temp,*new1;

temp=head;

new1=(node *)malloc(sizeof(node));

if(head==NULL)

{

new1->llink=new1;

new1->no=n;

new1->rlink=new1;

head=new1;

}

else

{

temp=head;

while(temp->rlink!=head)

temp=temp->rlink;

new1->no=n;

new1->llink=temp;

new1->rlink=head;

temp->rlink=new1;

head->llink=new1;

}

return(head);

}

node *front_insert(node *head,int n)

{

node *new1,*temp;

new1=(node *)malloc(sizeof(node));

if(head==NULL)

{

new1->llink=head;

new1->no=n;

new1->rlink=head;

head=new1;

}

else

{

temp=head;

while(temp->rlink!=head)

temp=temp->rlink;

new1->no=n;

new1->rlink=head;

head->llink=new1;

temp->rlink=new1;

new1->llink=temp;

head=new1;

}

return(head);

}

node *middle_insert(node *head,int n,int x)

{

node *temp,*new1;

temp=head;

new1=(node *)malloc(sizeof(node));

if(head==NULL)

{

printf("List is Empty...\n Cann't insert in Middle...");

return(head);

}

else

{

temp=head;

while(temp->no!=x)

temp=temp->rlink;

new1->no=n;

new1->rlink=temp->rlink;

temp->rlink->llink=new1;

temp->rlink=new1;

new1->llink=temp;

}

return(head);

}

node *end_insert(node *head,int n)

{

node *temp,*new1;

temp=head;

new1=(node *)malloc(sizeof(node));

if(head==NULL)

{

new1->llink=head;

new1->no=n;

new1->rlink=head;

head=new1;

return(head);

}

else

{

temp=head;

while(temp->rlink!=head)

temp=temp->rlink;

new1->no=n;

new1->llink=temp;

temp->rlink=new1;

new1->rlink=head;

head->llink=new1;

}

return(head);

}

node *front_delete (node *head)

{

node *temp,*htemp;

if(head==NULL)

{

printf("List is empty...\n Cann't Delete...");

return(head);

}

else

{

temp=head;

htemp=head;

while(temp->rlink!=head)

temp=temp->rlink;

head=htemp->rlink;

head->llink=temp;

temp->rlink=head;

free(temp);

}

return(head);

}

node *middle_delete (node *head,int x)

{

node *temp,*temp1;

temp=head;

if(head==NULL)

{

printf("List is Empty....\n Cann't delete from Middle...");

return(head);

}

else

{

temp=head;

while((temp->rlink->no!=x)&&(temp!=NULL))

{

if (temp->rlink->rlink->no==x)

flag=1;

else

flag=0;

temp=temp->rlink;

}

if (flag==1)

{

temp->rlink=temp->rlink->rlink;

temp1=temp->rlink->rlink;

temp1->llink=temp;

}

else

printf("\n\n\nGiven node is not exist in list..." );

}

return(head);

}

node *end_delete (node *head)

{

node *temp;

temp=head;

if(head==NULL)

{

printf("List is Empty....\n Cann't Delete ...");

return(head);

}

else

{

temp=head;

while(temp->rlink->rlink!=head)

temp=temp->rlink;

temp->rlink=head;

}

return(head);

}

void search(node *head,int x)

{

node *temp;

int c=1,flag=0;

temp=head;

while((flag==0)&&(temp->rlink!=head))

{

if (temp->no==x)

{

flag=1;

break ;

}

temp=temp->rlink;

c++;

}

if (flag==1)

printf("\n\nGiven element is stored at %d position in list...",c);

else

printf("\n\nElement %d is not in the linklist...",x);

}

void count(node *head)

{

node *temp;

int c=0;

temp=head;

do

{

temp=temp->rlink;

c++;

}

while(temp!=head);

printf("Total elements in list are %d... ",c);

}

void copy(node *head)

{

node *temp,*new1=NULL,*head1=NULL,*temp1;

temp=head;

while(temp!=NULL)

{

new1=(node *)malloc(sizeof(node));

new1->llink=NULL;

new1->no=temp->no;

new1->rlink=NULL;

temp=temp->rlink;

if (head1==NULL)

head1=new1;

else

{

temp1=head1;

while(temp1->rlink!=NULL)

temp1=temp1->rlink;

temp1->rlink=new1;

new1->llink=temp1;

}

}

printf("\n\nOriginal link list is: ");

display(head);

printf("\n\nNew copied link list is: ");

display(head1);

}

node *sort(node *head)

{

node *temp,*temp1,*temp2;

int no1;

temp=head;

do

{

temp1=temp;

temp2=temp->rlink;

do

{

if(temp->no>temp2->no)

{

no1=temp->no;

temp->no=temp2->no;

temp2->no=no1;

}

temp2=temp2->rlink;

temp1=temp1->rlink;

}

while(temp2!=head);

temp=temp->rlink;

}

while(temp->rlink!=head);

return(head);

}

void reverse(node *head)

{

node *temp,*new1,*head1,*htemp;

temp=head;

do

{

if(temp==head)

{

new1=(node *)malloc(sizeof(node));

new1->llink=new1;

new1->no=temp->no;

new1->rlink=new1;

head1=new1;

}

else

{

htemp=head1;

while(htemp->rlink!=head1)

htemp=htemp->rlink;

new1=(node *)malloc(sizeof(node));

new1->no=temp->no;

new1->rlink=head1;

new1->llink=htemp;

htemp->rlink=new1;

head1->llink=new1;

head1=new1;

}

temp=temp->rlink;

}

while(temp!=head);

printf("\n\nOriginal link list is: ");

display(head);

printf("\n\nReverse link list is: ");

display(head1);

}

void display(node *head)

{

node *temp;

temp=head;

do

{

printf("%d ->",temp->no);

temp=temp->rlink;

}

while(temp!=head);

printf("NULL");

}

/* SINGLE LINK LIST */

#include

#include

struct linklist

{

int no;

struct linklist *next;

};

typedef struct linklist node;

node *creat(node *,int);

node *front_insert(node *,int );

node *middle_insert(node *,int ,int );

node *end_insert(node *,int );

node *front_delete(node *);

node *middle_delete(node *,int);

node *end_delete(node *);

node *sort(node *);

void search(node *,int );

void count(node *);

void copy(node *);

void reverse(node *);

void display(node *);

int flag=1;

void main()

{

node *head,*t;

int n,i,ch,x,ich,dch;

clrscr();

head=NULL;

menu:

clrscr();

printf("\n\n\n\n\t\t\t\tMENU");

printf("\n\t\t\t1.Create");

printf("\n\t\t\t2.Insert");

printf("\n\t\t\t3.Delete");

printf("\n\t\t\t4.Search");

printf("\n\t\t\t5.Display");

printf("\n\t\t\t6.Count");

printf("\n\t\t\t7.Copy");

printf("\n\t\t\t8.Sort");

printf("\n\t\t\t9.Reverse");

printf("\n\t\t\t0.Exit");

printf("\n\n\nEnter your choice: ");

scanf("%d",&ch);

switch(ch)

{

case 1:

printf("How many elements you want to enter: ");

scanf("%d",&n);

for(i=0;i

{

printf("Enter the element: ");

scanf("%d",&x);

head=creat(head,x);

}

break;

case 2:

goto insertmenu;

case 3:

goto deletemenu;

case 4:

printf("Which element you want to search: ");

scanf("%d",&x);

search(head,x);

break;

case 5:

display(head);

break;

case 6:

count(head);

break;

case 7:

copy(head);

break;

case 8:

sort(head);

printf("\n\n\nSorting is performed successfully...");

break;

case 9:

reverse(head);

break;

case 0 :

exit(1);

default :

printf("\n\nInvalid choice...");

break;

}

printf("\n\n\nPress any key to continue...");

getch();

goto menu;

insertmenu:

clrscr();

printf("\n\n\n\n\t\t\t\tMENU");

printf("\n\t\t\t1.Insert at Front");

printf("\n\t\t\t2.Insert in Middle");

printf("\n\t\t\t3.Insert at End");

printf("\n\t\t\t4.Back to main menu");

printf("\n\n\nEnter your choice: ");

scanf("%d",&ich);

switch(ich)

{

case 1:

printf("Enter any no.: ");

scanf("%d",&n);

head=front_insert(head,n);

break;

case 2:

printf("Enter any no.: ");

scanf("%d",&n);

printf("After which element: ");

scanf("%d",&x);

head=middle_insert(head,n,x);

break;

case 3:

printf("Enter any no.: ");

scanf("%d",&n);

head=end_insert(head,n);

break;

case 4:

goto menu;

default :

printf("\n\nInvalid choice...");

break;

}

printf("\n\nSuccessfully Inserted...");

printf("\n\n\nPress any key to continue...");

getch();

goto insertmenu;

deletemenu:

flag=1;

clrscr();

printf("\n\n\n\n\t\t\t\tMENU");

printf("\n\t\t\t1.Delete from Front");

printf("\n\t\t\t2.Delete from Middle");

printf("\n\t\t\t3.Delete from End");

printf("\n\t\t\t4.Back to main menu");

printf("\n\n\nEnter your choice: ");

scanf("%d",&dch);

switch(dch)

{

case 1:

head=front_delete (head);

break;

case 2:

printf("Which element you want to delete: ");

scanf("%d",&x);

head=middle_delete (head,x);

break;

case 3:

head=end_delete (head);

break;

case 4:

goto menu;

default :

printf("\n\nInvalid choice...");

break;

}

if(flag==1)

printf("\n\nSuccessfully Deleted...");

printf("\n\n\nPress any key to continue...");

getch();

goto deletemenu;

}

node *creat(node *head,int n)

{

node *temp,*new1;

temp=head;

new1=(node *)malloc(sizeof(node));

if(head==NULL)

{

new1->no=n;

new1->next=new1;

head=new1;

}

else

{

temp=head;

while(temp->next!=head)

temp=temp->next;

new1->no=n;

new1->next=head;

temp->next=new1;

}

return(head);

}

node *front_insert(node *head,int n)

{

node *new1,*temp;

new1=(node *)malloc(sizeof(node));

if(head==NULL)

{

new1->no=n;

new1->next=head;

head=new1;

}

else

{

temp=head;

while(temp->next!=head)

temp=temp->next;

new1->no=n;

new1->next=head;

head=new1;

temp->next=head;

}

return(head);

}

node *middle_insert(node *head,int n,int x)

{

node *temp,*new1;

temp=head;

new1=(node *)malloc(sizeof(node));

if(head==NULL)

{

printf("List is Empty...\n Cann't Insert in Middle...");

return(head);

}

else

{

temp=head;

while(temp->no!=x)

temp=temp->next;

new1->no=n;

new1->next=temp->next;

temp->next=new1;

}

return(head);

}

node *end_insert(node *head,int n)

{

node *temp,*new1;

temp=head;

new1=(node *)malloc(sizeof(node));

if(head==NULL)

{

new1->no=n;

new1->next=head;

head=new1;

return(head);

}

else

{

temp=head;

while(temp->next!=head)

temp=temp->next;

new1->no=n;

temp->next=new1;

new1->next=head;

}

return(head);

}

node *front_delete (node *head)

{

node *temp,*htemp;

if(head==NULL)

{

printf("List is Empty...\n Cann't Delete...");

return(head);

}

else

{

temp=head;

htemp=head;

while(temp->next!=head)

temp=temp->next;

head=htemp->next;

temp->next=head;

free(temp);

}

return(head);

}

node *middle_delete (node *head,int x)

{

node *temp;

temp=head;

if(head==NULL)

{

printf("List is Empty...\n Cann't Delete from Middle...");

return(head);

}

else

{

temp=head;

while((temp->next->no!=x)&&(temp!=NULL))

{

if (temp->next->next->no==x)

flag=1;

else

flag=0;

temp=temp->next;

}

if (flag==1)

temp->next=temp->next->next;

else

printf("\n\n\nGiven node is not exist in list..." );

}

return(head);

}

node *end_delete (node *head)

{

node *temp;

temp=head;

if(head==NULL)

{

printf("List is Empty....\n Cann't Delete ...");

return(head);

}

else

{

temp=head;

while(temp->next->next!=head)

temp=temp->next;

temp->next=head;

}

return(head);

}

void search(node *head,int x)

{

node *temp;

int c=1,flag=0;

temp=head;

while((flag==0)&&(temp->next!=head))

{

if (temp->no==x)

{

flag=1;

break ;

}

temp=temp->next;

c++;

}

if (flag==1)

printf("\n\nGiven element is stored at %d position in list...",c);

else

printf("\n\nElement %d is not in the linklist...",x);

}

void count(node *head)

{

node *temp;

int c=0;

temp=head;

do

{

temp=temp->next;

c++;

}

while(temp!=head);

printf("Total elements in list are %d... ",c);

}

void copy(node *head)

{

node *temp,*new1=NULL,*head1=NULL,*temp1;

temp=head;

do

{

new1=(node *)malloc(sizeof(node));

new1->no=temp->no;

if (head1==NULL)

{

new1->next=new1;

head1=new1;

}

else

{

temp1=head1;

while(temp1->next!=head1)

temp1=temp1->next;

temp1->next=new1;

new1->next=head1;

}

temp=temp->next;

}

while(temp!=head);

printf("\n\nOriginal link list is: ");

display(head);

printf("\n\nNew copied link list is: ");

display(head1);

}

node *sort(node *head)

{

node *temp,*temp1,*temp2;

int no1;

temp=head;

while(temp->next!=head)

{

temp2=temp;

temp1=temp->next;

while(temp1!=head)

{

if(temp->no>temp1->no)

{

no1=temp->no;

temp->no=temp1->no;

temp1->no=no1;

}

temp2=temp2->next;

temp1=temp2->next;

}

temp=temp->next;

}

return(head);

}

void reverse(node *head)

{

node *temp,*new1,*head1,*temp1;

temp=head;

do

{

if(temp==head)

{

new1=(node *)malloc(sizeof(node));

new1->no=temp->no;

new1->next=new1;

head1=new1;

}

else

{ temp1=head1;

new1=(node *)malloc(sizeof(node));

new1->no=temp->no;

new1->next=head1;

while(temp1->next!=head1)

temp1=temp1->next;

temp1->next=new1;

head1=new1;

}

temp=temp->next;

}

while(temp!=head);

printf("\n\nOriginal link list is: ");

display(head);

printf("\n\nReverse link list is: ");

display(head1);

}

void display(node *head)

{

node *temp;

temp=head;

do

{

printf("%d ->",temp->no);

temp=temp->next;

}

while(temp!=head);

printf("NULL");

}

/* DOUBLI LINK LIST PERATIONS */

#include

#include

struct linklist

{

struct linklist *llink;

int no;

struct linklist *rlink;

};

typedef struct linklist node;

node *creat(node *,int);

node *concate(node *,node *);

node *merge(node *,node *);

node *union1(node *head1,node *head2);

node *intersec(node *head1,node *head2);

node *sort(node *);

void display(node *);

int flag=1;

void main()

{

node *head1,*head2,*head3,*t;

int n,i,ch,x,ich,dch;

clrscr();

head1=head2=NULL;

menu:

clrscr();

printf("\n\n\n\n\t\t\t\tMENU");

printf("\n\t\t\t1.Create");

printf("\n\t\t\t2.Concate");

printf("\n\t\t\t3.Merge");

printf("\n\t\t\t4.Union");

printf("\n\t\t\t5.Intersection");

printf("\n\t\t\t6.Exit");

printf("\n\n\nEnter your choice: ");

scanf("%d",&ch);

switch(ch)

{

case 1:

printf("How many elements in first linklist: ");

scanf("%d",&n);

for(i=0;i

{

printf("Enter the element: ");

scanf("%d",&x);

head1=creat(head1,x);

}

printf("How many elements in second linklist: ");

scanf("%d",&n);

for(i=0;i

{

printf("Enter the element: ");

scanf("%d",&x);

head2=creat(head2,x);

}

printf("\n\nFirst link list is: ");

display(head1);

printf("\n\nSecond link list is: ");

display(head2);

break;

case 2:

printf("\n\nFirst link list is: ");

display(head1);

printf("\n\nSecond link list is: ");

display(head2);

printf("\n\nFirst link list after concatenation is: ");

head1=concate(head1,head2);

display(head1);

break;

case 3:

printf("\n\nFirst link list is: ");

display(head1);

printf("\n\nSecond link list is: ");

display(head2);

printf("\n\nFirst link list after merging is: ");

head1=merge(head1,head2);

display(head1);

break;

case 4:

printf("\n\nFirst link list is: ");

display(head1);

printf("\n\nSecond link list is: ");

display(head2);

printf("\n\nResultant Union link list is: ");

head3=union1(head1,head2);

display(head3);

break;

case 5:

printf("\n\nFirst link list is: ");

display(head1);

printf("\n\nSecond link list is: ");

display(head2);

printf("\n\nResultant Intersection link list is: ");

head3=intersec(head1,head2);

display(head3);

break;

case 6:

exit(1);

default :

printf("\n\nInvalid choice...");

break;

}

printf("\n\n\nPress any key to continue...");

getch();

goto menu;

}

node *creat(node *head,int n)

{

node *temp,*new1;

temp=head;

new1=(node *)malloc(sizeof(node));

if(head==NULL)

{

new1->llink=NULL;

new1->no=n;

new1->rlink=NULL;

head=new1;

}

else

{

temp=head;

while(temp->rlink!=NULL)

temp=temp->rlink;

new1->no=n;

new1->rlink=NULL;

temp->rlink=new1;

new1->llink=temp;

}

return(head);

}

node *concate(node *head1,node *head2)

{

node *temp,*temp1,*new1;

temp=head1;

temp1=head2;

while(temp->rlink!=NULL)

temp=temp->rlink;

while(temp1!=NULL)

{

new1=(node *)malloc(sizeof(node));

new1->no=temp1->no;

new1->rlink=NULL;

temp->rlink=new1;

new1->llink=temp;

temp1=temp1->rlink;

temp=temp->rlink;

}

return(head1);

}

node *merge(node *head1,node *head2)

{

node *head;

head=concate(head1,head2);

sort(head);

return(head);

}

node *sort(node *head)

{

node *temp,*temp1,*temp2;

int no1;

temp=head;

while(temp!=NULL)

{

temp2=temp;

temp1=temp->rlink;

while(temp1!=NULL)

{

if(temp->no>temp1->no)

{

no1=temp->no;

temp->no=temp1->no;

temp1->no=no1;

}

temp2=temp2->rlink;

temp1=temp2->rlink;

}

temp=temp->rlink;

}

return(head);

}

node *union1(node *head1,node *head2)

{

node *temp1,*temp2,*head=NULL,*temp,*new1;

temp1=head1;

while(temp1!=NULL)

{

new1=(node *)malloc(sizeof(node));

if(head==NULL)

{

new1->llink=NULL;

new1->no=temp1->no;

new1->rlink=NULL;

head=new1;

}

else

{

temp=head;

while(temp->rlink!=NULL)

temp=temp->rlink;

new1->no=temp1->no;

new1->rlink=NULL;

temp->rlink=new1;

new1->llink=temp;

}

temp1=temp1->rlink;

}

temp=temp->rlink;

temp2=head2;

while(temp2!=NULL)

{

temp1=head1;

while(temp1!=NULL)

{

if(temp1->no==temp2->no)

{

flag=0;

break;

}

else

flag=1;

temp1=temp1->rlink;

}

if(flag==1)

{

new1=(node *)malloc(sizeof(node));

new1->no=temp2->no;

new1->rlink=NULL;

new1->llink=temp;

temp->rlink=new1;

temp=temp->rlink;

}

temp2=temp2->rlink;

}

return(head);

}

node *intersec(node *head1,node *head2)

{

node *temp1,*temp2,*head=NULL,*temp,*new1;

temp2=head2;

while(temp2!=NULL)

{

temp1=head1;

while(temp1!=NULL)

{

if(temp1->no==temp2->no)

{

flag=1;

break;

}

else

flag=0;

temp1=temp1->rlink;

}

if(flag==1)

{

new1=(node *)malloc(sizeof(node));

if(head==NULL)

{

new1->llink=NULL;

new1->no=temp1->no;

new1->rlink=NULL;

head=new1;

}

else

{

temp=head;

while(temp->rlink!=NULL)

temp=temp->rlink;

new1->no=temp2->no;

new1->rlink=NULL;

new1->llink=temp;

temp->rlink=new1;

temp=temp->rlink;

}

}

temp2=temp2->rlink;

}

return(head);

}

void display(node *head)

{

node *temp;

temp=head;

while(temp!=NULL)

{

printf("%d ->",temp->no);

temp=temp->rlink;

}

printf("NULL");

}

/* DOUBLI LINK LIST PERATIONS */

#include

#include

struct linklist

{

int no;

struct linklist *next;

};

typedef struct linklist node;

node *creat(node *,int);

node *concate(node *,node *);

node *merge(node *,node *);

node *union1(node *head1,node *head2);

node *intersec(node *head1,node *head2);

node *sort(node *);

void display(node *);

int flag=1;

void main()

{

node *head1,*head2,*head3,*t;

int n,i,ch,x,ich,dch;

clrscr();

head1=head2=NULL;

menu:

clrscr();

printf("\n\n\n\n\t\t\t\tMENU");

printf("\n\t\t\t1.Create");

printf("\n\t\t\t2.Concate");

printf("\n\t\t\t3.Merge");

printf("\n\t\t\t4.Union");

printf("\n\t\t\t5.Intersection");

printf("\n\t\t\t6.Exit");

printf("\n\n\nEnter your choice :");

scanf("%d",&ch);

switch(ch)

{

case 1:

printf("How many elements in first linklist: ");

scanf("%d",&n);

for(i=0;i

{

printf("Enter the element: ");

scanf("%d",&x);

head1=creat(head1,x);

}

printf("How many elements in second linklist: ");

scanf("%d",&n);

for(i=0;i

{

printf("Enter the element: ");

scanf("%d",&x);

head2=creat(head2,x);

}

printf("\n\nFirst link list is: ");

display(head1);

printf("\n\nSecond link list is: ");

display(head2);

break;

case 2:

printf("\n\nFirst link list is: ");

display(head1);

printf("\n\nSecond link list is: ");

display(head2);

printf("\n\nFirst link list after concatination is: ");

head1=concate(head1,head2);

display(head1);

break;

case 3:

printf("\n\nFirst link list is: ");

display(head1);

printf("\n\nSecond link list is: ");

display(head2);

printf("\n\nFirst link list after merging is: ");

head1=merge(head1,head2);

display(head1);

break;

case 4:

printf("\n\nFirst link list is: ");

display(head1);

printf("\n\nSecond link list is: ");

display(head2);

printf("\n\nResultant Union link list is: ");

head3=union1(head1,head2);

display(head3);

break;

case 5:

printf("\n\nFirst link list is: ");

display(head1);

printf("\n\nSecond link list is: ");

display(head2);

printf("\n\nResultant Intersection link list is: ");

head3=intersec(head1,head2);

display(head3);

break;

case 6 :

exit(1);

default :

printf("\n\nInvalid choice...");

break;

}

printf("\n\n\nPress any key to continue...");

getch();

goto menu;

}

node *creat(node *head,int n)

{

node *temp,*new1;

temp=head;

new1=(node *)malloc(sizeof(node));

if(head==NULL)

{

new1->next=NULL;

new1->no=n;

head=new1;

}

else

{

temp=head;

while(temp->next!=NULL)

temp=temp->next;

new1->no=n;

new1->next=NULL;

temp->next=new1;

}

return(head);

}

node *concate(node *head1,node *head2)

{

node *temp,*temp1,*new1;

temp=head1;

temp1=head2;

while(temp->next!=NULL)

temp=temp->next;

while(temp1!=NULL)

{

new1=(node *)malloc(sizeof(node));

new1->no=temp1->no;

new1->next=NULL;

temp->next=new1;

temp1=temp1->next;

temp=temp->next;

}

return(head1);

}

node *merge(node *head1,node *head2)

{

node *head;

head=concate(head1,head2);

sort(head);

return(head);

}

node *sort(node *head)

{

node *temp,*temp1,*temp2;

int no1;

temp=head;

while(temp!=NULL)

{

temp2=temp;

temp1=temp->next;

while(temp1!=NULL)

{

if(temp->no>temp1->no)

{

no1=temp->no;

temp->no=temp1->no;

temp1->no=no1;

}

temp2=temp2->next;

temp1=temp2->next;

}

temp=temp->next;

}

return(head);

}

node *union1(node *head1,node *head2)

{

node *temp1,*temp2,*head=NULL,*temp,*new1;

temp1=head1;

while(temp1!=NULL)

{

new1=(node *)malloc(sizeof(node));

if(head==NULL)

{

new1->no=temp1->no;

new1->next=NULL;

head=new1;

}

else

{

temp=head;

while(temp->next!=NULL)

temp=temp->next;

new1->no=temp1->no;

new1->next=NULL;

temp->next=new1;

}

temp1=temp1->next;

}

temp=temp->next;

temp2=head2;

while(temp2!=NULL)

{

temp1=head1;

while(temp1!=NULL)

{

if(temp1->no==temp2->no)

{

flag=0;

break;

}

else

flag=1;

temp1=temp1->next;

}

if(flag==1)

{

new1=(node *)malloc(sizeof(node));

new1->no=temp2->no;

new1->next=NULL;

temp->next=new1;

temp=temp->next;

}

temp2=temp2->next;

}

return(head);

}

node *intersec(node *head1,node *head2)

{

node *temp1,*temp2,*head=NULL,*temp,*new1;

temp2=head2;

while(temp2!=NULL)

{

temp1=head1;

while(temp1!=NULL)

{

if(temp1->no==temp2->no)

{

flag=1;

break;

}

else

flag=0;

temp1=temp1->next;

}

if(flag==1)

{

new1=(node *)malloc(sizeof(node));

if(head==NULL)

{

new1->no=temp1->no;

new1->next=NULL;

head=new1;

}

else

{

temp=head;

while(temp->next!=NULL)

temp=temp->next;

new1->no=temp2->no;

new1->next=NULL;

temp->next=new1;

temp=temp->next;

}

}

temp2=temp2->next;

}

return(head);

}

void display(node *head)

{

node *temp;

temp=head;

while(temp!=NULL)

{

printf("%d ->",temp->no);

temp=temp->next;

}

printf("NULL");

}

/* POLYNOMIAL ADD */

#include

#include

struct linklist

{

int coeff;

int exp;

struct linklist *next;

};

typedef struct linklist node;

node *creat(node *,int);

node *add(node *,node *);

void display(node *);

int flag=1;

void main()

{

node *head1,*head2,*head3;

int m;

clrscr();

head1=head2=NULL;

printf("Enter total term of first pollynomial : ");

scanf("%d",&m);

head1=creat(head1,m);

printf("Enter total term of second pollynomial : ");

scanf("%d",&m);

head2=creat(head2,m);

printf("\n\nFirst pollynomial : ");

display(head1);

printf("\n\nSecond pollynomial : ");

display(head2);

printf("\n\nAddition of both pollynomial is : ");

head3=add(head1,head2);

display(head3);

getch();

}

node *creat(node *head,int m)

{

int i,co,d;

node *temp,*new1;

temp=head;

for(i=1;i<=m;i++)

{

printf("Enter coefficient :");

scanf("%d",&co);

printf("Enter degree :");

scanf("%d",&d);

new1=(node *)malloc(sizeof(node));

if(head==NULL)

{

new1->coeff=co;

new1->exp=d;

new1->next=NULL;

head=new1;

}

else

{

temp=head;

while(temp->next!=NULL)

temp=temp->next;

new1->coeff=co;

new1->exp=d;

new1->next=NULL;

temp->next=new1;

}

}

return(head);

}

node *add(node *head1,node *head2)

{

node *temp1,*temp2,*temp,*head=NULL,*new1;

temp1=head1;

temp2=head2;

while((temp1!=NULL)||(temp2!=NULL))

{

new1=(node *)malloc(sizeof(node));

if(temp1->exp==temp2->exp)

{

new1->coeff=temp1->coeff+temp2->coeff;

new1->exp=temp1->exp;

new1->next=NULL;

if(head==NULL)

head=new1;

else

{

temp=head;

while(temp->next!=NULL)

temp=temp->next;

temp->next=new1;

}

temp1=temp1->next;

temp2=temp2->next;

}

else

{

if((temp1!=NULL)&&(temp2!=NULL))

{

if(temp1->exp>temp2->exp)

{

new1->coeff=temp1->coeff;

new1->exp=temp1->exp;

new1->next=NULL;

if(head==NULL)

head=new1;

else

{

temp=head;

while(temp->next!=NULL)

temp=temp->next;

temp->next=new1;

}

temp1=temp1->next;

}

else

{

new1->coeff=temp2->coeff;

new1->exp=temp2->exp;

new1->next=NULL;

if(head==NULL)

head=new1;

else

{

temp=head;

while(temp->next!=NULL)

temp=temp->next;

temp->next=new1;

}

temp2=temp2->next;

}

}

else if(temp1==NULL)

{

new1=(node *)malloc(sizeof(node));

new1->coeff=temp2->coeff;

new1->exp=temp2->exp;

new1->next=NULL;

if(head==NULL)

head=new1;

else

{

temp=head;

while(temp->next!=NULL)

temp=temp->next;

temp->next=new1;

}

temp2=temp2->next;

}

else

{

new1=(node *)malloc(sizeof(node));

new1->coeff=temp1->coeff;

new1->exp=temp1->exp;

new1->next=NULL;

if(head==NULL)

head=new1;

else

{

temp=head;

while(temp->next!=NULL)

temp=temp->next;

temp->next=new1;

}

temp1=temp1->next;

}

}

}

return(head);

}

void display(node *head)

{

node *temp;

temp=head;

while(temp!=NULL)

{

if(temp->coeff>0)

{

if(temp->exp==0)

printf("+%d",temp->coeff);

else

printf("+%dX^%d",temp->coeff,temp->exp);

}

else

{

if(temp->exp==0)

printf("+%d",temp->coeff);

else

printf("%dX^%d",temp->coeff,temp->exp);

}

temp=temp->next;

}

}

/* POLYNOMIAL MULTIPLICAION */

#include

#include

struct linklist

{

int coeff;

int exp;

struct linklist *next;

};

typedef struct linklist node;

node *creat(node *,int);

node *mul(node *,node *);

void display(node *);

int flag=1;

void main()

{

node *head1,*head2,*head3;

int m;

clrscr();

head1=head2=NULL;

printf("Enter total term of first pollynomial : ");

scanf("%d",&m);

head1=creat(head1,m);

printf("Enter total term of second pollynomial : ");

scanf("%d",&m);

head2=creat(head2,m);

printf("\n\nFirst pollynomial : ");

display(head1);

printf("\n\nSecond pollynomial : ");

display(head2);

printf("\n\nMultiplication of both pollynomial is : ");

head3=mul(head1,head2);

display(head3);

getch();

}

node *creat(node *head,int m)

{

int i,co,d;

node *temp,*new1;

temp=head;

for(i=1;i<=m;i++)

{

printf("Enter coefficient :");

scanf("%d",&co);

printf("Enter degree :");

scanf("%d",&d);

new1=(node *)malloc(sizeof(node));

if(head==NULL)

{

new1->coeff=co;

new1->exp=d;

new1->next=NULL;

head=new1;

}

else

{

temp=head;

while(temp->next!=NULL)

temp=temp->next;

new1->coeff=co;

new1->exp=d;

new1->next=NULL;

temp->next=new1;

}

}

return(head);

}

node *mul(node *head1,node *head2)

{

node *temp1,*temp2,*temp,*htemp,*head=NULL,*new1;

temp1=head1;

temp2=head2;

while(temp1!=NULL)

{

temp2=head2;

while(temp2!=NULL)

{

new1=(node *)malloc(sizeof(node));

new1->coeff=temp1->coeff*temp2->coeff;

new1->exp=temp1->exp+temp2->exp;

new1->next=NULL;

if(head==NULL)

head=new1;

else

{

temp=head;

while(temp->next!=NULL)

temp=temp->next;

temp->next=new1;

}

temp2=temp2->next;

}

temp1=temp1->next;

}

temp=head;

htemp=temp->next;

while(temp!=NULL)

{

if(temp->exp==htemp->exp)

{

temp->coeff=temp->coeff+htemp->coeff;

temp->next=htemp->next;

}

else

temp=temp->next;

if(htemp->next==NULL)

break;

else

htemp=htemp->next;

}

return(head);

}

void display(node *head)

{

node *temp;

temp=head;

while(temp!=NULL)

{

if(temp->coeff>0)

{

if(temp->exp==0)

printf("+%d",temp->coeff);

else

printf("+%dX^%d ",temp->coeff,temp->exp);

temp=temp->next;

}

else if(temp->coeff<0)

{

if(temp->exp==0)

printf("%d",temp->coeff);

else

printf("%dX^%d ",temp->coeff,temp->exp);

temp=temp->next;

}

else

temp=temp->next;

}

}

/* POSTFIX */

# include

# include

# include

# include

# define Arnold '\0'

# define Blank ' '

# define Tab '\t'

# define Maxlen 64

static char infix [Maxlen+1], stack[Maxlen], postfix[Maxlen+1];

# define Empty (-1) /* empty stack */

static int top;

/* symbol types */

# define Operator (-10)

# define Operand (-20)

# define LeftParen (-30)

# define RightParen (-40)

static char *symbols = "()+-%*/";

/* Symbol precedence */

# define LeftParenPrec 0 /* ( */

# define AddPrec 1 /* + */

# define SubPrec 1 /* - */

# define MultPrec 2 /* * */

# define DivPrec 2 /* / */

# define RemPrec 3 /* % */

# define None 999 /* all else */

void read_input(void);

void infix_to_postfix(void);

void write_output(void);

void push(char symbol);

char pop (void);

int get_type(char );

int get_prec(char );

int white_space(char );

void full_stack();

void empty_stack();

void main()

{

char ans[2];

clrscr();

do

{

top = Empty; /* reset stack */

read_input();

infix_to_postfix();

write_output(); /* Selection */

printf("\n\n Another (y/n)");

gets(ans);

}

while (toupper(ans[0]) == 'Y');

}

/* function infix to postfix conversion */

void infix_to_postfix(void)

{

int i,p, len, type, precedence;

char next ; /* i for infix, p for postfix */

i = p = 0;

len = strlen(infix);

/* loop through input string */

while(i <>

{

/* ignore whitepsce in infix expression */

if( !white_space(infix[i]))

{

type = get_type(infix[i]);

switch(type)

{

/* push left paren onto stack */

case LeftParen:

push(infix[i]);

break;

/* pop stack until matching left paren */

case RightParen:

while((next = pop()) != '(')

postfix[p++] = next;

break;

case Operand:

postfix[p++] = infix[i];

break;

/* Pop stack until first operator of higher precedence and then stack this operator */

case Operator:

precedence = get_prec(infix[i]);

/* Anything on stack to pop */

while(top > Empty && precedence<= get_prec(stack[top]))

postfix[p++] = pop();

push(infix[i]);

break;

}

}

i++; /* next symbol in infix expression */

} /* pop any remaining operators */

while(top > Empty )

postfix[p++] = pop();

postfix[p] = Arnold ; /* ensure a string */

}

/* Function to find operator type */

int get_type(char symbol )

{

switch(symbol)

{

case '(' :

return (LeftParen);

case ')':

return (RightParen);

case '+':

case '-':

case '%':

case '*':

case '/':

return (Operator);

default:

return (Operand);

}

}

/* Find precedence of the operator */

int get_prec(char symbol )

{

switch(symbol)

{

case '+':

return (AddPrec);

case '-':

return (SubPrec);

case '*':

return (MultPrec);

case '/':

return (DivPrec);

case '%':

return (RemPrec);

case '(':

return (LeftParenPrec);

default:

return (None);

}

}

/* Function push */

void push(char symbol)

{

/* check for overflow */

if(top > Maxlen)

full_stack();

else

stack[++top] = symbol;

}

/* Function pop */

char pop(void)

{

/* check for underflow */

if (top <= Empty )

empty_stack();

else

return(stack[top--]);

}

/* Exit in case of overflow */

void full_stack(void )

{

printf("\n Full Stsck ... exiting. \n");

exit(1);

}

/* Exit in case of underflow */

void empty_stack(void)

{

printf("\n Empty Stack ... exiting \n");

exit(2);

}

void read_input(void)

{

printf("\n Infix (up to %d chars): ", Maxlen);

gets(infix);

}

/* Output function */

void write_output(void)

{

printf("\n Infix: %s", infix);

printf("\n Postfix: %s \n",postfix);

}

/* function white space checking */

int white_space(char symbol)

{

return( symbol == Blank || symbol == Tab || symbol == Arnold);

}

/* QUEUE WITH ARRAY */

#include

#include

void push(int );

int pop();

void display();

int q[10],f=0,r=0,n,top=1,s[10];

void main()

{

int ch,x,i;

clrscr();

printf("Enter how many element you want in Queue :");

scanf("%d",&n);

do

{

printf("\n1.INSERT");

printf("\n2.DELETE");

printf("\n3.EXIT");

printf("\nEnter your choice : ");

scanf("%d",&ch);

switch(ch)

{

case 1 :

printf("\nEnter any no.");

scanf("%d",&x);

push(x);

display();

getch();

break;

case 2 :

pop();

display();

getch();

break;

case 3:

exit(1);

break;

default :

printf("INVALID CHOICE....");

getch();

break;

}

}

while(ch!=3);

}

void push(int x)

{

if(r==n)

{

printf("\nQueue overflow...");

return;

}

else

{

r++;

q[r]=x;

}

if(f==0)

f=1;

return;

}

int pop()

{

int x;

if(r+1==f)

{

printf("\n\nQueue underflow...");

return(0);

}

else

{

x=q[f];

f++;

x=q[f+1];

return(x);

}

}

void display()

{

int i;

printf("\n");

printf("F->");

for(i=f;i<=r;i++)

{

printf("%4d",q[i]);

if(i==r)

printf("<-R");

}

}

/* QUEUE WITH LINKLIST */

#include

#include

struct queue

{

int no;

struct queue *next;

}*f,*r;

typedef struct queue node;

node *insert(node * ,int );

void display(node *);

node *delet(node *);

void main()

{

int n,ch;

menu:

clrscr();

printf("\n\n\n\n\t\t\t\tMENU");

printf("\n\t\t\t1.Insert");

printf("\n\t\t\t2.Delete");

printf("\n\t\t\t3.Exit");

printf("\n\n\nEnter your choice :");

scanf("%d",&ch);

switch(ch)

{

case 1:

printf("Enter any no. : ");

scanf("%d",&n);

f=insert(f,n);

display(f);

break;

case 2:

f=delet(f);

display(f);

break;

case 3 :

exit(1);

default :

printf("\n\nInvalid choice ........");

break;

}

printf("\n\n\nPress any key to contineu......");

getch();

goto menu;

}

node *insert(node * front,int n)

{

node *temp,*new1;

temp=front;

new1=(node *)malloc(sizeof(node));

new1->next=NULL;

if (new1==NULL)

{

printf("Memory is not avalable....");

return(front);

}

else

{

if(front==NULL)

{

new1->no=n;

front=new1;

r=new1;

return(front);

}

else

{

new1->no=n;

while(temp->next!=NULL)

temp=temp->next;

temp->next=new1;

r=new1;

return(front);

}

}

}

node *delet(node *front)

{

node *temp;

if(front==NULL)

printf("Queue is empty....");

else

{

temp=front;

front=temp->next;

}

return(front);

}

void display(node *front)

{

node *temp;

temp=front;

while(temp!=NULL)

{

printf("%d ->",temp->no);

temp=temp->next;

}

}

// DEFINATION : Write a program to implement Double-stack.

// (Operations on stack are Push , Pop , Change , Peep , Status ).

#include

#include

void push(int );

int pop();

void peep(int );

void change(int ,int);

void display();

# define n 10

int s[10],top1=-1,top2=n,sno,m=n;

void main()

{

int ch,x,i;

clrscr();

menu:

printf("\nMenu");

printf("\n1.PUSH");

printf("\n2.POP");

printf("\n3.PEEP");

printf("\n4.CHANGE");

printf("\n5.STATUS");

printf("\n6.EXIT");

printf("\nEnter your choice : ");

scanf("%d",&ch);

switch(ch)

{

case 1 :

printf("\nEnter in which stack (1/2) :");

scanf("%d",&sno);

if(ch>=2 || ch<=1)

{

printf("\nEnter any no.");

scanf("%d",&x);

}

push(x);

display();

break;

case 2 :

printf("\nEnter in which stack (1/2) :");

scanf("%d",&sno);

pop();

display();

break;

case 3 :

printf("\nEnter in which stack (1/2) :");

scanf("%d",&sno);

if(ch>2 || ch<1)

{

printf("\nEnter possition :");

scanf("%d",&i);

}

peep(i);

display();

break;

case 4 :

printf("\nEnter in which stack (1/2) :");

scanf("%d",&sno);

if(ch>2 || ch<1)

{

printf("\nEnter possion :");

scanf("%d",&i);

printf("\nEnter any no.");

scanf("%d",&x);

}

change(i,x);

display();

break;

case 5:

printf("\nTotal no. of element in stack are %d",top1+(m-top2)+1);

break;

case 6:

exit(1);

break;

default :

printf("INVALID CHOICE....");

break;

}

goto menu;

}

void push(int x)

{

if(top1+1==top2)

{

printf("\nStack Overflow...\n");

return;

}

else

{

if(sno==1)

{

top1++;

s[top1]=x;

}

else if (sno==2)

{

top2--;

s[top2]=x;

}

else

printf("INVALID STACK....");

}

return;

}

int pop()

{

int x;

if(top1<0>

{

printf("\nStack Underflow...\n");

return(0);

}

else

{

if(sno==1)

{

top1--;

x=s[top1+1];

}

else if (sno==2)

{

top2++;

x=s[top2-1];

}

else

printf("INVALID STACK....");

return(x);

}

}

void peep(int i)

{

int x;

if(sno==1)

{

if(top1-i+1<0)

printf("\nStack Underflow...");

else

{

x=s[top1-i+1];

printf("\nElement is %d \n",x);

}

}

else if(sno==2)

{

if(top2+i-1>m)

printf("\nStack Underflow...");

else

{

x=s[top2+i-1];

printf("Element is %d \n",x);

}

}

else

printf("INVALID STACK....");

return;

}

void change(int i,int x)

{

if(sno==1)

{

if(top1-i+1<0)

printf("\nStack Underflow...");

else

s[top1-i+1]=x;

}

else if(sno==2)

{

if(top2+i-1>m)

printf("\nStack Underflow...");

else

s[top2+i-1]=x;

}

else

printf("INVALID STACK....");

return;

}

void display()

{

int i;

printf("\n");

printf("First stack is : \n");

for(i=0;i<=top1;i++)

printf("%4d",s[i]);

printf("\n");

for(i=0;i<=top1;i++)

printf(" ");

printf("^top1");

printf("\nSecond stack is : \n");

for(i=m-1;i>=top2;i--)

printf("%4d",s[i]);

printf("\n");

for(i=m-1;i>=top2;i--)

printf(" ");

printf("^top2");

}