www.geocities.com/pradheepkumar

Home Page

www.pradheep.cjb.net

Home page

 

 

Visit www.geocities.com/pradheepkumar/tech.htm  for more

 

DATA STRUCTURES LAB PROGRAMS

 

 

 

//Binary Tree Operations

# include <stdio.h>

# include <malloc.h>

typedef struct node

{

            int data;

            struct node *lchild, *rchild;

} node;

node *root=NULL;

node *search(int item)

{

            node *temp=root,*prev=NULL;

            while (temp)

            {

                        if (item<temp->data)

                        {

                                    prev=temp;

                                    temp=temp->lchild;

                        }

                        else if (item>temp->data)

                        {

                                    prev=temp;

                                    temp=temp->rchild;

                        }

                        else

                                    temp=prev=NULL;

            }

            return(prev);

}

node *insert(node *rt)

{

            node *prev=NULL;

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

            newnode->lchild=newnode->rchild=NULL;

            printf ("\nEnter the new data : ");

            scanf ("%d",&newnode->data);

            if (!rt)

            {

                        rt=newnode;

                        return(rt);

            }

            prev=search(newnode->data);

            if (prev)

            {

                        if (newnode->data<prev->data)

                                    prev->lchild=newnode;

                        else

                                    prev->rchild=newnode;

            }

            else

                        printf ("\nData exists - cannot insert\n");

            return(rt);

}

node *delet(node *temp, int target)

{

            node *temp1=NULL, *temp2=NULL;

            if (temp&&target==temp->data)

            {

                        if (temp->lchild==temp->rchild)

                        {

                                    free(temp);

                                    return NULL;

                        }

                        if (temp->rchild==NULL)

                        {

                                    temp=temp1->lchild;

                                    free(temp);

                                    return(temp1);

                        }

                        else

                        {

                                    temp1=temp2=temp->rchild;

                                    while (temp1->lchild)

                                                temp1=temp->lchild;

                                    temp1->lchild=temp->lchild;

                                    free(temp);

                                    return(temp2);

                        }

            }

            if (!temp)

            {

                        printf ("\nData does not exist\n");

                        return NULL;

            }

            if (target<temp->data)

                        temp->lchild=delet(temp->lchild,target);

            else

                        temp->rchild=delet(temp->rchild,target);

            return(temp);

}

void preorder(node *rt)

{

            if (!root)

                        printf ("\nEmpty binary tree\n");

            if (!rt)

                        return;

            preorder(rt->lchild);

            if (rt==root)

                        printf (" '%d'",rt->data);

            else

                        printf (" %d",rt->data);

            preorder(rt->rchild);

            return;

}

int menu()

{

            int choice;

            printf ("\nBinary Tree Operations - Menu");

            printf ("\n1 - Insert");

            printf ("\n2 - Delete");

            printf ("\n3 - Traverse");

            printf ("\n4 - Exit");

            printf ("\nEnter choice : ");

            scanf ("%d",&choice);

            return (choice);

}

void main ()

{

            int ch, target;

            do

            {

                        switch(ch=menu())

                        {

                                    case 1  :           root=insert(root);

                                                            break;

                                    case 2  :           printf ("\nEnter data to be deleted : ");

                                                            scanf ("%d",&target);

                                                            root=delet(root,target);

                                                            break;

                                    case 3  :           preorder(root);

                                                            break;

                                    case 4  :           break;

                                    default   :           printf ("\nIllegal choice\n");

                        }

            } while (ch!=4);

}

 

Output:

 

Binary Tree Operations - Menu

1 - Insert

2 - Delete

3 - Traverse

4 - Exit

Enter choice : 1

 

Enter the new data : 50

 

Enter the new data : 25

 

Enter the new data : 75

 

Enter the new data : 12

 

Enter the new data : 40

 

Enter the new data : 5

 

Enter the new data : 15

 

Enter the new data : 30

 

Enter the new data : 45

 

Enter the new data : 60

 

Enter the new data : 90

 

Binary Tree Operations - Menu

1 - Insert

2 - Delete

3 - Traverse

4 - Exit

Enter choice : 3

 5 12 15 25 30 40 45 '50' 60 75 90

Binary Tree Operations - Menu

1 - Insert

2 - Delete

3 - Traverse

4 - Exit

Enter choice : 2

 

Enter data to be deleted : 15

 

Binary Tree Operations - Menu

1 - Insert

2 - Delete

3 - Traverse

4 - Exit

Enter choice : 3

 5 12 25 30 40 45 '50' 60 75 90

Binary Tree Operations - Menu

1 - Insert

2 - Delete

3 - Traverse

4 - Exit

Enter choice : 4


//Merging two files

# include <stdio.h>

# include <conio.h>

# include <stdlib.h>

struct record {

            int eno;

            char ename[20];

};

typedef struct record emp;

void input(FILE *FP)

{

            emp rec;

            char ch;

            do

            {

                        printf ("\nEnter employee number : ");

                        scanf ("%d",&rec.eno);

                        printf ("\nEmployee name : ");

                        scanf ("%s",rec.ename);

                        fwrite(&rec,sizeof(emp),1,FP);

                        printf ("\nAny more records (y/n) : ");

                        scanf (" %c",&ch);

            }while(ch!='n');

}

void merge()

{

            FILE *fp1, *fp2, *fp3;

            emp rec1,rec2;

            fp1=fopen("File1.dat","r");

            fp2=fopen("File2.dat","r");

            fp3=fopen("File3.dat","w");

            fread(&rec1,sizeof(emp),1,fp1);

            fread(&rec2,sizeof(emp),1,fp2);

            while(!(feof(fp1)||(feof(fp2))))

            {

                        if (rec1.eno<=rec2.eno)

                        {

                                    fwrite(&rec1,sizeof(emp),1,fp3);

                                    fread(&rec1,sizeof(emp),1,fp1);

                        }

                        else

                        {

                                    fwrite(&rec2,sizeof(emp),1,fp3);

                                    fread(&rec2,sizeof(emp),1,fp2);

                        }

            }

            if (!feof(fp1))

            while (!feof(fp1))

            {

                        fwrite(&rec1,sizeof(emp),1,fp3);

                        fread(&rec1,sizeof(emp),1,fp1);

            }

            if (!feof(fp2))

            while (!feof(fp2))

            {

                        fwrite(&rec2,sizeof(emp),1,fp3);

                        fread(&rec2,sizeof(emp),1,fp2);

            }

            fcloseall();

}

void display(FILE *FP)

{

            emp rec;

            printf ("\nEmployee number\tEmployee name");

            while(!feof(FP))

            {

                        fread(&rec,sizeof(emp),1,FP);

                        if(!feof(FP))

                                    printf ("\n\t%d\t%s",rec.eno,rec.ename);

            }

}

void showmenu()

{

            printf ("\n\nMerge Sort");

            printf ("\n1 - Enter data for file one");

            printf ("\n2 - Enter data for file two");

            printf ("\n3 - Sort data");

            printf ("\n4 - Print data");

            printf ("\n5 - Exit");

            printf ("\nEnter your choice : ");

}

void main()

