Vous êtes sur la page 1sur 69

Ex.

No:1
MOVING NODES IN A LINKED LIST
AI M:
Write a program such that there is a function “move” which moves a node forward by
n positions in a linked list.

PROGRAM:
# include<stdio.h>
# include<conio.h>
# include "malloc.h"
struct node
{
int data;
struct node *link;
};

void add(struct node **,int );


void display(struct node *);
void move(struct node **,int,int);
int count(struct node *);

void main()
{
int num,n,i,elem,posi;
struct node *ptr,*temp;
ptr=NULL;
clrscr();
printf("MOVE operation in Link list\n");
printf("---------------------------");
printf("\n");
printf("Enter no of elements:");
scanf("%d",&n);

Name : A. Arul Jefferson

Roll No: 09MA01 Page 1


for(i=1;i<=n;i++)
{
printf("Enter the element you want to add: ");
scanf("%d",&num);
add(&ptr,num);
display(ptr);
printf("\n");
}
printf("Element to be moved:\n");
scanf("%d",&elem);
printf("Number of position to be moved forwardly:\n");
scanf("%d",&posi);
move(&ptr,elem,posi);
printf("\nList after MOVE operation:\n");
display(ptr);
getch();
}

void add(struct node **q,int num)


{
struct node *temp;
temp = *q;
if(*q==NULL)
{
*q=malloc(sizeof(struct node));
temp = *q;
}
else
{
while((temp->link)!=NULL)
{
temp=temp->link;
}

Name : A. Arul Jefferson

Roll No: 09MA01 Page 2


temp->link = malloc(sizeof(struct node));
temp=temp->link;
}
temp->data = num;
temp->link = NULL;
}

void display(struct node *pt)


{
printf("%d",pt->data);
pt=pt->link;
while(pt!=NULL)
{

printf("--> %d",pt->data);
pt=pt->link;
}
}

void move(struct node ** pt,int elem,int posi)


{
int pos=1,n=1,last;
struct node * temp,* temp1,*prev;
temp=*pt;
temp1=*pt;
while(temp->data!=elem)
{
prev=temp;
temp=temp->link;
++n;
}
while(pos!=(n-posi-1))
{

Name : A. Arul Jefferson

Roll No: 09MA01 Page 3


temp1=temp1->link;
++pos;
}
if((n-posi-1)==0)
{
prev->link=temp->link;
temp->link=*pt;
*pt=temp;
}
else
{
prev->link=temp->link;
temp->link=temp1->link;
temp1->link=temp;
}
}

int count(struct node * p)


{
int c=0;
while(p!=NULL)
{
p=p->link;
c++;
}
return c;
}

Output:

MOVE operation in Link list


-----------------------------------
Enter the number of elements : 6

Name : A. Arul Jefferson

Roll No: 09MA01 Page 4


Enter the element you want to add: 1
1
Enter the element you want to add: 4
1--> 4
Enter the element you want to add: 2
1--> 4--> 2
Enter the element you want to add: 6
1--> 4--> 2--> 6
Enter the element you want to add: 7
1--> 4--> 2--> 6--> 7
Enter the element you want to add: 3
1--> 4--> 2--> 6--> 7--> 3
Element to be moved:
7
Number of position to be moved forwardly:
3
List after MOVE operation:
1--> 7--> 4--> 2--> 6--> 3

Name : A. Arul Jefferson

Roll No: 09MA01 Page 5


Ex.No:2
GENERATE DOUBLY LINKED LIST FROM SINGLY LINKED LIST

AI M:
Write a program to generate a doubly linked list from it‟s singly linked list
representation.

PROGRAM:
#include<stdio.h>
#include<conio.h>
#include"malloc.h"
struct node
{
int data;
struct node *prev,*link;
};
struct node1
{
int data;
struct node1 *link;
};

void add(struct node1 **,int);


void display(struct node *);
void generate(struct node **pt,struct node1 **pt1);
void display1(struct node1 *);

void main()
{
int num,n,i,elem,posi;
struct node *ptr,*temp;
struct node1 *ptr1;

Name : A. Arul Jefferson

Roll No: 09MA01 Page 6


ptr=NULL;
ptr1=NULL;
clrscr();
printf("Generation of Double link list from Single link list\n");
printf("----------------------------------------------------\n");
printf("\n");
printf("Enter the number of elements you want to insert in SINGLE link list:");
scanf("%d",&n);
printf("\n");
for(i=1;i<=n;i++)
{
printf("Enter the element you want to add:");
scanf("%d",&num);
add(&ptr1,num);
display1(ptr1);
printf("\n");
}
generate(&ptr,&ptr1);
printf("\nAfter conversion from SINGLE to DOUBLE:\n");
printf("\n");
display(ptr);
getch();
}

void add(struct node1 ** pt,int num)


{
struct node1 *temp,*current,*previous;
current=malloc(sizeof(struct node));
current->data=num;
current->link=NULL;
temp=*pt;
if(temp==NULL)
{

Name : A. Arul Jefferson

Roll No: 09MA01 Page 7


*pt=current;
}
else
{
while(temp->link!=NULL)
{
temp=temp->link;
}
temp->link=current;
}
}

void display(struct node *pt)


{
printf("%d",pt->data);
pt=pt->link;
while(pt!=NULL)
{
printf("<--> %d",pt->data);
pt=pt->link;
}
}

void display1(struct node1 *pt)


{
printf("%d",pt->data);
pt=pt->link;
while(pt!=NULL)
{
printf("--> %d",pt->data);
pt=pt->link;
}
}

Name : A. Arul Jefferson

Roll No: 09MA01 Page 8


