/* 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"); }