{

            char ch;

            FILE *FP;

            do

            {

                        showmenu();

                        scanf (" %c",&ch);

                        switch(ch) {

                                    case '1' :           FP=fopen("File1.dat","a+");

                                                            input(FP);

                                                            fclose(FP);

                                                            break;

                                    case '2' :           FP=fopen("File2.dat","a+");

                                                            input(FP);

                                                            fclose(FP);

                                                            break;

                                    case '3' :           merge();

                                                            printf ("\n\nData sorted");

                                                            break;

                                    case '4' :           printf ("\nFile 1 contains : ");

                                                            FP=fopen("file1.dat","r");

                                                            display(FP);

                                                            fclose(FP);

                                                            printf ("\nFile 2 contains : ");

                                                            FP=fopen("file2.dat","r");

                                                            display(FP);

                                                            fclose(FP);

                                                            printf ("\nFile 3 contains : ");

                                                            FP=fopen("file3.dat","r");

                                                            display(FP);

                                                            fclose(FP);

                                                            break;

                                    case '5' :           exit(1);

                                     default :            printf ("\nIllegal choice");

                        }

            }while(ch!='5');

}

 

Output:

 

Merge Sort

1 - Enter data for file one

2 - Enter data for file two

3 - Sort data

4 - Print data

5 - Exit

Enter your choice : 1

 

Enter employee number : 100

 

Employee name : Abhiram

 

Enter employee number : 200

 

Employee name : Balu

 

Enter employee number : 300

 

Employee name : Chandru

 

Enter employee number : 400

 

Employee name : Deepak

 

Enter employee number : 500

 

Employee name : Eipen

 

 

Merge Sort

1 - Enter data for file one

2 - Enter data for file two

3 - Sort data

4 - Print data

5 - Exit

Enter your choice : 2

 

Enter employee number : 50

 

Employee name : Raj

 

Enter employee number : 150

 

Employee name : Shaan

 

Enter employee number : 250

 

Employee name : Tarun

 

Enter employee number : 350

 

Employee name : Venkat

 

Enter employee number : 450

 

Employee name : Lendis

 

 

Merge Sort

1 - Enter data for file one

2 - Enter data for file two

3 - Sort data

4 - Print data

5 - Exit

Enter your choice : 3

 

 

Data sorted

 

Merge Sort

1 - Enter data for file one

2 - Enter data for file two

3 - Sort data

4 - Print data

5 - Exit

Enter your choice : 4

 

File 1 contains :

Employee number Employee name

                          100     Abhiram

                          200     Balu

                          300     Chandru

                          400     Deepak

                          500     Eipen

File 2 contains :

Employee number Employee name

                          50      Raj

                          150     Shaan

                          250     Tarun

                          350     Venkat

                          450     Lendis

File 3 contains :

Employee number Employee name

                          50      Raj

                          100     Abhiram

                          150     Shaan

                          200     Balu

                          250     Tarun

                          300     Chandru

                          350     Venkat

                          400     Deepak

                          450     Lendis

                          500     Eipen

 

Merge Sort

1 - Enter data for file one

2 - Enter data for file two

3 - Sort data

4 - Print data

5 - Exit

Enter your choice : 5


// Tree heap sort - key value

# include <stdio.h>

# include <conio.h>

typedef struct {

            char name[20];

            int no, age;

} record;

record stud[14];

int input ()

{

            int no=0;

            char ch;

            do

            {

                        ++no;

                        printf ("\nEnter name : ");

                        scanf ("%s",stud[no].name);

                        printf ("Enter number : ");

                        scanf ("%d",&stud[no].no);

                        printf ("Enter age : ");

                        scanf ("%d",&stud[no].age);

                        printf ("Any more records (y/n) : ");

                        scanf (" %c",&ch);

                        fflush(stdin);

            } while (ch!='n');

            return no;

}

void display (int n)

{

            int i;

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

            {

                        printf ("\nName   : %s ",stud[i].name);

                        printf ("\n Age   : %d ",stud[i].age);

                        printf ("\nNumber : %d \n",stud[i].no);

            }

}

void adjust (int i, int n)

{

            int j=2*i;

            record item=stud[i];

            while (j<=n)

            {

                        if ((j<n)&&(stud[j].no<stud[j+1].no))

                                    j=j+1;

                        if (item.no>=stud[j].no)

                                    break;

                        stud[j/2]=stud[j];

                        j=2*j;

            }

            stud[j/2]=item;

}

void heapify (int n)

{

            int i;

            for (i=n/2;i>=1;i--)

            adjust (i,n);

}

void sort (int n)

{

            int i;

            record t;

            heapify (n);

            for (i=n;i>=2;i--)

            {

                        t=stud[i];

                        stud[i]=stud[1];

                        stud[1]=t;

                        adjust (1,i-1);

            }

}

void main ()

{

            int no;

            printf ("\n Heap Sort");

            no=input();

            sort (no);

            display (no);

}

 

 

Output :

 

 Heap Sort

Enter name : Raju

Enter number : 750

Enter age : 19

Any more records (y/n) : y

 

Enter name : Balu

Enter number : 700

Enter age : 18

Any more records (y/n) : y

 

Enter name : Chandru

Enter number : 725

Enter age : 19

Any more records (y/n) : y

 

Enter name : Deepak

Enter number : 675

Enter age : 19

Any more records (y/n) : y

 

Enter name : Shakthi

Enter number : 620

Enter age : 19

Any more records (y/n) : y

 

Enter name : Pawan

Enter number : 614

Enter age : 20

Any more records (y/n) : y

 

Enter name : Senthil

Enter number : 420

Enter age : 21

Any more records (y/n) : y

 

Enter name : Rajesh

Enter number : 710

Enter age : 19

Any more records (y/n) : y

 

Enter name : Satyan

Enter number : 400

Enter age : 18

Any more records (y/n) : y

 

Enter name : Abhiram

Enter number : 628

Enter age : 19

Any more records (y/n) : n

 

Name   : Satyan

 Age   : 18

Number : 400

 

Name   : Senthil

 Age   : 21

Number : 420

 

Name   : Pawan

 Age   : 20

Number : 614

 

Name   : Shakthi

 Age   : 19

Number : 620

 

Name   : Abhiram

 Age   : 19

Number : 628

 

Name   : Deepak

 Age   : 19

Number : 675

 

Name   : Balu

 Age   : 18

Number : 700

 

Name   : Rajesh

 Age   : 19

Number : 710

 

Name   : Chandru

 Age   : 19

Number : 725

 

Name   : Raju

 Age   : 19

Number : 750


//Address calculation

# include <stdio.h>

# include <math.h>

# include <malloc.h>

# define m 25

struct list

{

            int info;

            struct list *next;

};

typedef struct list *node;

node hashtable[25];

void create (node rec)

{

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

            if (rec->info==-9999)

            {

                        rec->next=NULL;

                        return;

            }

            else

            {

                        rec->next=(node)malloc(sizeof(node));

                        create(rec->next);

            }

            return;

}

void display(node rec)

{

            if (rec!=NULL)

            {

                        if (rec->info!=-9999)

                        {

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

                                    display(rec->next);

                        }

            }

            return;

}

int largest (node start)

{

            node save;

            int big;

            save=start;

            big=save->info;

            while (save!=NULL)

            {

                        if(save->info>big)

                                    big=save->info;

                        save=save->next;

            }

            return(big);

}

int hash (int largest, int data)