void generate(struct node **pt,struct node1 **pt1)
{
int ele;
struct node *temp,*current;
struct node1 *temp1;
current=malloc(sizeof(struct node1));
current->link=NULL;
current->prev=NULL;
temp=*pt;
temp1=*pt1;
if(*pt1==NULL)
{
printf("Empty ");
}
else
{
ele=temp1->data;
current->data=ele;
temp=current;
temp1=temp1->link;
*pt=temp;
while(temp1)
{
ele=temp1->data;
temp->link=malloc(sizeof(struct node));
temp->link->prev=temp;
temp=temp->link;
temp->data=ele;
temp->link=NULL;
temp1=temp1->link;
}
}
}

Name : A. Arul Jefferson

Roll No: 09MA01 Page 9


Output:

Generation of Double link list from Single link list


-------------------------------------------------------------
Enter the number of elements you want to insert in SINGLE link list:5

Enter the element you want to add:34


34
Enter the element you want to add:56
34--> 56
Enter the element you want to add:11
34--> 56--> 11
Enter the element you want to add:75
34--> 56--> 11--> 75
Enter the element you want to add:22
34--> 56--> 11--> 75--> 22

After conversion from SINGLE to DOUBLE:

34<--> 56<--> 11<--> 75<--> 22

Name : A. Arul Jefferson

Roll No: 09MA01 Page 10


Ex.No:3
SEARCHING IN BST
AI M:
Write a program to search for an element using the BST.

PROGRAM:
#include<stdio.h>
#include<conio.h>
#include<alloc.h>
struct bnode
{
int data;
struct bnode *lchild,*rchild;
};
void insert(struct bnode **,int);
void search(struct bnode **,int);
void inorder(struct bnode *);

void main()
{
int i,will,num,n;
struct bnode *root;
root=NULL;
clrscr();
will=1;
printf("\nElement search in BST");
printf("\n---------------------");
printf("\n");
printf("Enter the number of nodes in BST: ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf(" Enter the element you want to add: ");

Name : A. Arul Jefferson

Roll No: 09MA01 Page 11


scanf("%d",&num);
insert(&root,num);
printf("\n");
}
printf("Nodes displayed in INORDER:\n");
inorder(root);
while(will)
{
printf("\nEnter the element you wants to find: ");
scanf("%d",&num);
search(&root,num);
printf("\n");
printf("\nDO you want to continue (press 1 for YES or 0 for quit):");
scanf("%d",&will);
}
getch();
}

void insert(struct bnode ** rt,int ele)


{
struct bnode *temp,*current;
current=malloc(sizeof(struct bnode));
current->data=ele;
current->lchild=NULL;
current->rchild=NULL;
temp=*rt;
if(*rt==NULL)
{
*rt=current;
}
else
{
while(temp!=NULL)

Name : A. Arul Jefferson

Roll No: 09MA01 Page 12


{
if(temp->data<ele)
{
if(temp->rchild==NULL)
{
temp->rchild=current;
temp=NULL;
}
else
{
temp=temp->rchild;
}
}
else
{
if(temp->lchild==NULL)
{
temp->lchild=current;
temp=NULL;
}
else
{
temp=temp->lchild;
}
}
}
}
}

void search(struct bnode **pt,int ele)


{
int flag=1;
struct bnode *temp,*prev;

Name : A. Arul Jefferson

Roll No: 09MA01 Page 13


temp=*pt;
while(temp!=NULL)
{
if(temp->data==ele)
{
if(temp==*pt)
{
printf("Element %d is found at root ",ele);
temp=NULL;
flag=0;
}
else
{
printf("\nElement %d is found\n",ele);
printf("\nParent element is:%d",prev->data);
temp=NULL;
flag=0;
}
}
else if(temp->data>ele)
{
prev=temp;
temp=temp->lchild;
}
else if(temp->data<ele)
{
prev=temp;
temp=temp->rchild;
}
}
if(flag==1)
{
printf("\nElement is not found");

Name : A. Arul Jefferson

Roll No: 09MA01 Page 14


}
return;
}
void inorder(struct bnode *rt)
{
if(rt!=NULL)
{
inorder(rt->lchild);
printf("\t%d",rt->data);
inorder(rt->rchild);
}
else
return;
}

Output:

Element search in BST


----------------------------
Enter the number of nodes in BST: 6

Enter the element you want to add: 5

Enter the element you want to add: 4

Enter the element you want to add: 6

Enter the element you want to add: 2

Enter the element you want to add: 7

Enter the element you want to add: 8

Name : A. Arul Jefferson

Roll No: 09MA01 Page 15


Nodes displayed in INORDER:
2 4 5 6 7 8
Enter the element you wants to find: 4
Element 4 is found
Parent element is: 5

DO you want to continue (press 1 for YES or 0 for quit):1

Enter the element you wants to find: 5


Element 5 is found at Root

DO you want to continue (press 1 for YES or 0 for quit):1

Enter the element you wants to find: 16


Sorry the element 16 was not found

Name : A. Arul Jefferson

Roll No: 09MA01 Page 16


Ex.No:4
INSERTION SORT USING LINKED LISTS
AI M:
Write a program to implement insertion sort using linked lists.

PROGRAM:
# include<stdio.h>
# include<conio.h>
# include "malloc.h"
struct node
{
int data;
struct node *link;
};
void add(struct node **,int );
void display(struct node *);

void main()
{
int will,num;
clrscr();
struct node *ptr,*temp;
ptr=NULL;
will=1;
printf("Insertion Sort using link list\n");
printf("------------------------------");
printf("\n");
while(will==1)
{
printf(" Enter the element you want to add: ");
scanf("%d",&num);
add(&ptr,num);
display(ptr);

Name : A. Arul Jefferson

Roll No: 09MA01 Page 17


printf("\nDo you want to continue ( press 1 for YES or 0 for quit):");
scanf("%d",&will);
}
getch();
}

