ds

1.Binary search

#include<stdio.h>

#include<conio.h>

void sortarray(int a[])

{

    int i,j,temp;

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

    {

        for(j=i+1;j<8;j++)

        {

            if(a[i]>a[j])

            {

                temp=a[i];

                a[i]=a[j];

                a[j]=temp;

            }

        }

    }

    printf(“\n\nThe Sorted Array:\n\n”);

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

    printf(“%3d”,a[i]);

}

 

int binarySearch(int arr[],int key)

{

    int beg=0,end=8,mid,result=-1;

    // mid=(beg+end)/2;

    while(beg<=end)

    {

        mid=(beg+end)/2;

        if(arr[mid]==key)

        {

            result=mid;

            end=mid-1;

        }

        else if(key<arr[mid])

            end=mid-1;

        else

            beg=mid+1;

    }

    return result;

}

 

void main(){

    int arr[]={4,7,3,2,1,7,9,0};

    int i,key=7,loc;

clrscr();

    printf(“\nBinary Search\n”);

    printf(“\nArray values are: \n”);

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

    printf(“%3d”,arr[i]);

    printf(“\n\nThe Search element is %d”,
key);

    printf(“\n\nSorting the array elements
“);

    sortarray(arr);

    printf(“\n\nPerforming Binary Search to
find the element: %d”,key);

    loc=binarySearch(arr,key);

    printf(“\n\nThe element’s first occurence
is at the position %d”,loc+1);

    getch();

}

 

 

 

2.Quicksort

#include <stdio.h>  

#include <conio.h>

int partition(int a[10], int low, int high) {  

int pivot, j, temp, i;

pivot = low;

i = low;

j = high; while (i < j) {

while (i < high && a[i] <= a[pivot])  

i++;

while (a[j] > a[pivot])  

j–;

if (i < j)  

{  

temp = a[i];  

a[i] = a[j];  

a[j] = temp;

}

}

temp = a[pivot];  

a[pivot] = a[j];  

a[j] = temp;  

return j;

}

void quicksort(int a[10], int low, int high) {  

int j;

if (low < high) {

j = partition(a, low, high);  

quicksort(a, low, j – 1);  

quicksort(a, j + 1, high);

}

}

void main() {

int i, n, a[10];  

clrscr();

printf(“Enter the array size:\n”);  

scanf(“%d”, &n);

printf(“Enter the array elements:\n”);  

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

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

}

quicksort(a, 0, n – 1);  

printf(“Sorted Array is\n”);  

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

printf(“%d “, a[i]);  

getch();

}

 

 

3.Mergesort

#include <conio.h>  

#include <stdio.h>  

void merge(int arr[], int l, int m, int r)  

{  

    int i, j, k;

    int n1 = m – l + 1;

    int n2 = r – m;  

    int L[10], R[10];

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

        L[i] = arr[l + i];

    for (j = 0; j < n2; j++)

        R[j] = arr[m + 1 + j];

    i = 0;

    j = 0;

    k = l;

    while (i < n1 && j < n2)  

    {  

        if (L[i] <= R[j])  

        {

            arr[k] = L[i];
 

            i++;

        }

        else

        {

            arr[k] = R[j];

            j++;

        }  

        k++;

    }

    while (i < n1) {  

        arr[k] = L[i];

        i++;

        k++;

    }

    while (j < n2)  

    {    

        arr[k] = R[j];  

        j++;

        k++;

    }

}

 

void mergesort(int arr[], int l, int r)  

{  

    if (l < r) {

        int m = l + (r – l) / 2;

        mergesort(arr, l, m);  

        mergesort(arr, m + 1, r);  

        merge(arr, l, m, r);

    }

}

 

int main() {  

    int n, i; int arr[50];  

// clrscr();

    printf(“Enter the array size: “);
 

    scanf(“%d”, &n);

    printf(“Enter array elements:\n”);
 

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

        scanf(“%d”, &arr[i]);
 

         

    mergesort(arr, 0, n – 1);

     

    printf(“Sorted array is: “);  

    for (i = n – 1; i >= 0; i–)

    {

        printf(“%d “, arr[i]);

    }

    printf(“\n”);  

// getch();

 return 0;

}

 

 

 