{

            int has, h;

            has=ceil((float)largest/m);

            if (has<0)

                        return 0;

            h=data/has;

            if (h<0)

                        h=0;

            return h;

}

void addrcal_sort(int large, node data)

{

            node temp,p,s,temp1;

            int random;

            temp=data;

            random=hash(large,data->info);

            if (hashtable[random]==NULL)

            {

                        temp->next=hashtable[random];

                        hashtable[random]=temp;

            }

            else

            {

                        p=hashtable[random];

                        s=p->next;

                        if (p->info>temp->info)

                        {

                                    hashtable[random]=temp;

                                    temp->next=p;

                                    p->next=s;

                                    p=hashtable[random];

                                    s=p->next;

                        }

                        while ((s!=NULL)&&(s->info<temp->info))

                        {

                                    p=s;

                                    s=s->next;

                        }

                        p->next=temp;

                        temp->next=s;

            }

            return;

}

node link (node start, node temp, int i)

{

            node p;

            int j;

            hashtable[i]=temp;

            start=hashtable[i];

            j=i+1;

            while (j<m)

            {

                        if (hashtable[j]!=NULL)

                        {

                                    p=hashtable[i];

                                    while (p->next!=NULL)

                                    p=p->next;

                                    p->next=hashtable[j];

                                    i=j;

                        }

                        j++;

            }

            return start;

}

void disphashtable(node pos, int n)

{

            printf ("Hashtable %d : ",n);

            while (pos)

            {

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

                        pos=pos->next;

            }

            printf ("\n");

}

void main ()

{

            node start,s,p,head,temp,tmp,pass;

            int i,k,n,lrg;

            printf ("\nEnter the element of the list and input -9999 to stop\n");

            start=(node)malloc(sizeof(node));

            create(start);

            printf ("\n\tGiven list is : \n");

            display(start);

            for (k=0;k<m;k++)

                        hashtable[k]=(node)malloc(sizeof(node));

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

                        hashtable[i]=NULL;

            lrg=largest(start);

            head=start;

            while (head!=NULL)

            {

                        if (head->info!=-9999)

                        {

                                    pass=(node)malloc(sizeof(node));

                                    pass->info=head->info;

                                    pass->next=NULL;

                                    addrcal_sort(lrg,pass);

                        }

                        head=head->next;

            }

            printf ("\n\n\t Hash table entries \n");

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

            {

                        pass=hashtable[n];

                        disphashtable(pass,n);

            }

            i=0;

            while ((hashtable[i]==NULL)&&(i<m))

                        ++i;

            tmp=hashtable[i];

            start=link(start,tmp,i);

            printf ("\n\nSorted list is : \n");

            display(start);

}

 

Output:

 

Enter the element of the list and input -9999 to stop

9

8

7

6

5

4

3

2

1

0

-9999

 

                          Given list is :

 9 8 7 6 5 4 3 2 1 0

 

                                    Hash table entries

Hashtable 1 :  1

Hashtable 2 :  2

Hashtable 3 :  3

Hashtable 4 :  4

Hashtable 5 :  5

Hashtable 6 :  6

Hashtable 7 :  7

Hashtable 8 :  8

Hashtable 9 :  9

Hashtable 10 :

Hashtable 11 :

Hashtable 12 :

Hashtable 13 :

Hashtable 14 :

Hashtable 15 :

Hashtable 16 :

Hashtable 17 :

Hashtable 18 :

Hashtable 19 :

Hashtable 20 :

Hashtable 21 :

Hashtable 22 :

Hashtable 23 :

Hashtable 24 :

Hashtable 25 :

 

 

Sorted list is :

 

 0 1 2 3 4 5 6 7 8 9


//Dictionary

# include <stdio.h>

# include <string.h>

typedef struct

{

            char word[32];

            char mean[75];

} dict;

FILE *fpt1;

dict temp;

void create()

{

            char ch;

            char dn[15];

            printf ("\nEnter the name of new dictionary : ");

            scanf (" %s",dn);

            fpt1=fopen(dn,"w+");

            do

            {

                        printf ("\nEnter the word : ");

                        scanf ("%s",temp.word);

                        printf ("\nEnter the meaning : ");

                        scanf (" %[^\n]s",temp.mean);

                        fprintf (fpt1,"%s\t%s\n",temp.word,temp.mean);

                        fflush(stdin);

                        printf ("\nDo you want to continue (y/n) : ");

                        scanf ("%c",&ch);

            } while ((ch=='y')||(ch=='Y'));

            fclose(fpt1);

}

void append()

{

            char ch;

            char dn[15];

            printf ("\nEnter the name of the dictionary : ");

            scanf (" %s",dn);

            fpt1=fopen(dn,"a+");

            if (fpt1==NULL)

                        printf ("\nNo such dictionary exists");

            else

            {

                        do

                        {

                                    printf ("\n\t %s Dictionary",dn);

                                    printf ("\n\t Enter the word and its meaning");

                                    printf ("\n\t Enter the word : ");

                                    scanf (" %s",temp.word);

                                    printf ("\n\tEnter the meaning : ");

                                    scanf (" %[^\n]s",temp.mean);

                                    fprintf(fpt1,"%s\t%s\n",temp.word,temp.mean);

                                    fflush(stdin);

                                    printf ("\nDo you want to continue (y/n) : ");

                                    scanf (" %c",&ch);

                        } while ((ch=='y')||(ch=='Y'));

            }

            fclose(fpt1);

}

void search()

{

            char wrd[10];

            char dn[15];

            printf ("\nEnter the name of the dictionary : ");

            scanf ("%s",dn);

            fpt1=fopen(dn,"r+");

            rewind(fpt1);

            if (fpt1==NULL)

                        printf ("\nNo such dictionary exists");

            else

            {

                        printf ("\nEnter the word whose meaning is required");

                        printf ("\nThe word : ");

                        scanf (" %s",wrd);

                        while (!feof(fpt1))

                        {

                                    fscanf (fpt1,"%s\t%s\n",temp.word,temp.mean);

                                    if (strcmp(wrd,temp.word)==0)

                                    {

                                                printf ("\nThe meaning is : %s",temp.mean);

                                                goto l;

                                    }

                        }

                        printf ("\nWord not found");

                        l : fclose(fpt1);

            }

}

void display()

{

            char dn[15];

            printf ("\nEnter the name of the dictionary : ");

            scanf (" %s",dn);

            fpt1=fopen(dn,"r+");

            if (fpt1==NULL)

                                    printf ("\nNo such dictionary exists");

            else

            {

                        rewind(fpt1);

                        printf ("\n\n %s Dictionary list", dn);

                        printf ("\n Word \t : Meaning \n");

                        while (!feof(fpt1))

                        {

                                    fscanf (fpt1,"%s\t%s\n",temp.word,temp.mean);

                                    printf ("\n %s\t%s\n",temp.word,temp.mean);

                        }

            }

}

void main ()

{

            int ch;

            do

            {

                        printf ("\n\nDictionary");

                        printf ("\n1 - Create new dictionary");

                        printf ("\n2 - Add new words");

                        printf ("\n3 - Find meaning");

                        printf ("\n4 - Display all words");

                        printf ("\n5 - Exit");

                        printf ("\nEnter choice : ");

                        scanf ("%d",&ch);

                        switch (ch)

                        {

                                    case 1 : create ();

                                                 break;

                                    case 2 : append();

                                                 break;

                                    case 3 : search();

                                                 break;

                                    case 4 : display();

                                                 break;

                                    case 5 : break;

                          default : printf ("\nIllegal choice");

                        }

                        printf ("\n");

            } while (ch!=5);

}

 

 