void add(struct node **q,int num)


{
struct node *temp,*prev,*current;
current=malloc(sizeof(struct node));
current->data=num;
current->link=NULL;
temp = *q;
if(*q==NULL)
{
*q=current;
temp = *q;
}
else
{
if(temp->data>num)
{
if(temp->link!=NULL)
{
current->link=temp;
*q=current;
}
else{
current->link=temp;
*q=current;
temp->link=NULL;
}
}

Name : A. Arul Jefferson

Roll No: 09MA01 Page 18


else
{
while((temp->link)!=NULL&&temp->data<num)
{
prev=temp;
temp=temp->link;
}
if(temp->link==NULL)
{
if(temp->data<num){
temp->link = current;
current->link=NULL;
}
else
{
current->link=temp;
prev->link=current;
}
}
else
{
current->link=temp;
prev->link=current;
}
}
}
}

void display(struct node *pt)


{
printf("%d",pt->data);
pt=pt->link;
while(pt!=NULL)

Name : A. Arul Jefferson

Roll No: 09MA01 Page 19


{

printf("--> %d",pt->data);
pt=pt->link;
}
}

Output:

Insertion Sort using link list


---------------------------------
Enter the element you want to add: 5
5
Do you want to continue ( press 1 for YES or 0 for quit):1
Enter the element you want to add: 3
3--> 5
Do you want to continue ( press 1 for YES or 0 for quit):1
Enter the element you want to add: 2
2--> 3--> 5
Do you want to continue ( press 1 for YES or 0 for quit):1
Enter the element you want to add: 7
2--> 3--> 5--> 7
Do you want to continue ( press 1 for YES or 0 for quit):1
Enter the element you want to add: 6
2--> 3--> 5--> 6--> 7
Do you want to continue ( press 1 for YES or 0 for quit):1
Enter the element you want to add: 1
1--> 2--> 3--> 5--> 6--> 7
Do you want to continue ( press 1 for YES or 0 for quit):0

Name : A. Arul Jefferson

Roll No: 09MA01 Page 20


Ex.No:5
MANIPULATION IN A BINARY TREE
AI M:
Write a program to do the following on a binary tree
i. Count the number of nodes in the tree
ii. Sum the contents of the nodes

PROGRAM:
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#include <math.h>

int count(int *a, int n1);


int sum(int *a,int n1);
void insert( int *a ,int ele,int pos);

void main()
{
int n,i,n1,pos,ele;
clrscr();
printf(" Manipulation in Binary Tree");
printf("\n------------------------");
printf("\n");
printf(" \nEnter the number of nodes in binary tree: ");
scanf(" %d",&n);
n1= pow(2,n)-1;
printf("\nThe maximum number of possible positions: %d\n",n1);
int *a = (int *) malloc (n1 * sizeof(int));
for( i=0;i<n1;i++)
{
a[i]=0;
}

Name : A. Arul Jefferson

Roll No: 09MA01 Page 21


for( i=0;i<n;i++)
{
printf("\nNodes position:");
scanf(" %d",&pos);
printf("\nElement:");
scanf(" %d",&ele);
insert(a,ele,pos);
}
printf("\nThe elements in the Binary Tree:\n");
for( i=0;i<n1;i++)
{
printf("\t%d",a[i]);
}
printf("\nTotal number of nodes:%d\n",count(a, n1));
printf("\nThe SUM of the elements in the Binary tree: %d",sum(a, n1));
getch();
}

void insert( int *a ,int ele,int pos)


{
a[pos] = ele ;
}

int count(int *a,int n1)


{
int i;
int count=0;
for(i=0;i<n1;i++)
{
if(a[i] != 0)
{
count++;
}

Name : A. Arul Jefferson

Roll No: 09MA01 Page 22


}
return count;
}

int sum(int *a,int n1)


{
int i;
int count=0;
for(i=0;i<n1;i++)
{
if(a[i] != 0)
{
count +=a[i];
}
}
return count;
}

Output:

Manipulation in Binary Tree


-----------------------------------
Enter the number of nodes in binary tree: 3
The maximum number of possible positions: 7

Nodes position: 1
Element: 5

Nodes position: 6
Element: 3

Nodes position: 3
Element: 7

Name : A. Arul Jefferson

Roll No: 09MA01 Page 23


The elements in the Binary Tree:
0 5 0 7 0 0 3

Total number of nodes: 3

The SUM of the elements in the Binary tree: 15

Name : A. Arul Jefferson

Roll No: 09MA01 Page 24


Ex.No:6
LINEAR SEAR CH IN DOUBLY LINKED LIST
AI M:
Write a program to create a doubly linked list and perform search for an element „x‟
using linear search.

PROGRAM:
#include<stdio.h>
#include<conio.h>
#include"malloc.h"
struct node
{
int data;
struct node *prev,*link;
};
void add(struct node **,int);
void display(struct node *);
void search(struct node *,int);

void main()
{
int num,n,i,elem,posi;
struct node *ptr,*temp;
ptr=NULL;
clrscr();
printf("Linear search in Doubly link list\n");
printf("----------------------------------------");
printf("\n");
printf("Enter the number ofelements in list:");
scanf("%d",&n);
printf("\n");
for(i=1;i<=n;i++)
{

Name : A. Arul Jefferson

Roll No: 09MA01 Page 25


printf(" Enter the element you want to add:");
scanf("%d",&num);
add(&ptr,num);
display(ptr);
printf("\n");
}
printf("Enter the element to be searched: ");
scanf("%d",&elem);
search(ptr,elem);
getch();
}

void add(struct node ** pt,int num)


