The Programming Project: merge
Showing posts with label merge. Show all posts
Showing posts with label merge. Show all posts

Thursday, March 21, 2013

C Program #15


/*Dynamic Implementation of Stack With Basic operations!*/

#include<stdio.h>
#include<malloc.h>
#define TRUE 1
#define FALSE 0

struct stack
                        {
                        int item;
                        struct stack *right;
                        };
typedef struct stack node;
node *push(node *);
node *push1(node *,int);
void display(node *);
int Isempty(node *);
void top2bottomu(node *);
void top2bottom(node *);
void pop(node *);
int pop1(node *);
void duplicate(node *);
void filestack(node *, FILE *fp);
void stack2(node *);
int Isequal(node *,node *);
int length(node*);
int main()
{
int choice;
FILE *fp;
fp=fopen("data.txt","w");
node *root,*data,*root1,*data1,*root2,*data2;
root=(node *)malloc(sizeof(node));
root->right=NULL;
data=root;
root1=(node *)malloc(sizeof(node));
root1->right=NULL;
data1=root1;
root2=(node *)malloc(sizeof(node));
root2->right=NULL;
data2=root2;
            do
            {
                        printf("\n Press 1 to push a element:");
                        printf("\n Press 2 for bottom to top:");
                        printf("\n Press 3 to check for empty:");
                        printf("\n Press 4 to print elements from top to bottom,stack becoming empty:");
                        printf("\n Press 5 to pop:");
                        printf("\n Press 6 to print elements from top to bottom,stack unchanged:");
                        printf("\n Press 7 to duplicate the top element of the stack:");
                        printf("\n Press 8 to read from a file and print in reverse order:");
                        printf("\n Press 9 to push element in second stack:");
                        printf("\n Press 10 to display second stack:");
                        printf("\n Press 11 to check if two stacks are equal:");
                        printf("\n Enter choice:");
                        printf("\n Type 12 to exit:");
                        scanf("%d",&choice);
                        switch(choice)
                                    {
                                                case 1:
                                                data=push(data);
                                                data->right=NULL;
                                                break;
                                                case 2:
                                                display(root);
                                                break;
                                                case 3:
                                                if(Isempty(root))
                                                            printf("\n Stack is empty:\n");
                                                else
                                                            printf("\n Stack is not empty:\n");
                                                break;
                                                case 4:
                                                top2bottom(root);
                                                data=root;
                                                break;
                                                case 5:
                                                pop(root);
                                                data=root;
                                                break;
                                                case 6:
                                                top2bottomu(root);
                                                break;
                                                case 7:
                                                duplicate(root);
                                                break;
                                                case 8:
                                                filestack(root1,fp);
                                                break;
                                                case 9:
                                                data2=push(data2);
                                                data2->right=NULL;
                                                break;
                                                case 10:
                                                display(root2);
                                                break;
                                                case 11:
                                                if(Isequal(root,root2))
                                                            printf("\n Stack are equal:\n");
                                                else
                                                            printf("\n Stack are not equal:\n");
                                                break;
                                                default:
                                                break;

                                    }
                        }
                        while(1<=choice && choice<=11);
            return 0;
 }
int Isequal(node *data1,node *data2)
            {
            int flag=FALSE,i;
            if(Isempty(data1) || Isempty(data2))
                        {
                        if(Isempty(data1) && Isempty(data2))
                                    return (TRUE);
                        else
                                    return (FALSE);
                        }
            else
                        {
                         if(length(data1)!=length(data2))
                         //         {printf("{%d,%d}\n",length(data1),length(data2));
                                    return (FALSE);//}
                         else
                                    {
                                    for(i=0;i<=length(data1);i++)
                                                {
                                                if(data1->item!=data2->item)
                                                            flag=TRUE;
                                                data1=data1->right;
                                                data2=data2->right;
                                                }
                                    if(flag==FALSE)
                                                return (TRUE);
                                    else
                                                return (FALSE);
                                    }
                         }
            }
int length(node *data)
            {
            int k=0;
            while(data->right!=NULL)
                        {
                        k++;
                        data=data->right;
                        }
            return(k-1);
            }
void filestack(node *data, FILE *fp)
            {
            node *p;
            p=data;
            fclose(fp);
            fp=fopen("data.txt","w");
            int n,i,x;
            printf("\n Enter the number of elements to be entered in file:");
            scanf("%d",&n);
            for(i=1;i<=n;i++)
                        {
                        printf("\n Enter the %d# elemet:",i);
                        scanf("%d",&x);
                        fprintf(fp,"%d ",x);
      }
            fclose(fp);
            fp=fopen("data.txt","r");
            printf("\n Elements in the file:");
            for(i=1;i<=n;i++)
                        {
                        fscanf(fp,"%d",&x);
                        printf("%d ",x);
                        data=push1(data,x);
                        data->right=NULL;
                        }
            fclose(fp);
            printf("\n Elements from the file in reverse order:");
            top2bottomu(p);
            printf("\n");
            }