4./* Write a program to insert the elements 61,16,8,27 into
single linked list & delete 8, 61, 27 from list. Display the list after
each insertion & deletion*/

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

struct node

{

int INFO;

struct node *LINK;

};

typedef struct node NODE;

NODE *start= NULL;

 

void create()

{

char ch;

int i=0;

NODE *currptr, *NEWNODE;

currptr= (NODE *) malloc (sizeof(NODE));

start= currptr;

while(1)

{

printf(“enter the node %d”, i+1);

scanf(“%d”, &currptr ->INFO);

printf(” do you want to add one more item(Y/N)”);

ch= getche();

if(toupper(ch) ==’Y’)

{ NEWNODE=(NODE *) malloc (sizeof(NODE));

currptr -> LINK= NEWNODE;

currptr= NEWNODE;

}

else

{  currptr -> LINK=
NULL;

break; }

i++;

} }

 

void display()

{

NODE  *currptr= start;

if( start== NULL)

printf(” linked list is empty\n”);

else

{ while( currptr != NULL)

{ printf(“%d”, currptr -> INFO);

printf(” -> “);

currptr= currptr -> LINK;

} printf(” NULL”);

} }

 

void insert_beg(int item)

{

NODE * NEWNODE;

NEWNODE= (NODE *) malloc (sizeof(NODE));

NEWNODE -> INFO = item;

NEWNODE -> LINK= start;

start= NEWNODE;

}

 

void insert_end(int item)

{

NODE *currptr, *NEWNODE;

if(start == NULL)

{

NEWNODE= (NODE *) malloc (sizeof(NODE));

NEWNODE -> INFO= item;

NEWNODE -> LINK= NULL;

start = NEWNODE;

} else

{ currptr= start;

while(currptr -> LINK!= NULL)

{ currptr= currptr -> LINK;

}

NEWNODE= (NODE *) malloc (sizeof(NODE));

NEWNODE -> INFO= item;

NEWNODE -> LINK= NEWNODE;

NEWNODE -> LINK= NULL;

} }

 void insert_pos(int
item, int pos)

 {

int i;

NODE *currptr= start, *NEWNODE;

if(pos==-1)

insert_beg(item);

else

{ for(i=0;i< pos-2;i++)

{ currptr= currptr -> LINK;

}

NEWNODE= (NODE *) malloc (sizeof(NODE));

NEWNODE -> INFO= item;

NEWNODE -> LINK= currptr -> LINK;

currptr-> LINK= NEWNODE;

} }

 

void delete_beg()

{

NODE *currptr;

if(start == NULL)

{ printf(” linked list is empty\n”);

return ;

}

else

{   currptr= start;

start= start -> LINK;

free(currptr);

} }

 

void delete_end()

{

NODE *currptr, *prevptr;

if(start== NULL)

printf(” linked list is empty\n”);

else if(start -> LINK== NULL)

{  start= NULL;
//return 0;

}

else

{ currptr= start;

prevptr= NULL;

while(currptr -> LINK!= NULL)

{ prevptr= currptr;

currptr= currptr -> LINK;

}

prevptr -> LINK= NULL;

} }

 

void delete_pos(int pos)

{

int i;

NODE *currptr, *prevptr;

if(pos==1)

delete_beg();

else {

currptr= start;

prevptr= NULL;

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

{ prevptr= currptr;

currptr= currptr -> LINK;

}

prevptr ->LINK= currptr -> LINK;

} }

 

void delete_item(int item)

{

NODE *currptr= start, *prevptr= NULL;

if(start== NULL){

printf(” linked list is empty\n”);

//return 0;

}

else if(start -> INFO== item)

{ start= start -> LINK;

free(currptr);

//return 0;

}

else

{ while(currptr!=NULL && currptr ->INFO!=item)

{ prevptr= currptr;

currptr= currptr -> LINK;

}

if(currptr== NULL)

printf(“\n item is not found in LL”);

else

prevptr ->LINK= currptr->LINK;

} }

 

int length()

{

int len=0;

NODE *currptr;

if( start== NULL)

{ printf(” linked list is empty\n”);

return(len); }

currptr = start;

while(currptr!= NULL)

{ len++;

currptr= currptr -> LINK;

} return(len);

}

 

void main()