{
struct node *temp,*current,*previous;
current=malloc(sizeof(struct node));
current->data=num;
current->prev=NULL;
current->link=NULL;
temp=*pt;
if(temp==NULL)
{
*pt=current;
}
else
{
while(temp->link!=NULL)
{
previous=temp;
temp=temp->link;
}
temp->link=current;
current->prev=previous;

Name : A. Arul Jefferson

Roll No: 09MA01 Page 26


}
}

void display(struct node *pt)


{
printf("%d",pt->data);
pt=pt->link;
while(pt!=NULL)
{
printf("--> %d",pt->data);
pt=pt->link;
}
}

void search(struct node *pt,int elem)


{
struct node * temp;
int count=1;
temp=pt;
while(temp->data!=elem && temp->link!=NULL)
{
temp= temp->link;
++count;
}
if(temp->data==elem)
{
printf("Element %d found at the position %d",elem,count);
}
else
{
printf("Sorry Element Not found");
}
}

Name : A. Arul Jefferson

Roll No: 09MA01 Page 27


Output:
Linear search in Doubly link list
---------------------------------------
Enter the number of elements in list:6

Enter the element you want to add:43


43
Enter the element you want to add:65
43--> 65
Enter the element you want to add:23
43--> 65--> 23
Enter the element you want to add:12
43--> 65--> 23--> 12
Enter the element you want to add:75
43--> 65--> 23--> 12--> 75
Enter the element you want to add:34
43--> 65--> 23--> 12--> 75--> 34

Enter the element to be searched: 75


Element 75 found at the position: 5

Name : A. Arul Jefferson

Roll No: 09MA01 Page 28


Ex.No:7
REVERSING A SINGLY LINKED LIST
AI M:
Write a program to create a singly linked list. Then using a function „reverse‟, reverse
the contents of the list.

PROGRAM:
# include<stdio.h>
# include<conio.h>
# include "malloc.h"
struct node
{
int data;
struct node *link;
};

void main()
{
int will,num,i;
struct node *ptr,*temp;
void add(struct node **,int );
void display(struct node *);
void reverse(struct node **);
ptr=NULL;
clrscr();
printf("Reverse the Link list\n");
printf("---------------------\n");
printf("\n");
printf("Enter the number of elements for list:");
scanf("%d",&will);
for(i=1;i<=will;i++)
{
printf(" Enter the element you want to add: ");

Name : A. Arul Jefferson

Roll No: 09MA01 Page 29


scanf("%d",&num);
add(&ptr,num);
display(ptr);
printf("\n");
}
printf("\nAfter Reverse operation:\n");
reverse(&ptr);
printf("\n");
display(ptr);
getch();
}

void add(struct node **q,int num)


{
struct node *temp;
temp = *q;
if(*q==NULL)
{
*q=malloc(sizeof(struct node));
temp = *q;
}
else
{
while((temp->link)!=NULL)
{
temp=temp->link;
}
temp->link = malloc(sizeof(struct node));
temp=temp->link;
}
temp->data = num;
temp->link = NULL;
}

Name : A. Arul Jefferson

Roll No: 09MA01 Page 30


void display(struct node *pt)
{
printf("%d",pt->data);
pt=pt->link;
while(pt!=NULL)
{

printf("--> %d",pt->data);
pt=pt->link;
}
}

void reverse(struct node ** pt)


{
struct node *temp1=*pt;
struct node *next=NULL,*prev=NULL;
while(temp1)
{
*pt=temp1;
next=temp1->link;
temp1->link=prev;
prev=temp1;
temp1=next;
}
}

Output:

Reverse the Link list


-------------------------
Enter the number of elements for list:6
Enter the element you want to add: 34
34

Name : A. Arul Jefferson

Roll No: 09MA01 Page 31


Enter the element you want to add: 45
34--> 45
Enter the element you want to add: 12
34--> 45--> 12
Enter the element you want to add: 48
34--> 45--> 12--> 48
Enter the element you want to add: 63
34--> 45--> 12--> 48--> 63
Enter the element you want to add: 74
34--> 45--> 12--> 48--> 63--> 74

After Reverse operation:

74--> 63--> 48--> 12--> 45--> 34

Name : A. Arul Jefferson

Roll No: 09MA01 Page 32


Ex.No:8
INORDER TRAVERSAL ON A BST
AI M:
Write a program to insert elements on a binary search tree and display the result of an
inorder traversal on the tree.

PROGRAM:
#include<stdio.h>
#include<conio.h>
#include<alloc.h>
struct bnode
{
int data;
struct bnode *lchild,*rchild;
};
void insert(struct bnode **,int);
void inorder(struct bnode *);

void main()
{
int i,will,num,n;
struct bnode *root;
root=NULL;
clrscr();
printf("Inorder traversal in BST\n");
printf("------------------------\n");
printf("\n");
printf("Enter number of nodes for BST:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf(" Enter the element you want to add:");
scanf("%d",&num);

Name : A. Arul Jefferson

Roll No: 09MA01 Page 33


insert(&root,num);
printf("\n");
}
printf("Nodes displayed in INORDER traversal:\n");
printf("\n");
inorder(root);
getch();
}

void insert(struct bnode ** rt,int ele)


{
struct bnode *temp,*current;
current=malloc(sizeof(struct bnode));
current->data=ele;
current->lchild=NULL;
current->rchild=NULL;
temp=*rt;
if(*rt==NULL)
{
*rt=current;
}
else
{
while(temp!=NULL)
{
if(temp->data<ele)
{
if(temp->rchild==NULL)
{
temp->rchild=current;
temp=NULL;
}
else

Name : A. Arul Jefferson

Roll No: 09MA01 Page 34


{
temp=temp->rchild;
}
}
else
{
if(temp->lchild==NULL)
{
temp->lchild=current;
temp=NULL;
}
else
{
temp=temp->lchild;
}
}
}
}
}