Output:

 

Dictionary

1 - Create new dictionary

2 - Add new words

3 - Find meaning

4 - Display all words

5 - Exit

Enter choice : 1

 

Enter the name of new dictionary : english

 

Enter the word : alter

 

Enter the meaning : change

 

Do you want to continue (y/n) : y

 

Enter the word : abdicate

 

Enter the meaning : renounce

 

Do you want to continue (y/n) : y

 

Enter the word : abduct

 

Enter the meaning : kidnap

 

Do you want to continue (y/n) : y

 

Enter the word : abide

 

Enter the meaning : accept

 

Do you want to continue (y/n) : y

 

Enter the word : disrobe

 

Enter the meaning : undress

 

Do you want to continue (y/n) : y

 

Enter the word : err

 

Enter the meaning : mistake

 

Do you want to continue (y/n) : y

 

Enter the word : modify

 

Enter the meaning : change

 

Do you want to continue (y/n) : y

 

Enter the word : retrieve

 

Enter the meaning : obtain

 

Do you want to continue (y/n) : y

 

Enter the word : malady

 

Enter the meaning : illness

 

Do you want to continue (y/n) : y

 

Enter the word : view

 

Enter the meaning : display

 

Do you want to continue (y/n) : n

 

 

 

Dictionary

1 - Create new dictionary

2 - Add new words

3 - Find meaning

4 - Display all words

5 - Exit

Enter choice : 2

 

Enter the name of the dictionary : english

 

                                    english Dictionary

                                    Enter the word and its meaning

                                    Enter the word : curb

 

                          Enter the meaning : restrain

 

Do you want to continue (y/n) : n

 

 

 

Dictionary

1 - Create new dictionary

2 - Add new words

3 - Find meaning

4 - Display all words

5 - Exit

Enter choice : 4

 

Enter the name of the dictionary : english

 

 

 english Dictionary list

 Word    : Meaning

 

 alter  change

 

 abdicate       renounce

 

 abduct kidnap

 

 abide  accept

 

 disrobe        undress

 

 err    mistake

 

 modify change

 

 retrieve       obtain

 

 malady illness

 

 view   display

 

 curb   restrain

 

 

 

Dictionary

1 - Create new dictionary

2 - Add new words

3 - Find meaning

4 - Display all words

5 - Exit

Enter choice : 3

 

Enter the name of the dictionary : english

 

Enter the word whose meaning is required

The word : curb

 

The meaning is : restrain

 

 

Dictionary

1 - Create new dictionary

2 - Add new words

3 - Find meaning

4 - Display all words

5 - Exit

Enter choice : 5

 

 

 

 

 

 


//File retrieval by contiguous allocation

# include <stdio.h>

# include <conio.h>

typedef struct

{

            int no,marks;

            char name[32];

} record;

record stud[13];

void adjust(int i, int n)

{

            int j=2*i;

            record item=stud[i];

            while (j<=n)

            {

                        if ((j<n)&&(stud[j].no<stud[j+1].no))

                                    j=j+1;

                        if (item.no>=stud[j].no)

                                    break;

                        stud[j/2]=stud[j];

                        j=2*j;

            }

            stud[j/2]=item;

}

void heapify (int n)

{

            int i;

            for (i=n/2;i>=1;i--)

                        adjust(i,n);

}

void sort (int n)

{

            FILE *fp;

            record t;

            int i;

            heapify(n);

            for (i=n;i>=2;i--)

            {

                        t=stud[i];

                        stud[i]=stud[1];

                        stud[1]=t;

                        adjust(1,i-1);

            }

            fp=fopen("test.dat","w");

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

                        fwrite(&stud[i],sizeof(record),1,fp);

}

int input (int i)

{

            FILE *fp;

            char ch;

            if (i!=0)

            {

                        fp=fopen("test.dat","r");

                        fread(&stud[1],sizeof(record),i,fp);

                        fclose(fp);

            }

            fp=fopen("test.dat","a");

            do

            {

                        i++;

                        fflush(stdin);

                        printf ("Enter student name : ");

                        scanf(" %[^\n]s",stud[i].name);

                        printf ("Enter student number : ");

                        scanf ("%d",&stud[i].no);

                        printf ("Enter student marks : ");

                        scanf ("%d",&stud[i].marks);

                        fwrite(&stud[i],sizeof(stud[i]),1,fp);

                        printf ("Any more records (y/n) : ");

                        scanf (" %c",&ch);

            } while ((ch=='y')||(ch=='Y'));

            sort (i);

            fclose(fp);

            return i;

}

void display ()

{

            record rec;

            FILE *fp;

            fp=fopen("test.dat","r");

            if (!fp)

            {

                        printf ("\nNo records");

                        fclose (fp);

            }

            else

            {

                        do

                        {

                                    fread (&rec, sizeof(record),1,fp);

                                    if (feof(fp))

                                                break;

                                    printf ("\nName : %s\nRoll number : %d",rec.name,rec.no);

                                    printf ("\nMarks : %d\n",rec.marks);

                        } while (!feof(fp));

                        fclose(fp);

            }

}

void retrieve (int num)

{

            int i;

            record rec;

            FILE *fp;

            fp=fopen("test.dat","r");

            if (!fp)

            {

                        printf ("\n No records");

                        fclose (fp);

                        return;

            }

            else

            {

                        for (i=1;;i++)

                        {

                                    fread(&rec,sizeof(record),1,fp);

                                    if (feof(fp)||rec.no>num)

                                    {

                                                printf ("\nRecord not found\nc");

                                                fclose(fp);

                                                return;

                                    }

                                    else if (rec.no==num)

                                    {

                                                printf ("\nName : %s",rec.name);

                                                printf ("\nRoll number : %d",rec.no);

                                                printf ("\nMarks : %d\n",rec.marks);

                                                fclose(fp);

                                                return;

                                    }

                        }

            }

}

void main ()

{

            int ch, i=0, no;

            do

            {

                        printf ("\nMenu\n1 - Insert\n2 - Retrieve\n3 - Display");

                        printf ("\n4 - Exit\nEnter choice : ");

                        scanf ("%d",&ch);

                        switch(ch)

                        {

                                    case 1 : i=input(i);

                                                 break;

                                    case 2 : printf ("\nEnter the roll number : ");

                                                 scanf ("%d",&no);

                                                 retrieve(no);

                                                 break;

                                    case 3 : display();

                                                 break;

                                    case 4 : break;

                          default : printf ("\nIllegal choice\n");

                        }

            } while (ch!=4);

}

 

Output:

 

Menu

1 - Insert

2 - Retrieve

3 - Display

4 - Exit

Enter choice : 1

Enter student name : Abhiram

Enter student number : 601

Enter student marks : 87

Any more records (y/n) : y

Enter student name : Balu

Enter student number : 605

Enter student marks : 89

Any more records (y/n) : y

Enter student name : Chandran

Enter student number : 610

Enter student marks : 76

Any more records (y/n) : y

Enter student name : Deepak

Enter student number : 615

Enter student marks : 87