{

int ch, item, pos;

clrscr();

while(1)

{

printf(“\n 1.create a linked list”);

printf(“\n 2.display”);

printf(“\n 3.insert first node”);

printf(“\n 4.insert at the end”);

printf(“\n 5.insert at given position”);

printf(“\n 6.delete first node”);

printf(“\n 7.delete last node”);

printf(“\n 8.delete at given position”);

printf(“\n 9.delete a node when item is given”);

printf(“\n 10.exit”);

printf(“enter your choice\n”);

scanf(“%d”, &ch);

switch(ch)

{

case 1:start= NULL;

       create();

       break;

case 2:display();

       break;

case 3:printf(“\nenter item to insert at beginning
\n”);

scanf(“%d”, &item);

printf(“\n LL before insertion is:”);

display();

insert_beg(item);

printf(“\n LL after insertion is:”);

display();

break;

case 4:printf(“\nenter item to insert at end”);

scanf(“%d”, &item);

printf(“\n LL before insertion is:”);

display();

insert_end(item);

printf(“\n LL after insertion is:”);

display();

break;

case 5:printf(“\nenter item to insert at given
position”);

scanf(“%d”, &item);

printf(“enter a valid pos”);

scanf(“%d”, &pos);

if((pos==0) || (pos>length()+1))

{  printf(“\n
invalid position”);

break;}

else

{ printf(“\n LL before insertion is:”);

display();

insert_beg(item);

printf(“\n LL after insertion is:”);

display();

break;}

case 6: printf(” \n linked list before deletion”);

display();

delete_beg();

printf(” \n linked list after deletion”);

display();

break;

case 7:printf(” \n linked list before deletion”);

display();

delete_end();

printf(” \n linked list after  deletion”);

display();

break;

case 8: printf(“enter a valid position to
delete\n”);

if((pos==0) || (pos>length()))

{  printf(”
invalid position\n”);

break; }

else

{ printf(” \n linked list before deletion”);

display();

delete_pos(pos);

printf(” \n linked list after deletion”);

display();

break;

}

case 9: printf(” \n linked list before deletion”);

display();

printf(” enter an item to be deleted \n”);

scanf(“%d”, &item);

delete_item(item);

printf(” \n linked list after deletion”);

display();

break;

case 10: exit(0);

} } }

 

 

5./* Write a program 
to add 6x^3+10x^2+0x+5 and 4x^2+2x+1 using Linked List */

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

struct polynomial

{

int coeff;

int power;

struct polynomial *LINK;

};

typedef struct polynomial NODE;

NODE *poly1= NULL, *poly2=NULL, *poly3= NULL;

 

NODE *create_poly();

NODE *add_poly(NODE *poly1, NODE *poly2);

void display_poly(NODE *ptr);

 

NODE *create_poly()

{

int flag;

int coeff, pow;

NODE  *tmp_node= (NODE
*) malloc(sizeof(NODE));

NODE *poly= tmp_node;

do

{

printf(“\n enter coeff, power “);

scanf(“%d %d”, &coeff, &pow);

tmp_node-> coeff= coeff;

tmp_node-> power= pow;

tmp_node-> LINK= NULL;

printf(” do you want to add more item?(Y=
1/N=0):”);

scanf(“%d”, &flag);

if(flag==1)

{

 tmp_node->LINK =
(NODE *) malloc(sizeof(NODE));

 tmp_node=
tmp_node->LINK;

 tmp_node->LINK=
NULL;

 }

 } while(flag);

 return poly;

 }

  NODE *add_poly(NODE
*poly1, NODE *poly2)

  {

 NODE * tmp_node,
*poly;

 tmp_node = (NODE *)
malloc(sizeof(NODE));

 tmp_node->LINK=
NULL;

 poly3= tmp_node;

 while(poly1
&& poly2)

 {
if(poly1->power  >  poly2->power)

 { tmp_node->power
=  poly1->power;

 tmp_node->coeff =
poly1->coeff;

 poly1 =
poly1->LINK;

 }

 else
if(poly1->power  <  poly2->power)

 { tmp_node->power
=  poly2->power;

 tmp_node->coeff =
poly2->coeff;

 poly2 =
poly2->LINK;

 }

 else

 { tmp_node->power
=  poly1->power;

 tmp_node->coeff =
poly1->coeff + poly2->coeff;

 poly1 =
poly1->LINK;

 poly2 =
poly2->LINK;

 }

 if(poly1  && 
poly2)

 { tmp_node->LINK =
(NODE *) malloc(sizeof(NODE));

  tmp_node=
tmp_node->LINK;

  tmp_node->LINK=
NULL;

  }}

 

while(poly1 || poly2)

{ tmp_node->LINK = (NODE *) malloc(sizeof(NODE));

  tmp_node=
tmp_node->LINK;

  tmp_node->LINK=
NULL;

if(poly1)

{ tmp_node->power= poly1->power;

tmp_node->coeff= poly1->coeff;

poly1= poly1->LINK;

}

if(poly2)

{ tmp_node->power= poly2->power;

tmp_node->coeff= poly2->coeff;

poly2= poly2->LINK;

}

}

return poly;

}

 