void inorder(struct bnode *rt)


{
if(rt!=NULL)
{
inorder(rt->lchild);
printf("\t%d",rt->data);
inorder(rt->rchild);
}
else
return;
}

Name : A. Arul Jefferson

Roll No: 09MA01 Page 35


Output:

Inorder traversal in BST


------------------------------

Enter the number of nodes for BST: 8

Enter the element you want to add: 35

Enter the element you want to add: 23

Enter the element you want to add: 60

Enter the element you want to add: 12

Enter the element you want to add: 80

Enter the element you want to add: 34

Enter the element you want to add: 24

Enter the element you want to add: 50

Nodes displayed in INORDER traversal:

12 23 24 34 35 50 60 80

Name : A. Arul Jefferson

Roll No: 09MA01 Page 36


Ex.No:9
PREORDER TRAVERSAL ON A BST
AI M:
Write a program to insert elements on a binary search tree and display the result of a
preorder traversal on the tree.

PROGRAM:
#include<stdio.h>
#include<conio.h>
#include<alloc.h>
struct bnode
{
int data;
struct bnode *lchild,*rchild;
};
void insert(struct bnode **,int);
void preorder(struct bnode *);

void main()
{
int i,will,num,n;
struct bnode *root;
root=NULL;
clrscr();
printf("Preorder traversal in BST\n");
printf("------------------------\n");
printf("\n");
printf("Enter number of nodes for BST:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf(" Enter the element you want to add:");
scanf("%d",&num);

Name : A. Arul Jefferson

Roll No: 09MA01 Page 37


insert(&root,num);
printf("\n");
}
printf("Nodes diaplayed in PREORDER traversal:\n");
printf("\n");
preorder(root);
getch();
}

void insert(struct bnode ** rt,int ele)


{
struct bnode *temp,*current;
current=malloc(sizeof(struct bnode));
current->data=ele;
current->lchild=NULL;
current->rchild=NULL;
temp=*rt;
if(*rt==NULL)
{
*rt=current;
}
else
{
while(temp!=NULL)
{
if(temp->data<ele)
{
if(temp->rchild==NULL)
{
temp->rchild=current;
temp=NULL;
}
else

Name : A. Arul Jefferson

Roll No: 09MA01 Page 38


{
temp=temp->rchild;
}
}
else
{
if(temp->lchild==NULL)
{
temp->lchild=current;
temp=NULL;
}
else
{
temp=temp->lchild;
}
}
}
}
}

void preorder(struct bnode *rt)


{
if(rt!=NULL)
{
printf("\t%d",rt->data);
preorder(rt->lchild);
preorder(rt->rchild);
}
else
return;
}

Name : A. Arul Jefferson

Roll No: 09MA01 Page 39


Output:

Preorder traversal in BST


-------------------------------

Enter the number of nodes for BST: 8

Enter the element you want to add: 12

Enter the element you want to add: 45

Enter the element you want to add: 67

Enter the element you want to add: 34

Enter the element you want to add: 23

Enter the element you want to add: 11

Enter the element you want to add: 5

Enter the element you want to add: 1

Nodes displayed in PREORDER traversal:

12 11 5 1 45 34 23 67

Name : A. Arul Jefferson

Roll No: 09MA01 Page 40


Ex.No:10
POSTORDER TRAVERSAL ON A BST
AI M:
Write a program to insert elements on a binary search tree and display the result of a
postorder traversal on the tree.

PROGRAM:
#include<stdio.h>
#include<conio.h>
#include<alloc.h>
struct bnode
{
int data;
struct bnode *lchild,*rchild;
};
void insert(struct bnode **,int);
void postorder(struct bnode *);
void main()
{
int i,will,num,n;
struct bnode *root;
root=NULL;
clrscr();
printf("Postorder traversal in BST\n");
printf("------------------------\n");
printf("\n");
printf("Enter number of nodes for BST:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf(" Enter the element you want to add:");
scanf("%d",&num);

Name : A. Arul Jefferson

Roll No: 09MA01 Page 41


insert(&root,num);
printf("\n");
}
printf("Nodes displayed in POSTORDER travesal:\n");
printf("\n");
postorder(root);
getch();
}

void insert(struct bnode ** rt,int ele)


{
struct bnode *temp,*current;
current=malloc(sizeof(struct bnode));
current->data=ele;
current->lchild=NULL;
current->rchild=NULL;
temp=*rt;
if(*rt==NULL)
{
*rt=current;
}
else
{
while(temp!=NULL)
{
if(temp->data<ele)
{
if(temp->rchild==NULL)
{
temp->rchild=current;
temp=NULL;
}
else

Name : A. Arul Jefferson

Roll No: 09MA01 Page 42


{
temp=temp->rchild;
}
}
else
{
if(temp->lchild==NULL)
{
temp->lchild=current;
temp=NULL;
}
else
{
temp=temp->lchild;
}
}
}
}
}

void postorder(struct bnode *rt)


{
if(rt!=NULL)
{
postorder(rt->lchild);
postorder(rt->rchild);
printf("\t%d",rt->data);
}
else
return;
}

Name : A. Arul Jefferson

Roll No: 09MA01 Page 43


Output:

Postorder traversal in BST


---------------------------------

Enter the number of nodes for BST: 8

Enter the element you want to add: 45

Enter the element you want to add: 12

Enter the element you want to add: 34

Enter the element you want to add: 50

Enter the element you want to add: 67

Enter the element you want to add: 58

Enter the element you want to add: 23

Enter the element you want to add: 90

Nodes displayed in POSTORDER traversal:

23 34 12 58 90 67 50 45

Name : A. Arul Jefferson

Roll No: 09MA01 Page 44