Any more records (y/n) : y

Enter student name : Shilpa

Enter student number : 618

Enter student marks : 67

Any more records (y/n) : y

Enter student name : John

Enter student number : 630

Enter student marks : 78

Any more records (y/n) : y

Enter student name : Shakthi

Enter student number : 620

Enter student marks : 84

Any more records (y/n) : y

Enter student name : Preeti

Enter student number : 625

Enter student marks : 88

Any more records (y/n) : y

Enter student name : Zahid

Enter student number : 645

Enter student marks : 88

Any more records (y/n) : y

Enter student name : Venkat

Enter student number : 642

Enter student marks : 86

Any more records (y/n) : n

 

Menu

1 - Insert

2 - Retrieve

3 - Display

4 - Exit

Enter choice : 3

 

Name : Abhiram

Roll number : 601

Marks : 87

 

Name : Balu

Roll number : 605

Marks : 89

 

Name : Chandran

Roll number : 610

Marks : 76

 

Name : Deepak

Roll number : 615

Marks : 87

 

Name : Shilpa

Roll number : 618

Marks : 67

 

Name : John

Roll number : 630

Marks : 78

 

Name : Shakthi

Roll number : 620

Marks : 84

 

Name : Preeti

Roll number : 625

Marks : 88

 

Name : Zahid

Roll number : 645

Marks : 88

 

Name : Venkat

Roll number : 642

Marks : 86

 

Menu

1 - Insert

2 - Retrieve

3 - Display

4 - Exit

Enter choice : 2

 

Enter the roll number : 645

 

Name : Zahid

Roll number : 645

Marks : 88

 

Menu

1 - Insert

2 - Retrieve

3 - Display

4 - Exit

Enter choice : 4

 


//Quick Sort

# include <stdio.h>

# include <conio.h>

int n;

void qsort(int b[], int left, int right)

{

            int i,j,p,tmp,finish;

            if (right>left)

            {

                        i=left;

                        j=right;

                        p=b[left];

                        finish=0;

                        while (!finish)

                        {

                                    do

                                    {

                                                ++i;

                                    } while ((b[i]<=p)&&(i<=right));

                                    while ((b[j]>=p)&&(j>left))

                                                --j;

                                    if (j<i)

                                                finish=1;

                                    else

                                    {

                                                tmp=b[i];

                                                b[i]=b[j];

                                                b[j]=tmp;

                                    }

                        }

                        tmp=b[left];

                        b[left]=b[j];

                        b[j]=tmp;

                        qsort(b,left,j-1);

                        qsort(b,i,right);

            }

            return;

}

void main ()

{

            int a[20], i, l, r;

            clrscr();

            printf ("\nNo. of elements in vector : ");

            scanf ("%d",&n);

            printf ("\nInput elements of vector \n");

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

                        scanf ("%d",&a[i]);

            printf ("\n");

            l=0;

            r=n-1;

            qsort(a,l,r);

            printf ("\nQuick sorted vector is : \n");

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

                        printf ("%5d",a[i]);

}

 

Output:

 

No. of elements in vector : 5

 

Input elements of vector

3

4

2

1

5

 

 

Quick sorted vector is :

             1    2    3    4    5


//Doubly Linked List

# include <stdio.h>

# include <malloc.h>

typedef struct node

{

            int data;

            struct node *next, *prev;

} node;

node *first;

node *create (node *front)

{

            node *temp, *previous;

            int i,no;

            front=previous=NULL;

            printf ("\nEnter the number of elements : ");

            scanf ("%d",&no);

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

            {

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

                        temp->next=temp->prev=NULL;

                        printf ("Enter data : ");

                        scanf ("%d",&temp->data);

                        if (!front)

                                    front=temp;

                        else

                        {

                                    previous->next=temp;

                                    temp->prev=previous;

                        }

                        previous=temp;

            }

            temp->next=NULL;

            return(front);

}

node *insert(node *front)

{

            int pos;

            int i=1;

            node *cur=front;

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

            newnode->prev=newnode->next=NULL;

            printf ("\nEnter new data : ");

            scanf ("%d",&newnode->data);

            printf ("\nEnter position : ");

            scanf ("%d",&pos);

            if ((pos==1)||(front==NULL))

            {

                        newnode->next=front;

                        front=newnode;

                        return(front);

            }

            else

            {

                        while ((i<pos-1)&&(cur->next!=NULL))

                        {

                                    cur=cur->next;

                                    i++;

                        }

                        newnode->next=cur->next;

                        newnode->prev=cur;

                        cur->next=newnode;

                        cur->next->prev=newnode;

            }

            return(front);

}

node *delet(node *front)

{

            int target;

            node *cur=front;

            if (!front)

                        printf ("\nList is empty\n");

            else

            {

                        printf ("\nEnter data to be deleted : ");

                        scanf ("%d",&target);

                        while (cur&&(cur->data!=target))

                                    cur=cur->next;

                        if (!cur)

                                    printf ("\nData not found\n");

                        else

                        {

                                    if ((cur==front)&&(cur->next==NULL))

                                    {

                                                front=NULL;

                                                free(cur);

                                    }

                                    else if (cur==front)

                                    {

                                                front->next->prev=NULL;

                                                front=front->next;

                                                free(cur);

                                    }

                                    else if (cur->next==NULL)

                                    {

                                                cur->prev->next=NULL;

                                                free(cur);

                                    }

                                    else

                                    {

                                                cur->prev->next=cur->next;

                                                cur->next->prev=cur->prev;

                                    }

                        }

            }

            return(front);

}

void display (node *front)

{

            if (front)

            {

                        printf ("->%d",front->data);

                        display(front->next);

            }

}

int menu()

{

            int ch;

            printf ("\n\nDoubly Linked List - Menu");

            printf ("\n1 - Create");

            printf ("\n2 - Insert");

            printf ("\n3 - Delete");

            printf ("\n4 - Display");

            printf ("\n5 - Exit");

            printf ("\nEnter choice : ");

            scanf ("%d",&ch);

            return (ch);

}

void main ()

{

            int choice;

            do

            {

                        switch(choice=menu())

                        {

                                    case 1 : first=create(first);

                                                 printf ("\nHead");

                                                 display(first);

                                                 break;

                                    case 2 : first=insert(first);

                                                 printf ("\nHead");

                                                 display(first);

                                                 break;

                                    case 3 : first=delet(first);

                                                 printf ("\nHead");

                                                 display(first);

                                                 break;

                                    case 4 : printf ("\nHead");

                                                 display(first);

                                                 break;

                                    case 5 : break;

                          default : printf ("\nIllegal choice\n");

                        }

            } while (choice!=5);

}

 

Output :

 

Doubly Linked List - Menu

1 - Create

2 - Insert

3 - Delete

4 - Display

5 - Exit

Enter choice : 1

 

Enter the number of elements : 10

Enter data : 1

Enter data : 2

Enter data : 3

Enter data : 4

Enter data : 6

Enter data : 7

Enter data : 8

Enter data : 9

Enter data : 10

Enter data : 11

 

Head->1->2->3->4->6->7->8->9->10->11

 

Doubly Linked List - Menu

1 - Create

2 - Insert

3 - Delete

4 - Display

5 - Exit

Enter choice : 2

 

Enter new data : 5

 

Enter position : 5

 