void display_poly(NODE 
*ptr)

{

while(ptr !=NULL)

{ printf(” %d x ^ %d”, ptr->coeff,
ptr->power);

ptr= ptr->LINK;

if(ptr !=NULL)

printf(“+”);

}}

 

int main()

{

clrscr();

printf(“create 1st polynomial\n”);

poly1= create_poly();

printf(” first polynomial expression: \n”);

display_poly(poly1);

printf(“create 2nd 
polynomial\n”);

poly2= create_poly();

printf(” second polynomial expression: \n”);

display_poly(poly2);

add_poly(poly1, poly2);

printf(” addition oftwo polynomials are:\n”);

display_poly(poly3);

//return 0;

}

 

 

 

 

6./* Write a Program to push 5,9,34,17,32 into stack &
pop 3 times from stack also display the popped numbers.*/

#include<stdio.h>

#include<conio.h>

#define MAXSTK 5

int TOP= -1;

int S[MAXSTK];

 

main()

{

int ch;

clrscr();

while(1)

{

printf(“1.push, 
2.pop,  3.display,  4.quit\n”);

printf(“enter your choice\n”);

scanf(“%d”, &ch);

switch(ch)

{

case 1:push(); break;

case 2: pop();   
break;

case 3: display(); 
break;

case 4: exit(1);

default: printf(” invalid choice\n”);

} } }

 

push()

{

int item;

if (TOP== MAXSTK-1)

printf(” stack overflow\n”);

else

{

printf(“enter item to be pushed\n”);

scanf(“%d”, &item);

TOP= TOP+1;

S[TOP]= item;

}

return 0;

}

 

pop()

{

if(TOP== -1)

printf(“stack underflow\n”);

else

{

printf(“popped item is %d”, S[TOP]);

TOP= TOP-1;

}

return 0;

}

 

display()

{

int i;

if(TOP== -1)

printf(“stack is empty\n “);

else

{

printf(“stack items are\n”);

for(i=TOP;i>=0;i–)

printf(“%d\n”, S[i]);

}

return 0;

}

 

 

7./* Write a recursive program to find GCD of 4, 6, 8*/

#include<stdio.h>

#include<conio.h>

int gcd(int m, int n)

{

if(n==0)

return (m);

else if(n>m)

return gcd(n,m);

else

return (gcd(n, m % n));

}

 

void main()

{

int k,m,n;

clrscr();

printf(” enter three values \n”);

scanf(“%d %d %d”, &k, &m, &n);

printf(” gcd(%d %d %d) = %d \n”, k,m,n, gcd(k,
gcd(m,n)));

getch();

}

 

 

 

8./* Write a program to insert the elements {5,7,0,6,3,9}
into  Circular queue & delete
6,9,5  using Linked list */

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

struct queue

{

int info;

struct queue *link;

};

struct queue *front= NULL, *rear= NULL;

 

void qinsert(int item)

{

struct queue *new_node;

new_node= (struct queue*)malloc (sizeof(struct queue));

new_node -> info= item;

new_node -> link= NULL;

if(front==NULL && rear==NULL)

{   front=rear=
new_node;

rear-> link= front;

}

else

{  rear-> link=
new_node;

rear= new_node;

rear->link= front;

} }

 

void qdelete()