Ex.No:11
MERGING LINKED LISTS
AI M:
Write a program to combine two singly linked lists such that suppose one is {l1, l2,
l3, … ln} and the other is {M1, m2, … mn}, then the combined list is {l1, m1, l2, m2, …ln,
mn}.

PROGRAM:
# include<stdio.h>
# include<conio.h>
# include "malloc.h"
struct node
{
int data;
struct node *link;
};
void add(struct node **,int );
void display(struct node *);
void merge(struct node ** list1,struct node ** list2);
int count(struct node *);

void main()
{
int num,n,n2,i,j,elem,posi;
struct node *ptr,*ptr1,*temp;
ptr=NULL;
ptr1=NULL;
clrscr();
printf("Merge two Link lists\n");
printf("--------------------\n");
printf("\n");
printf("Enter no ofelements of List 1:");
scanf("%d",&n)

Name : A. Arul Jefferson

Roll No: 09MA01 Page 45


for(i=1;i<=n;i++)
{
printf(" Enter the element you want to add: ");
scanf("%d",&num);
add(&ptr,num);
display(ptr);
printf("\n");
}
printf("Enter no ofelements of List 2:");
scanf("%d",&n2);
for(j=1;j<=n2;j++)
{
printf(" Enter the element you want to add: ");
scanf("%d",&num);
add(&ptr1,num);
display(ptr1);
printf("\n");
}
printf("\nAfter Merging of List 1 & List 2:\n");
printf("\n");
merge(&ptr,&ptr1);
display(ptr);
getch();
}

void add(struct node **q,int num)


{
struct node *temp;
temp = *q;
if(*q==NULL)
{
*q=malloc(sizeof(struct node));
temp = *q;

Name : A. Arul Jefferson

Roll No: 09MA01 Page 46


}
else
{
while((temp->link)!=NULL)
{
temp=temp->link;
}
temp->link = malloc(sizeof(struct node));
temp=temp->link;
}
temp->data = num;
temp->link = NULL;
}
void display(struct node *pt)
{
printf("%d",pt->data);
pt=pt->link;
while(pt!=NULL)
{
printf("--> %d",pt->data);
pt=pt->link;
}
}

void merge(struct node ** list1,struct node ** list2)


{
int last;
struct node * temp1,* temp2,* temp1nxt,*temp2nxt,*prev;
temp1=*list1;
temp2=*list2;
prev=temp1;
while(temp1->link!=NULL && temp2->link!=NULL)
{

Name : A. Arul Jefferson

Roll No: 09MA01 Page 47


temp1nxt=temp1->link;
temp2nxt=temp2->link;
temp1->link=temp2;
temp2->link=temp1nxt;
temp1=temp1nxt;
temp2=temp2nxt;
}
if(temp1->link==NULL)
{
temp1->link=temp2;
}
else
{
temp1nxt=temp1->link;
temp1->link=temp2;
temp2->link=temp1nxt;
}
*list1=prev;
}

Output:

Merge two Link lists


--------------------------
Enter the number of elements of List 1: 5

Enter the element you want to add: 1


1
Enter the element you want to add: 3
1--> 3
Enter the element you want to add: 5
1--> 3--> 5
Enter the element you want to add: 7

Name : A. Arul Jefferson

Roll No: 09MA01 Page 48


1--> 3--> 5--> 7
Enter the element you want to add: 9
1--> 3--> 5--> 7--> 9

Enter the number of elements of List 2: 5

Enter the element you want to add: 2


2
Enter the element you want to add: 4
2--> 4
Enter the element you want to add: 6
2--> 4--> 6
Enter the element you want to add: 8
2--> 4--> 6--> 8
Enter the element you want to add: 10
2--> 4--> 6--> 8--> 10

After Merging of List 1 & List 2:

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

Name : A. Arul Jefferson

Roll No: 09MA01 Page 49


Ex.No:12
DATABASE USING LINKED LISTS
AI M:
Write a program that reads the name, age and salary of 10 persons and maintains them
in a linked list sorted by name.

PROGRAM:
#include<stdio.h>
#include<conio.h>
#include<ctype.h>
#include<string.h>
struct node
{
char name[20];
int age;
int salary;
struct node *next;
}*current,*temp,*start,*prev;

void insertnode(char [],int,int);

void main()
{
int i,*nam,a,s;
clrscr();
start=temp=prev=current=NULL;
printf("Database using Link List\n");
printf("------------------------\n");
printf("\n");
printf("\nEnter the Details");
for(i=0;i<10;i++)
{
printf("\nName of the employee: ");

Name : A. Arul Jefferson

Roll No: 09MA01 Page 50


scanf("%s",nam);
printf("\nAge: ");
scanf("%d",&a);
printf("\nSalary: ");
scanf("%d",&s);
insertnode(nam,a,s);
}
temp=start;
printf("\nNAME AGE SALARY");
printf("\n------------------");
while(temp!=NULL)
{
printf("\n%s %d %d",temp->name,temp->age,temp->salary);
temp=temp->next;
}

getch();
}

void insertnode(char nam[],int a,int s)