Head->1->2->3->4->5->6->7->8->9->10->11

 

Doubly Linked List - Menu

1 - Create

2 - Insert

3 - Delete

4 - Display

5 - Exit

Enter choice : 3

 

Enter data to be deleted : 9

 

Head->1->2->3->4->5->6->7->8->10->11

 

Doubly Linked List - Menu

1 - Create

2 - Insert

3 - Delete

4 - Display

5 - Exit

Enter choice : 5


// Linked list operations

# include <stdio.h>

# include <malloc.h>

typedef struct list_element

{

            char name[32];

            int empno;

            int age;

            char sex;

            struct list_element *next;

} node;

void main ()

{

            node *first=NULL;

            int choice;

            int menu();

            node *create(node *);

            node *insert(node *);

            node *delet(node *);

            void display(node *);

            do

            {

                        choice=menu();

                        switch(choice)

                        {

                                    case 1 :

                                                first=create(first);

                                                printf ("\nCreated LIST : \n");

                                                display(first);

                                                continue;

 

                                    case 2 :

                                                first=insert(first);

                                                printf ("\nLIST : \n");

                                                display(first);

                                                continue;

 

                                    case 3 :

                                                first=delet(first);

                                                continue;

 

                                    case 4 :

                                                display(first);

                                                continue;

 

                                    default :

                        printf ("\nEnd of computation\n");

                        }

            }while (choice!=5);

}

int menu()

{

            int choice;

            do

            {

                        printf ("\nMain Menu ");

                        printf ("\n1 - Create the linked list");

                        printf ("\n2 - Insert an item");

                        printf ("\n3 - Delete an item");

                        printf ("\n4 - Display list");

                        printf ("\n5 - Exit");

                        printf ("\nEnter choice : ");

                        scanf ("%d",&choice);

            }while (choice<1||choice>5);

            printf ("\n");

            return (choice);

}

node *create(node *first)

{

            int no,i;

            node *temp, *prev;

            prev=first=NULL;

            printf ("Enter number of data item(s) : ");

            scanf ("%d",&no);

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

            {

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

                        printf ("\nEnter name : ");

                        scanf (" %[^\n]s",temp->name);

                        printf ("Enter enrolment number : ");

                        scanf ("%d",&temp->empno);

                        printf ("Enter age : ");

                        scanf ("%d",&temp->age);

                        printf ("Enter sex : ");

                        scanf (" %c",&temp->sex);

                        temp->next=NULL;

                        if (first==NULL)

                                    first=temp;

                        else

                                    prev->next=temp;

                        prev=temp;

            }

            temp->next=NULL;

            return(first);

}

void display(node *first)

{

            if (first!=NULL)

            {

                        printf ("\nName : %s\nEnrolment No. : %d",first->name,first->empno);

                        printf ("\nAge : %d\nSex : %c\n---->\n",first->age,first->sex);

                        display(first->next);

            }

            return;

}

node *insert(node *first)

{

            node *newnode;

            node *temp;

            int position;

            int i;

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

            printf ("\nEnter new item - name : ");

            scanf (" %[^\n]s",newnode->name);

            printf ("Enter enrolment number : ");

            scanf ("%d",&newnode->empno);

            printf ("Enter age : ");

            scanf ("%d",&newnode->age);

            printf ("Enter sex : ");

            scanf (" %c",&newnode->sex);

            do

            {

                        printf ("Enter position of insertion : ");

                        scanf ("%d",&position);

            }while (position<=0);

            if ((position==1)||(first==NULL))

            {

                        newnode->next=first;

                        first=newnode;

            }

            else

            {

                        i=1;

                        temp=first;

                        while ((i<position-1)&&(temp->next!=NULL))

                        {

                                    temp=temp->next;

                                    i++;

                        }

                        newnode->next=temp->next;

                        temp->next=newnode;

            }

            return (first);

}

node *delet(node *first)

{

            node *temp;

            node *prev;

            int target;

            printf ("\nEnrolment number of data item to be deleted : ");

            scanf ("%d",&target);

            if (first==NULL)

                        printf ("\nLIST EMPTY - CANNOT DELETE");

            else

            {

                        prev=NULL;

                        temp=first;

                        while ((temp!=NULL)&&(temp->empno!=target))

                        {

                                    prev=temp;

                                    temp=temp->next;

                        }

                        if (temp==NULL)

                                    printf ("\nElement not found");

                        else

                        {

                                    if (prev==NULL)

                                                first=first->next;

                                    else

                                                prev->next=temp->next;

                                    printf ("\nLIST : \n");

                                    display(first);

                        }

            }

            return (first);

}

 

Output:

 

Main Menu

1 - Create the linked list

2 - Insert an item

3 - Delete an item

4 - Display list

5 - Exit

Enter choice : 1

 

Enter number of data item(s) : 10

 

Enter name : Ramu

Enter enrolment number : 100

Enter age : 19

Enter sex : M

 

Enter name : Senthil

Enter enrolment number : 200

Enter age : 20

Enter sex : M

 

Enter name : Tarun

Enter enrolment number : 300

Enter age : 19

Enter sex : M

 

Enter name : Venkat

Enter enrolment number : 150

Enter age : 20

Enter sex : M

 

Enter name : Preeti

Enter enrolment number : 250

Enter age : 19

Enter sex : F

 

Enter name : Pawan

Enter enrolment number : 350

Enter age : 19

Enter sex : M

 

Enter name : Shakthi

Enter enrolment number : 620

Enter age : 19

Enter sex : M

 

Enter name : Abhiram

Enter enrolment number : 614

Enter age : 19

Enter sex : M

 

Enter name : John

Enter enrolment number : 234

Enter age : 19

Enter sex : M

 

Enter name : Roja

Enter enrolment number : 45

Enter age : 19

Enter sex : F

 

Created LIST :

 

Name : Ramu

Enrolment No. : 100

Age : 19

Sex : M

---->

 

Name : Senthil

Enrolment No. : 200

Age : 20

Sex : M

---->

 

Name : Tarun

Enrolment No. : 300

Age : 19

Sex : M

---->

 

Name : Venkat

Enrolment No. : 150

Age : 20

Sex : M

---->

 

Name : Preeti

Enrolment No. : 250

Age : 19

Sex : F

---->

 

Name : Pawan

Enrolment No. : 350

Age : 19

Sex : M

---->

 

Name : Shakthi

Enrolment No. : 620

Age : 19

Sex : M

---->

 

Name : Abhiram

Enrolment No. : 614

Age : 19

Sex : M

---->

 

Name : John

Enrolment No. : 234

Age : 19

Sex : M

---->

 

Name : Roja

Enrolment No. : 45

Age : 19

Sex : F

---->

 

Main Menu

1 - Create the linked list

2 - Insert an item

3 - Delete an item

4 - Display list

5 - Exit

Enter choice : 2

 

 

Enter new item - name : Chandru

Enter enrolment number : 123

Enter age : 19

Enter sex : M

Enter position of insertion : 2

 

LIST :

 

Name : Ramu

Enrolment No. : 100

Age : 19

Sex : M

---->

 

Name : Chandru

Enrolment No. : 123

Age : 19

Sex : M

---->

 

Name : Senthil

Enrolment No. : 200

Age : 20

Sex : M

---->

 

Name : Tarun