{

struct queue *ptr;

ptr= front;

if(front==NULL && rear==NULL)

printf(” \n queue is empty”);

else if(front==rear)

{ front= rear= NULL;

printf(“value deleted is :%d”, ptr ->info);

free(ptr);

}else {

front= front -> link;

rear -> link= front;

printf(“value is deleted is :%d”, ptr ->info);

free(ptr);

} }

 

void display()

{

struct queue *ptr;

ptr= front;

if(front== NULL && rear== NULL)

printf(” queue is empty\n”);

else

{  printf(” queue
elements are \n”);

do {

printf(“%d\t”, ptr -> info);

ptr= ptr -> link;

} while(ptr!= front);

} }

 

void main()

{

int val , ch;

do

{

printf(“\n 1. insert”);

printf(“\n 2. delete”);

printf(“\n 3. display”);

printf(“\n 4. exit”);

printf(” \n enter your choice\n”);

scanf(“%d”, &ch);

switch(ch)

{

 case 1: printf(”
insert an item into queue\n”);

 scanf(“%d”,
&val);

 qinsert(val);

 break;

 case 2: qdelete();

 break;

 case 3: display();

 break;

 } }

 while(ch!= 4);

 }

 

 

9./*Given s1={“flowers”}, s2= {“are
beautiful”}. write a program to perform string operations – len,
concatenate, substr, replace*/

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

 

int length(char *str)

{

int length=0;

while(*str!= ‘\0’)

{ length++;

str++; }

return length;

}

 

void strconcat(char *str1, char *str2, char *result)

{

while(*str1!= ‘\0’)

{ *result= *str1;

str1++;

result++;

}

while(*str2!= ‘\0’)

{

*result= *str2;

str2++;

result++;

}

*result= ‘\0’;

}

 

void substr(char 
*source, int start, int len, char *result)

{

int i;

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

{ result[i]= source[start + i];

}

result[i]= ‘\0’;

}

 

void strreplace(char 
*source, char *target, char *replace, char *result)

{

char *found= strstr(source, target);

if(found)

{

int pos= found- source;

substr(source, 0, pos,result);

strconcat(result, replace, result);

strconcat(result, found+ strlen(target), result);

}

else

{ strcpy(result, source);

} }

 

 

int  main()

{

char  str1[100], str2[100],
result[100],substrresult[200], replacedresult[200];

int len, start;

char target[100], replace[100];

clrscr();

printf(” enter str1\n”);

fgets(str1, sizeof(str1), stdin);

str1[strcspn(str1,”\n”)] =’\0′;

 

printf(” enter str2 \n”);

fgets(str2, sizeof(str2), stdin);

str2[strcspn(str2, “\n”)]= ‘\0’;

printf(” length of str1- %d\n”, strlen(str1));

printf(” length of str2- %d\n”, strlen(str2));

 

strconcat(str1, str2, result);

printf(” concatenated string is: %s\n”, result);

 

printf(” enter pos of substr in str1\n”);

scanf(“%d”, &start);

printf(” enter length of substr\n”);

scanf(“%d”, &len);

substr(str1, start, len, substrresult);

printf(” substring is: %s\n”,substrresult);

 

printf(” enter substr to be removed\n”);

scanf(“%s”, target);

printf(” enter strto be replaced\n”);

scanf(“%s”, replace);

strreplace(str1, target, replace, replacedresult);

printf(” str after replacement: %s\n”,
replacedresult);

return 0;

}

 

 

10/* Write a program to convert infix to postfix expression
given X^Y/(5 * Z)+2 */

#include<stdio.h>

#include<conio.h>

#include<string.h>

#define MAX 20

char s[MAX];

int top=0;

int precedence(char elem);

void push(char elem);

int pop();

void main()