{
current=(struct node*)malloc(sizeof(struct node));
strcpy(current->name,nam);
current->age=a;
current->salary=s;
current->next=NULL;
if(start==NULL)
{
start=current;
}
else
{
temp=start;

Name : A. Arul Jefferson

Roll No: 09MA01 Page 51


while((strcmp(temp->name,current->name))<0)
{
if(temp->next==NULL)
{
temp->next=current;
break;
}
else
{
prev=temp;
temp=temp->next;
}
}
if(strcmp(temp->name,current->name)>0)
{
if(temp==start)
{
current->next=start;
start=current;
}
else
{
current->next=temp;
prev->next=current;
}
}
}

Name : A. Arul Jefferson

Roll No: 09MA01 Page 52


Output:

Database using Link List


------------------------------
Name of the employee: suresh
Age: 23
Salary: 4500

Name of the employee: jeffe


Age: 22
Salary: 4200

Name of the employee: arul


Age: 24
Salary: 5000

Name of the employee: zamil


Age: 23
Salary: 4500

Name of the employee: berry


Age: 24
Salary: 5000

Name of the employee: sachin


Age: 35
Salary: 4580

Name of the employee: david


Age: 23
Salary: 6000

Name : A. Arul Jefferson

Roll No: 09MA01 Page 53


Name of the employee: ruban
Age: 23
Salary: 3565

Name of the employee: viki


Age: 23
Salary: 5342

Name of the employee: jose


Age: 34
Salary: 6543

NAME AGE SALARY


---------- ------- -------------
arul 24 5000
berry 24 5000
david 23 6000
jeffe 22 4200
jose 34 6543
ruban 23 3565
sachin 35 4580
suresh 23 4500
viki 23 5342
zamil 23 4500

Name : A. Arul Jefferson

Roll No: 09MA01 Page 54


Ex.No:13
SIMILAR BINARY TREES
AI M:
Write a program to determine whether or not one binary tree is similar to some other
binary tree.

PROGRAM:
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#include <math.h>

void similar(int *a,int n1,int *b,int n2);


void insert( int *a ,int ele,int pos);

void main()
{
int n,i,n1,pos,ele;
int bin,bin2;
clrscr();
printf("\n Checking of similar Binary Trees");
printf("\n---------------------------------");
printf("\n");
printf("\n Enter the number of nodes in binary tree 1:");
scanf(" %d",&n);
n1= pow(2,n)-1;
printf(" The max number of possible position is %d\n",n1);
int *a = (int *) malloc (n1 * sizeof(int));
for( i=0;i<n1;i++)
{
a[i]=0;
}

Name : A. Arul Jefferson

Roll No: 09MA01 Page 55


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

printf("\nPosition and Element: \n");


scanf(" %d %d",&pos,&ele);
insert(a,ele,pos);

}
for( i=0;i<n1;i++)
{
printf("\nNodes of Tree 1: \t%d",a[i]);
}
printf(" \nEnter the number of nodes in binary tree 2:");
scanf(" %d",&bin);
bin2= pow(2,bin)-1;
printf("\nThe max number of possible position i %d\n",bin2);
int *b = (int *) malloc (bin2 * sizeof(int));
for( i=0;i<bin2;i++)
{
b[i]=0;
}
for( i=0;i<bin;i++)
{
printf(" \nThe position and Element:\n");
scanf(" %d %d",&pos,&ele);
insert(b,ele,pos);
}
for( i=0;i<bin2;i++)
{
printf("\nNodes of Tree 2 \t%d",b[i]);
}

similar(a,n1,b,bin2);

Name : A. Arul Jefferson

Roll No: 09MA01 Page 56


getch();
}
void insert( int *a ,int ele,int pos)
{
a[pos] = ele ;
}

void similar(int *a,int n1,int *b,int n2)


{
int i=0;
if(n1 != n2)
{
printf("\n\nRESULT:Not a Similar tree\n");
return ;
}
else
{
while((a[i]==b[i])&&i!=n1-1)
{
++i;
}
if(i!=n1-1)
{
printf("\n\nRESULT: Not a similar tree\n ");
return ;
}
else
{
printf("\n\nRESULT: Similar Tree");

}
}
}

Name : A. Arul Jefferson

Roll No: 09MA01 Page 57


Output:

Checking of similar Binary Trees


----------------------------------------

Enter the number of nodes in binary tree 1: 3


The max number of possible position is 7

Position and Element:


0
4
Position and Element:
3
6
Position and Element:
6
2

Nodes of Tree 1:

4 0 0 6 0 0 2

Enter the number of nodes in binary tree 2: 3

The max number of possible position is 7

The position and Element:


0
4
The position and Element:
3
6

Name : A. Arul Jefferson

Roll No: 09MA01 Page 58


The position and Element:
6
2

Nodes of Tree 2 :
4 0 0 6 0 0 2

RESULT: Similar Tree

Name : A. Arul Jefferson

Roll No: 09MA01 Page 59


Ex.No:14
INTERSECT DOUBLY LINKED LISTS
AI M:
Write a program to intersect two doubly linked lists.

PROGRAM:
#include<stdio.h>
#include<conio.h>
#include"malloc.h"
struct node
{
int data;
struct node *prev,*link;
};
void add(struct node **,int);
void display(struct node *);
void intersect(struct node **,struct node **,struct node **);

void main()
{
int num,n,i,j,elem,posi;
struct node *ptr,*ptr1,*tempy;
ptr=NULL;
ptr1=NULL;
tempy=NULL;
clrscr();
printf("Intersection on two Link lists\n");
printf("-----------------------------------\n");
printf("\n");
printf("\nEnter no ofelements in list 1:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{

Name : A. Arul Jefferson

Roll No: 09MA01 Page 60


printf(" Enter the element you want to add: ");
scanf("%d",&num);
add(&ptr,num);
display(ptr);
printf("\n");
}
printf("Enter the no of elements in list 2:");
scanf("%d",&elem);
for(j=1;j<=elem;j++)
{
printf(" Enter the element you want to add: ");
scanf("%d",&num);
add(&ptr1,num);
display(ptr1);
printf("\n");
}
intersect(&ptr,&ptr1,&tempy);
printf("\nIntersected link list:\n");
printf("\n");
display(tempy);
getch();
}

void add(struct node ** pt,int num)