node *push1(node *data,int x)
            {
  //        node *p;
            while(data->right!=NULL)
                        data=data->right;
            data->item=x;
            data->right=(node *)malloc(sizeof(node));
            data=data->right;
            return(data);
            }
void duplicate(node *data)
            {
            node *p,*q;
            q=(node *)malloc(sizeof(node));
            p=data;
            int x;
            while(p->right->right!=NULL)
                        p=p->right;
            x=p->item;
            p->right->item=x;
            p->right->right=q;
            q->right=NULL;
   }
void top2bottom(node *data)
            {
                        while(!Isempty(data))
                                    {
                                    pop(data);
                                    }
            }
void pop(node *data)
            {
            node *p;
            if(Isempty(data))
                        {
                                    printf("\n Stack is empty, cannot be popped:\n");
                        }
            else
                        {
                                    if(data->right->right==NULL)
                                                {
                                                printf("\nElement popped out is %d \n",data->item);
                                                p=data;
                                                free(data);
                                                p->right=NULL;
                                                }
                                    else
                                                {
                                                while(data->right->right->right!=NULL)
                                                            data=data->right;
                                                            p=data->right;
                                                            printf("\nElement popped out is %d \n",p->item);
                                                            free(p);
                                                            data->right->right=NULL;

                                                }
                        }
            }
void top2bottomu(node *data)
            {
            node *q;
            q=data;
            int k=0,i,*a;
            while(data->right!=NULL)
                        {
                        k++;
                        data=data->right;
                        }
            //printf("%d.....\n",k);
            a=(int*)malloc(k*sizeof(int));
            for(i=0;i<k;i++)
                        {
                        *(a+i)=q->item;
                        q=q->right;
                        }
            for(i=k-1;i>=0;i--)
                        printf("%d ",*(a+i));

   free(a);
            printf("\n");
            }
int Isempty(node *data)
            {
                        if(data->right==NULL)
                                    return (TRUE);
                        else
                                    return (FALSE);
            }
node *push(node *data)
            {
  //        node *p;
            while(data->right!=NULL)
                        data=data->right;
            printf("\n Enter the element to be inserted:");
            scanf("%d",&data->item);
            data->right=(node *)malloc(sizeof(node));
            data=data->right;
            return(data);
            }
void display(node *data)
            {
                        if(Isempty(data))
                                    printf("\n Stack is empty, nothing to display:\n");
            else{    while(data->right!=NULL)
                                    {
                                    printf("%d ",data->item);
                                    data=data->right;
                                    }
                         }
            printf("\n");
            }
int pop1(node *data)
            {
            node *p;
            if(Isempty(data))
                        {
                                    printf("\n Stack is empty, cannot be popped:\n");
                        }
            else
                        {
                                    if(data->right->right==NULL)
                                                {
            p=data;
                                                p->right=NULL;
            return(data->item);
                                                }
                                    else
                                                {
                                                while(data->right->right->right!=NULL)
                                                            data=data->right;
                                                            p=data->right;
                                                            data->right->right=NULL;
                                                            return(p->item);
                                                            }
                        }
            }

Thursday, January 3, 2013

C Program #8


A program to demonstrate different operation on list using array. 