{

char infix[MAX], postfix[MAX], ch, elem;

int i=0, j=0;

clrscr();

printf(” infix to postfix\n”);

printf(” enter infix expression\n”);

scanf(“%s”, infix);

push(‘#’);

for(i=0;i<strlen(infix);i++)

{

ch= infix[i];

if(isalnum(ch))

postfix[j++]= ch;

else if(ch=='(‘)

push(ch);

else if(ch==’)’)

{  while(s[top]!='(‘)

postfix[j++]= pop();

}

else

{  while(precedence(s[top])>=
precedence(ch))

postfix[j++]= pop();

push(ch);  } }

while(s[top]!= ‘#’)

postfix[j++]= pop();

postfix[j]= ‘\0’;

printf(“postfix expression is: %s\n”, postfix);

}

 

int precedence(char elem)

{

switch(elem)

{

case ‘+’:

case ‘-‘: return (1);

case ‘*’:

case ‘/’: return (2);

case ‘^’: return (3);

case ‘(‘:

case ‘#’: return (0);

}

return 0;

}

 

void push(char elem)

{

++top;

s[top]= elem;

}

 

int pop()

{

char elem;

elem= s[top];

–top;

return(elem);

}

 

 

11./* Write a program to 
evaluate a postfix expression  5 3
+ 8 2 – * */

#include<stdio.h>

#include<conio.h>

#include<math.h>

#include<stdlib.h>

#define MAX 100

int s[MAX], top= -1;

 

int main()

{

char expression[]= “(2 3 + 4 *)”;

int result= evaluate(expression);

printf(“result=%d\n”, result);

return 0;

}

 

 void  push(int item)

  {

if(top >= MAX -1)

{  printf(” stack
overflow\n”);

  return ;

  }

  top++;

  s[top]= item;

  }

 

int pop()

  {

  int item;

    if(top < 0)

    {
printf(“stack underflow\n”);

    return -1;

    }

     item = s[top];

top–;

  return item;

  }

  int is_operator(char
symbol)

  {

  if (symbol== ‘+’ ||
symbol== ‘-‘ || symbol == ‘*’ || symbol== ‘/’)

  { return 1;

  }

  return 0;

  }

 

  int evaluate(char*
expression)

  {

  int i=0;

  char symbol=
expression[i];

  int op1, op2, res;

  while(symbol!=’\0′)

  {

  if(symbol >=’0′
&& symbol<= ‘9’)

  {

  int num= symbol –
‘0’;

  push(num);

  }

  else
if(is_operator(symbol))

  {

  op2= pop();

  op1 = pop();

  switch(symbol)

  {

  case ‘+’: res= op1 +
op2;

  break;

  case ‘-‘: res= op1 –
op2;

  break;

  case ‘*’: res= op1 *
op2;

  break;

  case ‘/’: res= op1 /
op2;

  break;

  }

 push(res);

  } i++;

  symbol=
expression[i];

  }

  res= pop();

  return res;

  }

 

 

12./* WAP to create Binary tree with elements
18,15,40,50,30,17,41 and insert 45,19 delete 15,17,41. display the tree on each
insert & delete operation.

#include<stdio.h>

#include<stdlib.h>

struct node

{

int info;

struct node *left, *right;

};

typedef struct node NODE;

NODE *root= NULL;

 

void create(int item)

{

NODE *newnode, *currptr, *ptr;

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

newnode ->info= item;

newnode ->left= NULL;

newnode ->right= NULL;

if(root==NULL)

root= newnode;

else

{ currptr= root;

while(currptr !=NULL)

{ ptr= currptr;

currptr= (item> currptr-> info) ? currptr->right:
currptr->left;

}

if(item< ptr->info)

ptr->left= newnode;

else

ptr-> right= newnode;

} }

 

int disp(struct node *ptr, int level)

{

int i;

if(ptr!=NULL)

{

disp(ptr->right, level+1);

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

printf(” 
“);

printf(“%2d\n”, ptr->info);

disp(ptr->left, level+1);

} return 0;

}

 

NODE *getInsuccessor(NODE *ptr)

{

while(ptr ->left!= NULL)

ptr= ptr -> left;

return ptr;

}

 

NODE *deletion(NODE *p, int item)

{

NODE *temp;

if(!p)

{ printf(” unable to delete, no key ele\n”);

return p;

}

else if(item> p ->info)

p ->right = deletion(p -> right, item);

else if(item< p ->info)

p->left = deletion(p-> left, item);

else

{ if(p ->left==NULL)

{ temp= p->right;

free(p);

return temp;

}

else if(p ->right==NULL)

temp= p-> left;

free(p);

return temp;

}

temp= getInsuccessor(p->right);

p->info= temp->info;

p->right= deletion(p->right, temp->info);

return p;

}

 

void main()

{

int item, ch, n,i;

clrscr();

while(1)

{

printf(” binary tree \n”);

printf(” 1.insert, 2.delete,  3.display, 
4.exit \n”);

printf(” enter the choice\n”);

scanf(“%d”, &ch);

switch(ch)

{

case 1: printf(” enter no. of nodes\n”);

scanf(“%d”, &n);

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

{ printf(” enter element of node\n”);

scanf(“%d”, &item);

create(item);

}  break;

case 2: printf(” enter item to be deleted\n”);

scanf(“%d”, &item);

root= deletion(root, item);

disp(root, 1);

break;

case 3: printf(” binary tree nodes are\n”);

disp(root, 1);

break;

case 4: exit(1);

} } }

 

 

13/* Write a program 
to create binary search tree with elements{2,5,1,3,9,0,6} &  perform inorder, preorder & postorder
traversal.*/

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

struct node

{

int info;

struct node *left, *right;

};

typedef struct node NODE;

NODE *root= NULL;

 

void create(int item)

{

NODE *newnode, *currptr, *ptr;

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

newnode ->info= item;

newnode ->left= NULL;

newnode ->right= NULL;

if(root==NULL)

root= newnode;

else

{ currptr= root;

while(currptr !=NULL)

{ ptr= currptr;

currptr= (item> currptr-> info) ? currptr->right:
currptr->left;

}

if(item< ptr->info)

ptr->left= newnode;

else

ptr-> right= newnode;

} }

 

int display(struct node *ptr, int level)

{

int i;

if(ptr!=NULL)

{

display(ptr->right, level+1);

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

printf(” 
“);

printf(“%2d\n”, ptr->info);

display(ptr->left, level+1);

} return 0;

}

 

void pre_order(NODE *ptr)

{

if(ptr)

{  printf(”
%d”, ptr-> info);

pre_order(ptr-> left);

pre_order(ptr-> right);

}  }

 

void in_order(NODE * ptr)

{

if(ptr)

{

in_order(ptr->left);

printf(“%d”, ptr->info);

in_order(ptr->right);

} }

 

void post_order(NODE *ptr)

{

if(ptr)


post_order(ptr->left);

post_order(ptr->right);

printf(“%d”, ptr->info);

}  }

 

void main()

{

int item, ch, n,i;

clrscr();

while(1)

{

printf(” BST is\n”);

printf(“1. create, 2.display, 3.preordr, 4.inorder,
5.postorder, 6.exit \n”);

scanf(“%d”, &ch);

switch(ch)

{

case 1:printf(” enter no. of nodes\n”);

scanf(“%d”, &n);

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

{ printf(” enter element of node\n”);

scanf(“%d”, &item);

create(item);

}  break;

case 2: printf(” binary tree nodes are\n”);

display(root, 1);

break;

case 3: printf(” preorder traversal \n”);

pre_order(root);

break;

case 4:printf(” inorder traversal \n”);

in_order(root); break;

case 5: printf(” postorder traversal \n”);

post_order(root); 
break;

case 6: exit(0);

getch();

}

}

 

14./* Write a program to perform Heap sort  {9,16,32,8,4,1,5,8,0}

#include<stdio.h>

#include<conio.h>

void heapify(int arr[], int n, int i)

{

int largest= i;

int left= 2*i+1;

int right= 2*i+2;

int temp;

if(left< n && arr[left] > arr[largest])

largest= left;

if(right< n && arr[right] > arr[largest])

largest= right;

if(largest!=i)

{  temp= arr[i];

arr[i]= arr[largest];

arr[largest]= temp;

heapify(arr, n, largest);

}  }

 

void heapsort(int arr[], int n)

{

int i, temp;

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

heapify(arr, n, i);

for(i=n-1;i>=0;i–)

{ temp= arr[0];

arr[0]= arr[i];

arr[i]= temp;

heapify(arr, i, 0);

}  }

 

int main()

{

int arr[20];

int n,i;

clrscr();

printf(“enter the size of array\n”);

scanf(“%d”, &n);

printf(” enter the array elements\n”);

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

scanf(“%d”,&arr[i]);

heapsort(arr,n);

printf(” sorted array is\n”);

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

printf(“%d\t”, arr[i]);

getch();

return 0;

}

 

 

Scroll to Top