Enrolment No. : 300

Age : 19

Sex : M

---->

 

Name : Venkat

Enrolment No. : 150

Age : 20

Sex : M

---->

 

Name : Preeti

Enrolment No. : 250

Age : 19

Sex : F

---->

 

Name : Pawan

Enrolment No. : 350

Age : 19

Sex : M

---->

 

Name : Shakthi

Enrolment No. : 620

Age : 19

Sex : M

---->

 

Name : Abhiram

Enrolment No. : 614

Age : 19

Sex : M

---->

 

Name : John

Enrolment No. : 234

Age : 19

Sex : M

---->

 

Name : Roja

Enrolment No. : 45

Age : 19

Sex : F

---->

 

Main Menu

1 - Create the linked list

2 - Insert an item

3 - Delete an item

4 - Display list

5 - Exit

Enter choice : 3

 

 

Enrolment number of data item to be deleted : 45

 

LIST :

 

Name : Ramu

Enrolment No. : 100

Age : 19

Sex : M

---->

 

Name : Chandru

Enrolment No. : 123

Age : 19

Sex : M

---->

 

Name : Senthil

Enrolment No. : 200

Age : 20

Sex : M

---->

 

Name : Tarun

Enrolment No. : 300

Age : 19

Sex : M

---->

 

Name : Venkat

Enrolment No. : 150

Age : 20

Sex : M

---->

 

Name : Preeti

Enrolment No. : 250

Age : 19

Sex : F

---->

 

Name : Pawan

Enrolment No. : 350

Age : 19

Sex : M

---->

 

Name : Shakthi

Enrolment No. : 620

Age : 19

Sex : M

---->

 

Name : Abhiram

Enrolment No. : 614

Age : 19

Sex : M

---->

 

Name : John

Enrolment No. : 234

Age : 19

Sex : M

---->

 

Main Menu

1 - Create the linked list

2 - Insert an item

3 - Delete an item

4 - Display list

5 - Exit

Enter choice : 5

 

 

End of computation

 


// Sorting by Binary Search method

# include <stdio.h>

# include <malloc.h>

# define SIZE 20

struct node

{

            float val;

            struct node *lptr, *rptr;

};

void disp(float a[SIZE], int n)

{

            int i;

            printf ("%6.2f",a[0]);

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

                        printf (", %6.2f",a[i]);

            printf("\n");

}

void preord(struct node *strptr, float a[SIZE], int *i)

{

            if (strptr!=NULL)

            {

                        preord(strptr->lptr,a,i);

                        a[*i]=strptr->val;

                        (*i)++;

                        preord(strptr->rptr,a,i);

            }

}

void binssort(float a[SIZE], int n)

{

            struct node *strptr, *savptr, *tempptr;

            int i,f;

            strptr=(struct node *)malloc(sizeof(struct node));

            strptr->lptr=NULL;

            strptr->rptr=NULL;

            strptr->val=a[n/2];

            for (i=n/2+1;i<=n-1;i++)

            {

                        tempptr=strptr;

                        do

                        {

                                    if (tempptr->val>a[i])

                                    {

                                                savptr=tempptr;

                                                tempptr=tempptr->lptr;

                                                f=1;

                                    }

                                    else

                                    {

                                                savptr=tempptr;

                                                tempptr=tempptr->rptr;

                                                f=2;

                                    }

                        }while (tempptr!=NULL);

                        if (f==1)

                        {

                                    savptr->lptr=(struct node*)malloc(sizeof(struct node));

                                    savptr=savptr->lptr;

                        }

                        else

                        {

                                    savptr->rptr=(struct node*)malloc(sizeof(struct node));

                                    savptr=savptr->rptr;

                        }

                        savptr->lptr=NULL;

                        savptr->rptr=NULL;

                        savptr->val=a[i];

            }

            for (i=n/2-1;i>=0;i--)

            {

                        tempptr=strptr;

                        do

                        {

                                    if (tempptr->val>a[i])

                                    {

                                                savptr=tempptr;

                                                tempptr=tempptr->lptr;

                                                f=1;

                                    }

                                    else

                                    {

                                                savptr=tempptr;

                                                tempptr=tempptr->rptr;

                                                f=2;

                                    }

                        }while (tempptr!=NULL);

                        if (f==1)

                        {

                                    savptr->lptr=(struct node*)malloc(sizeof(struct node));

                                    savptr=savptr->lptr;

                        }

                        else

                        {

                                    savptr->rptr=(struct node*)malloc(sizeof(struct node));

                                    savptr=savptr->rptr;

                        }

                        savptr->lptr=NULL;

                        savptr->rptr=NULL;

                        savptr->val=a[i];

            }

            i=0;

            preord(strptr,a,&i);

}

void main ()

{

            int i, n;

            float a[SIZE];

            printf ("\nProgram to sort the given vector: ");

            printf ("\nMethod : Binary - Search Sort");

            do

            {

                        printf ("\nHow many elements : ");

                        scanf ("%i",&n);

                        fflush(stdin);

                        printf ("%i",n);

            }while (n<2||n>SIZE);

            printf ("\nEnter the elements : \n");

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

            {

                        printf (" %i : ",i+1);

                        scanf ("%f",&a[i]);

                        fflush(stdin);

            }

            printf ("\nThe entered elements are : \n");

            disp(a,n);

            binssort(a,n);

            printf ("\nThe sorted vector (in ascending order) : \n");

            disp(a,n);

}

 

Output:

 

Program to sort the given vector:

Method : Binary - Search Sort

How many elements : 10

10

Enter the elements :

 1 : 98

 2 : 34

 3 : 78

 4 : 65

 5 : 12

 6 : 88

 7 : 54

 8 : 42

 9 : 5

 10 : 25

 

The entered elements are :

 98.00,  34.00,  78.00,  65.00,  12.00,  88.00,  54.00,  42.00,   5.00,  25.00

 

The sorted vector (in ascending order) :

  5.00,  12.00,  25.00,  34.00,  42.00,  54.00,  65.00,  78.00,  88.00,  98.00


// Tree heap sort - non-key value

# include <stdio.h>

# include <string.h>

# include <stdlib.h>

typedef struct {

            char name[20];

            int no, age;

} record;

record stud[12];

void adjust (int i, int n, int ch)

{

            int j=2*i;

            record item=stud[i];

            switch (ch)

            {

                        case 1 : while (j<=n)

                                    {

                                                if ((j<n)&&(stud[j].no<stud[j+1].no))

                                                            j=j+1;

                                                if (item.no>=stud[j].no)

                                                            break;

                                                stud[j/2]=stud[j];

                                                j=2*j;

                                    }

                                    stud[j/2]=item;

                                    break;

                        case 2 :            while (j<=n)

                                    {

                                                if ((j<n)&&(strcmp(stud[j].name,stud[j+1].name)<0))

                                                            j=j+1;

                                                if (strcmp(item.name,stud[j].name)>0)

                                                            break;

                                                stud[j/2]=stud[j];

                                                j=2*j;

                                    }

                                    stud[j/2]=item;

                                    break;

                        case 3 :            while (j<=n)

                                    {

                                                if ((j<n)&&(stud[j].age<stud[j+1].age))

                                                            j=j+1;

                                                if (item.age>=stud[j].age)

                                                            break;

                                                stud[j/2]=stud[j];

                                                j=2*j;

                                    }

                                    stud[j/2]=item;

                                    break;

 

            }

}