#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
void menu(void);
void create(void);
void insert(int *a,int*);
void deletee(int *a,int*);
void merge(int *a,int*);
void split(int *a,int*);
void sort(int *a,int*);
void search(int *a,int*);
void append(int *a,int*);
int c=1;
int main()
{
int i,*list,*list_size,n;
printf("\n Enter the list size \n");
scanf("%d",&n);
list_size=&n;
list=(int *)malloc(n*sizeof(int));
printf("\n Enter the elements:\n");
for(i=0;i<n;i++)
scanf("%d",(list+i));
while(1)
{
int choice;
printf("\n ***********MENU FOR LIST*********** \n");
printf("\n Press 1 to inserte \n");
printf("\n Press 2 to delete \n");
printf("\n Press 3 to merge \n");
printf("\n Press 4 to split \n");
printf("\n Press 5 to sort \n");
printf("\n Press 6 to search \n");
printf("\n Press 7 to append \n");
printf("\n Press 8 to exit \n");
printf("\n Enter your choice\n");
scanf("%d",&choice);
switch(choice)
{
case 1:
insert(list,&n);
break;
case 2:
deletee(list,&n);
break;
case 3:
merge(list,&n);
break;
case 4:
split(list,&n);
break;
case 5:
sort(list,&n);
break;
case 6:
search(list,&n);
break;
case 7:
append(list,&n);
break;
case 8:
exit(0);
break;
default:
puts("Wrong choice");
break;
}
}
return 0;
}
void insert(int *list,int *list_size)
{
int item,pos,i;
printf("\n List before insertion \n");
for(i=0;i<*list_size;i++)
   printf("\t %d",list[i]);
printf("\n Enter the item to be inserted and position\n");
scanf("%d %d",&item,&pos);
if(pos>*list_size)
{
puts(" Item cannot be inserted");
}
else{
for(i=*list_size;i>pos-1;i--)
list[i]=list[i-1];
list[pos-1]=item;
*list_size+=1;
printf("\n List after insertion \n");
for(i=0;i<*list_size;i++)
printf("\t %d",list[i]);
}
return ;
}
void deletee(int *list,int *list_size)
{
int item,pos,flag=1,i;
printf("\n Enter the item to be deleted:\n");
scanf("%d",&item);
for(i=0;i<*list_size;i++)
{
if(item==list[i])
{
pos=i;
flag=1;
break;
}
else
flag=0;
}
if(flag==0)
printf("\n Item not found, cannot be deleted:\n");
else
{
printf("\n List before deletion \n");
for(i=0;i<*list_size;i++)
printf("\t %d",list[i]);
for(i=pos;i<*list_size;i++)
list[i]=list[i+1];
*list_size-=1;
printf("\n List after deletion \n");
for(i=0;i<*list_size;i++)
printf("\t %d",list[i]);
return ;
}
}
void merge(int *list,int *list_size)
{
int a[50],n,i;
printf("\n Enter the size of the list to be merged \n");
scanf("%d",&n);
printf("\n Enter the items of the new list:\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=*list_size;i<*list_size+n;i++)
list[i]=a[i-*list_size];
printf("\n List before merging \n");
for(i=0;i<*list_size;i++)
printf("\t %d",list[i]);
*list_size+=n;
printf("\n List after merging \n");
for(i=0;i<*list_size;i++)
printf("\t %d",list[i]);

return;
}
void split(int *list,int *list_size)
{
int b[25],i,j,pos;
printf("\n List items are: \n");
for(i=0;i<*list_size;i++)
printf("\t %d",list[i]);
printf("\n Enter the position at which the list will be splitted:\n");
scanf("%d",&pos);
printf("\n List after splitting:\n");
printf("\n List #1 \n");
for(i=pos;i<*list_size;i++)
{
b[i-pos]=list[i];
printf("\t %d",b[i-pos]);
}
printf("\n List #2 \n");
for(i=0;i<pos;i++)
printf("\t %d",list[i]);
*list_size=pos;
return;
}
void sort(int *list,int *list_size)
{
int i,temp,j;
printf("\n List before sorting \n");
for(i=0;i<*list_size;i++)
printf("\t %d",list[i]);
for(i=0;i<*list_size;i++)
{
for(j=i;j<=*list_size-1;j++)
{
if(list[i]<list[j])
{
temp=list[i];
list[i]=list[j];
list[j]=temp;
}
}
}
printf("\n List after sorting \n");
for(i=0;i<*list_size;i++)
printf("\t %d",list[i]);
return;
}
void search(int *list,int *list_size)
{
int item,flag=1,i,count=0,a[10];
printf("\n List items are: \n");
for(i=0;i<*list_size;i++)
printf("\t %d",list[i]);
printf("\n Enter the item to be searched:\n");
scanf("%d",&item);
for(i=0;i<*list_size;i++)
{
if(item==list[i])
{
a[count]=i;
count++;
flag=1;
continue;
}
else
flag=0;
}
if(flag==0 && count==0)
printf("\n Item not found:\n");
else
{
printf("\n Item %d is at postion",item);
for(i=0;i<count;i++)
printf("\t %d",a[i]+1);
}
return;
}
void append(int *list,int *list_size)
{
int item,pos,i;
printf("\n List items are: \n");
for(i=0;i<*list_size;i++)
printf("\t %d",list[i]);
printf("\n Enter the item to be appended & position:\n");
scanf("%d %d",&item,&pos);
if(pos>*list_size)
{
puts(" Item cannot be appended");
}
else{
list[pos-1]=item;
printf("\n List after appending: \n");
for(i=0;i<*list_size;i++)
printf("\t %d",list[i]);
      } 
return;
}