{
struct node *temp,*current,*previous;
current=malloc(sizeof(struct node));
current->data=num;
current->prev=NULL;
current->link=NULL;
temp=*pt;
if(temp==NULL)
{

Name : A. Arul Jefferson

Roll No: 09MA01 Page 61


*pt=current;
}
else
{
while(temp->link!=NULL)
{
previous=temp;
temp=temp->link;
}
temp->link=current;
current->prev=previous;
}
}

void display(struct node *pt)


{
printf("%d",pt->data);
pt=pt->link;
while(pt!=NULL)
{
printf("--> %d",pt->data);
pt=pt->link;
}
}

void intersect(struct node **pt1,struct node **pt2,struct node **result)


{
struct node *temp1,*temp2,*current,*tem,*previous;
current=malloc(sizeof(struct node));
current->link=NULL;
current->prev=NULL;
temp1=*pt1;
temp2=*pt2;

Name : A. Arul Jefferson

Roll No: 09MA01 Page 62


while(temp1)
{
while(temp1->data!=temp2->data&&temp2!=NULL)
{
temp2=temp2->link;
}
if(temp1->data==temp2->data)
{
if(*result==NULL)
{
current->data=temp1->data;
*result=current;
tem=*result;
previous=tem;
}
else
{
while(tem!=NULL)
{
previous=tem;
tem=tem->link;
}
previous->link=malloc(sizeof(struct node));
previous->link->data=temp1->data;
previous->link->prev=previous;
previous->link->link=NULL;
}
}
tem=*result;
temp2=*pt2;
temp1=temp1->link;
}
}

Name : A. Arul Jefferson

Roll No: 09MA01 Page 63


Output:
Intersection on two Link lists
-----------------------------------

Enter no ofelements in list 1: 5

Enter the element you want to add: 4


4
Enter the element you want to add: 7
4--> 7
Enter the element you want to add: 2
4--> 7--> 2
Enter the element you want to add: 8
4--> 7--> 2--> 8
Enter the element you want to add: 1
4--> 7--> 2--> 8--> 1

Enter the no of elements in list 2: 5

Enter the element you want to add: 1


1
Enter the element you want to add: 3
1--> 3
Enter the element you want to add: 8
1--> 3--> 8
Enter the element you want to add: 9
1--> 3--> 8--> 9
Enter the element you want to add: 4
1--> 3--> 8--> 9--> 4

Intersected link list:

4--> 8--> 1

Name : A. Arul Jefferson

Roll No: 09MA01 Page 64


Ex.No:15
SINGLY LINKED LIST FROM DOUBLY LINKED LIST
AI M:
Write a program to generate a singly linked list from it‟s doubly linked list
representation.

PROGRAM:
#include<stdio.h>
#include<conio.h>
#include"malloc.h"
struct node
{
int data;
struct node *prev,*link;
};
struct node1
{
int data;
struct node1 *link;
};
void add(struct node **,int);
void display(struct node *);
void generate(struct node **pt,struct node1 **pt1);
void display1(struct node1 *);

void main()
{
int num,n,i,elem,posi;
struct node *ptr,*temp;
struct node1 *ptr1;
ptr=NULL;
ptr1=NULL;
clrscr();

Name : A. Arul Jefferson

Roll No: 09MA01 Page 65


printf("Generation of Single link list from Double link list\n");
printf("----------------------------------------------------\n");
printf("\n");
printf("Enter the number of elements you want to insert in DOUBLE link list:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf(" Enter the element you want to add :");
scanf("%d",&num);
add(&ptr,num);
display(ptr);
printf("\n");
}
generate(&ptr,&ptr1);
printf("\nAfter conversion from Double link list to Single link list:\n");
printf("\n");
display1(ptr1);
getch();
}

void add(struct node ** pt,int num)


{
struct node *temp,*current,*previous;
current=malloc(sizeof(struct node));
current->data=num;
current->prev=NULL;
current->link=NULL;
temp=*pt;
if(temp==NULL)
{
*pt=current;
}
else

Name : A. Arul Jefferson

Roll No: 09MA01 Page 66


{
while(temp->link!=NULL)
{
previous=temp;
temp=temp->link;
}
temp->link=current;
current->prev=previous;
}

}
void display(struct node *pt)
{
printf("%d",pt->data);
pt=pt->link;
while(pt!=NULL)
{
printf("<--> %d",pt->data);
pt=pt->link;
}
}

void display1(struct node1 *pt)


{
printf("%d",pt->data);
pt=pt->link;
while(pt!=NULL)
{
printf("--> %d",pt->data);
pt=pt->link;
}
}

Name : A. Arul Jefferson

Roll No: 09MA01 Page 67


void generate(struct node **pt,struct node1 **pt1)
{
int ele;
struct node *temp;
struct node1 *temp1,*current;
current=malloc(sizeof(struct node1));
current->link=NULL;
temp=*pt;
temp1=*pt1;
if(*pt==NULL)
{
printf("List is empty");
}
else
{
ele=temp->data;
current->data=ele;
temp1=current;
temp=temp->link;
*pt1=temp1;
while(temp)
{
ele=temp->data;
temp1->link=malloc(sizeof(struct node1));
temp1=temp1->link;
temp1->data=ele;
temp1->link=NULL;
temp=temp->link;
}

Name : A. Arul Jefferson

Roll No: 09MA01 Page 68


Output:
Generation of Single link list from Double link list
------------------------------------------------------------

Enter the number of elements you want to insert in DOUBLE link list:4
Enter the element you want to add : 4
4
Enter the element you want to add : 7
4<--> 7
Enter the element you want to add : 2
4<--> 7<--> 2
Enter the element you want to add : 8
4<--> 7<--> 2<--> 8

After conversion from Double link list to Single link list:

4--> 7--> 2--> 8

Name : A. Arul Jefferson

Roll No: 09MA01 Page 69

Vous aimerez peut-être aussi