void heapify (int n,int ch)

{

            int i;

            for (i=n/2;i>=1;i--)

                        adjust (i,n,ch);

}

void sort (int n, int ch)

{

            int i;

            record t;

            heapify (n,ch);

            for (i=n;i>=2;i--)

            {

                        t=stud[i];

                        stud[i]=stud[1];

                        stud[1]=t;

                        adjust (1,i-1,ch);

            }

}

int input ()

{

            int no=0;

            char ch;

            do

            {

                        ++no;

                        printf ("Enter name : ");

                        scanf ("%s",stud[no].name);

                        printf ("Enter number : ");

                        scanf ("%d",&stud[no].no);

                        printf ("Enter age : ");

                        scanf ("%d",&stud[no].age);

                        printf ("Any more records (y/n) : ");

                        scanf (" %c",&ch);

                        fflush(stdin);

            } while (ch!='n');

            return no;

}

void display (int n)

{

            int i;

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

            {

                        printf ("\nName   : %s ",stud[i].name);

                        printf ("\n Age   : %d ",stud[i].age);

                        printf ("\nNumber : %d \n",stud[i].no);

            }

}

void main ()

{

            int no,ch;

            printf ("\n Heap Sort \n");

            no=input();

            do

            {

                        printf ("\n Sort according to : ");

                        printf ("\n 1 - Number  ");

                        printf ("\n 2 - Name  ");

                        printf ("\n 3 - Age  ");

                        printf ("\n 4 - Exit");

                        printf ("\nEnter your choice : ");

                        scanf ("%d",&ch);

                        if (ch==4)

                                    exit(0);

                        sort (no,ch);

                        display (no);

            }while (ch!=4);

}

 

Output:

 

 Heap Sort

Enter name : Ramu

Enter number : 100

Enter age : 18

 

Enter name : Shaan

Enter number : 200

Enter age : 19

 

Enter name : Tarun

Enter number : 300

Enter age : 20

 

Enter name : Venkat

Enter number : 400

Enter age : 19

 

Enter name : Zahid

Enter number : 500

Enter age : 19

 

Enter name : Shilpa

Enter number : 150

Enter age : 19

 

Enter name : Senthil

Enter number : 250

Enter age : 18

 

Enter name : Shakthi

Enter number : 350

Enter age : 19

 

Enter name : Parvathi

Enter number : 450

Enter age : 19

 

Enter name : Antony

Enter number : 420

Enter age : 19

 

 Sort according to :

 1 - Number

 2 - Name

 3 - Age

 4 - Exit

Enter your choice : 1

 

Name   : Ramu

 Age   : 18

Number : 100

 

Name   : Shilpa

 Age   : 19

Number : 150

 

Name   : Shaan

 Age   : 19

Number : 200

 

Name   : Senthil

 Age   : 18

Number : 250

 

Name   : Tarun

 Age   : 20

Number : 300

 

Name   : Shakthi

 Age   : 19

Number : 350

 

Name   : Venkat

 Age   : 19

Number : 400

 

Name   : Antony

 Age   : 19

Number : 420

 

Name   : Parvathi

 Age   : 19

Number : 450

 

Name   : Zahid

 Age   : 19

Number : 500

 

 Sort according to :

 1 - Number

 2 - Name

 3 - Age

 4 - Exit

Enter your choice : 2

 

Name   : Antony

 Age   : 19

Number : 420

 

Name   : Parvathi

 Age   : 19

Number : 450

 

Name   : Ramu

 Age   : 18

Number : 100

 

Name   : Senthil

 Age   : 18

Number : 250

 

Name   : Shaan

 Age   : 19

Number : 200

 

Name   : Shakthi

 Age   : 19

Number : 350

 

Name   : Shilpa

 Age   : 19

Number : 150

 

Name   : Tarun

 Age   : 20

Number : 300

 

Name   : Venkat

 Age   : 19

Number : 400

 

Name   : Zahid

 Age   : 19

Number : 500

 

 Sort according to :

 1 - Number

 2 - Name

 3 - Age

 4 - Exit

Enter your choice : 3

 

Name   : Ramu

 Age   : 18

Number : 100

 

Name   : Senthil

 Age   : 18

Number : 250

 

Name   : Shakthi

 Age   : 19

Number : 350

 

Name   : Shaan

 Age   : 19

Number : 200

 

Name   : Parvathi

 Age   : 19

Number : 450

 

Name   : Shilpa

 Age   : 19

Number : 150

 

Name   : Antony

 Age   : 19

Number : 420

 

Name   : Venkat

 Age   : 19

Number : 400

 

Name   : Zahid

 Age   : 19

Number : 500

 

Name   : Tarun

 Age   : 20

Number : 300

 

 Sort according to :

 1 - Number

 2 - Name

 3 - Age

 4 - Exit

Enter your choice : 4


//Reversing a linked list & Sorting a linked list(Bubble sort)

# include <stdio.h>

# include <malloc.h>

typedef struct rec

{

            int item;

            struct rec *next;

} node;

void sort (node *first)

{

            int temp;

            node *list, *pass;

            for (list=first;list->next!=NULL;list=list->next)

            {

                        for (pass=list->next;pass!=NULL;pass=pass->next)

                        {

                                    if (list->item>pass->item)

                                    {

                                                temp=list->item;

                                                list->item=pass->item;

                                                pass->item=temp;

                                    }

                        }

            }

}

node *create (node *first)

{

            int i,no;

            node *temp, *prev;

            temp=prev=NULL;

            printf ("\nEnter the no. of elements : ");

            scanf ("%d",&no);

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

            {

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

                        printf ("\nEnter data : ");

                        scanf ("%d",&temp->item);

                        temp->next=NULL;

                        if (first==NULL)

                                    first=temp;

                        else

                                    prev->next=temp;

                        prev=temp;

            }

            prev->next=NULL;

            return (first);

}

void display(node *record)

{

            if (record)

            {

                        printf (" %d",record->item);

                        display(record->next);

            }

}

node *reverse (node *current)

{

            node *prev=NULL, *save=NULL;

            node *start;

            while (current)

            {

                        save=current->next;

                        current->next=prev;

                        prev=current;

                        current=save;

            }

            start=prev;

            return (start);

}

void main ()

{

            node *start=NULL;

            printf ("\nSorting and reversing a linked list");

            start=create(start);

            printf ("\n\nList before reversal : \n");

            display(start);

            start=reverse(start);

            printf ("\n\nList after reversal : \n");

            display(start);

            sort (start);

            printf ("\n\nList after sorting : \n");

            display(start);

}

 

Output:

 

Sorting and reversing a linked list

Enter the no. of elements : 10

 

Enter data : 1

Enter data : 3

Enter data : 5

Enter data : 7

Enter data : 9

Enter data : 0

Enter data : 2

Enter data : 4

Enter data : 6

Enter data : 8

 

List before reversal :

 1 3 5 7 9 0 2 4 6 8

 

List after reversal :

 8 6 4 2 0 9 7 5 3 1

 

List after sorting :

 0 1 2 3 4 5 6 7 8 9

 

 

by  Shakthi Kannan

[email protected]

 

Hosted by www.Geocities.ws

1