0% found this document useful (0 votes)
88 views

DS LAB Manual

The document provides the index and contents of a lab manual for a data structures course. The index lists 12 experiments covering various data structure topics like arrays, stacks, queues, lists, trees, graphs, searching and sorting algorithms. Each experiment is numbered and includes the name of the concept covered, for example Experiment 1 covers array implementation of stack and queue ADTs. The document provides a detailed outline of the concepts and algorithms that will be covered in each experiment of the data structures lab course.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
88 views

DS LAB Manual

The document provides the index and contents of a lab manual for a data structures course. The index lists 12 experiments covering various data structure topics like arrays, stacks, queues, lists, trees, graphs, searching and sorting algorithms. Each experiment is numbered and includes the name of the concept covered, for example Experiment 1 covers array implementation of stack and queue ADTs. The document provides a detailed outline of the concepts and algorithms that will be covered in each experiment of the data structures lab course.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 78

DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING

CS Data Structures Laboratory


Lab Manual

INDEX
EX. NO. NAME OF THE EXPERIMENT

1. Array implementation of ADTs

1.A Stack ADTs

1.B Queue ADTs

2. Array implementation of List ADT

Linked list implementation

3. 3.A.Linked list implementation of Stack ADTs

3.B.Linked list implementation of Queue ADTs

4. Applications of List, Stack and Queue ADTs

4.A. Implementation of Polynomial ADT

4.B. Conversion of Infix into Postfix Expression

5. Implementation of Binary Trees and operations of Binary Trees

6. Implementation of Binary Search Trees

7. Implementation of AVL Trees

8. Implementation of Heaps using Priority Queues.

9. 9.A.Graph representation

9.B.Graph Traversal-BFS and DFS

10. Implementation of Searching algorithms –Linear Search and Binary


Search.

Implementation of Sorting algorithms –Bubble sort,ShellSort,Quick

Sort.

11. Implementation of Hashing Technique.


EX.NO:1A ARRAY IMPLEMENTATION OF STACK ADT

AIM:
To write a program in C to implement the stack ADT using array concept that
performs all the operations of stack.

ALGORITHM:
STEP 1: Define an array to store the element.
STEP 2: Get the users’ choice.
STEP 3: If the option is 1 perform creation operation and goto step4.
If the option is 2 perform insertion operation and goto step5.
If the option is 3 perform deletion operation and goto step6.
If the option is 4 perform display operation and goto step7.
STEP 4: Create the stack. Initially get the limit of stack and the get the items. If the limit of
stack is exceeds print the message unable to create the stack.
STEP 5: Get the element to be pushed. If top pointer exceeds stack capacity. Print Error
message that the stack overflow. If not, increment the top pointer by one and store the
element in the position which is denoted by top pointer.
STEP 6: If the stack is empty, then print error message that stack is empty. If not fetch the
element from the position which is denoted by top pointer and decrement the top pointer by
one
STEP 7: If the top value is not less than the 0 the stack is display otherwise print the message
“stack is empty”.
STEP 8: Stop the execution.
PROGRAM:

#include<stdio.h>
#include<conio.h>
#define max 20
int opt, a[20],i,top=0,n;

void main()
{
void create(),push(),pop(),disp();
int wish;

do
{
clrscr();
printf("\nMENU");
printf("\n1.Create\n2.Push\n3.pop\n4.Display\n5.Exit\n");
printf("\nEnter your option");
scanf("%d",&opt);

switch(opt)
{
case 1:create();
break;
case 2:push();
break;
case 3:pop();
break;
case 4:disp();
break;
case 5:exit(0);
}

printf("\nDo u want to continue(1/0):");


scanf("%d",&wish);
}
while(wish==1);
}

void create()
{
printf("\n Enter the limit of stack");
scanf("%d",&n);
if(n<max)

{
printf("\nEnter the items");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
top=n-1;
}
else
printf("\nUnable to create the stack");
}

void push()
{
int x;
if(top<max)
{
printf("\nEnter the element to be pushed:");
scanf("%d",&x);
top=top+1;
a[top]=x;
n=top;
}
else
printf("\n Stack is full");
}

void pop()
{
if(top<0)
printf("\n Stack is empty");
else
{
printf("\nThe element popped is %d",a[top]);
top=top-1;
n=top;
}}

void disp()
{
if(top<0)
printf("\n Stack is empty"); else
{
printf("\n The elements in the stack are:"); for(i=top;i>=0;i--)
printf("\n%d",a[i]);
}
}
OUTPUT:

RESULT:

Thus a C program for Stack using ADT was implemented successfully.


EX. NO: 1B QUEUE ADT USING ARRAY

AIM:

To write a program for Queue using array implementation.

ALGORITHM:

1. Define a array which stores queue elements..


2. The operations on the queue are
a)INSERT data into the queue
b)DELETE data out of queue
3. INSERT DATA INTO queue
a. Enter the data to be inserted into queue.
b. If TOP is NULL
i. The input data is the first node in queue.
ii. The link of the node is NULL.
iii. TOP points to that node.
c. If TOP is NOT NULL
i. The link of TOP points to the new node.
ii. TOP points to that node.
4. DELETE DATA FROM queue
a. If TOP is NULL
i. the queue is empty
b. If TOP is NOT NULL
i. The link of TOP is the current TOP.
ii. The pervious TOP is popped from queue.

5. The queue represented by linked list is traversed to display its content.


PROGRAM:

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define SIZE 5
int front = - 1;
int rear = - 1;
int q[SIZE];
void insert( );
void del( );
void display( );

void main( )
{
int choice;
do
{
printf("\t Menu");
printf("\n 1. Insert");
printf("\n 2. Delete");
printf("\n 3. Display ");
printf("\n 4. Exit");
printf("\n Enter Your Choice:");
scanf("%d", &choice);
switch(choice)
{
case 1:
insert( );
display( );
break;
case 2:
del( );
display( );
break;
case 3:
display( );
break;
case 4:
printf("End of Program. !!!!");
exit(0);
}}
while(choice != 4);
}

void insert( )
{
int no;
printf("\n Enter No.:");
scanf("%d", &no);
if(rear < SIZE - 1)
{
q[++rear]=no;
if(front == -1)
front=0;
// front=front+1;
}
else
{
printf("\n Queue overflow");
}}

void del( )
{
if(front == - 1)
{
printf("\n Queue Underflow");
return;
}
else
{
printf("\n Deleted Item:-->%d\n", q[front]);
}
if(front == rear)
{
front = - 1;
rear = - 1;
}
else{
front = front + 1;
}}

void display( )
{
int i;
if( front == - 1)
{
printf("\nQueue is empty. ");
return;
}
for(i = front; i<=rear; i++)
printf("\t%d",q[i]);
}
OUTPUT

RESULT:

Thus a C program for Queue using ADT was implemented successfully


EX.NO:2 ARRAY IMPLEMENTATION OF LIST ADT

AIM:

To write a program for List using array implementation.

ALGORITHM:

Step1: Create nodes first, last; next, prev and cur then set the value as NULL.
Step 2: Read the list operation type.
Step 3: If operation type is create then process the following steps.
1. Allocate memory for node cur.
2. Read data in cur's data area.
3. Assign cur node as NULL.
4. Assign first=last=cur.
Step 4: If operation type is Insert then process the following steps.
1. Allocate memory for node cur.
2. Read data in cur's data area.
3. Read the position the Data to be insert.
4. Availability of the position is true then assing cur's node as first and first=cur.
5. If availability of position is false then do following steps.
1. Assign next as cur and count as zero.
2. Repeat the following steps until count less than postion.
1 .Assign prev as next
2. Next as prev of node.
3. Add count by one.
4.If prev as NULL then display the message INVALID POSITION.
5.If prev not qual to NULL then do the following steps.
1.Assign cur's node as prev's node.
2.Assign prev's node as cur.

Step5: If operation type is delete then do the following steps.


1. Read the position .
2. Check list is Empty .If it is true display the message List empty.
3. If position is first.
1. Assign cur as first.
2. Assign First as first of node.
3. Reallocate the cur from memory.
4. If position is last.
1. Move the current node to prev.
2. cur's node as Null.
3. Reallocate the Last from memory.
4. Assign last as cur.
5. If position is enter Mediate.
1. Move the cur to required postion.
2. Move the Previous to cur's previous position
3. Move the Next to cur's Next position.
4. Now Assign previous of node as next.
5. Reallocate the cur from memory.
step 6: If operation is traverse.
1. Assign current as first.
2. Repeat the following steps untill cur becomes NULL.

PROGRAM:

#include<stdio.h>
#include<conio.h>
#define MAX 10
void create();
void insert();
void deletion();
void search();
void display();

int a,b[20], n, p, e, f, i, pos;


void main()
{

clrscr();
int ch;
char g='y';
do
{

printf("\n main Menu");

printf("\n 1.Create \n 2.Delete \n 3.Search \n 4.Insert \n 5.Display\n 6.Exit


\n");

printf("\n Enter your Choice");


scanf("%d", &ch);
switch(ch)

case 1:

create();
break;
case 2:
deletion();
break;
case 3:
search();
break;
case 4:
insert();
break;
case 5:
display();
break;
case 6:
exit();
break;

default:
printf("\n Enter the correct choice:");

}
printf("\n Do u want to continue:::");
scanf("\n%c", &g);
}
while(g=='y'||g=='Y'); getch();
}

void create()
{
printf("\n Enter the number of nodes");
scanf("%d", &n);
for(i=0;i<n;i++)
{
printf("\n Enter the Element:",i+1);
scanf("%d", &b[i]);
}

void deletion()
{
printf("\n Enter the position u want to delete::");
scanf("%d", &pos);
if(pos>=n)
{
printf("\n Invalid Location::");
}
else
{
for(i=pos+1;i<n;i++)
{
b[i-1]=b[i];
}
n--;
}
printf("\n The Elements after deletion");
for(i=0;i<n;i++)
{
printf("\t%d", b[i]);
}
}

void search()
{
printf("\n Enter the Element to be searched:");
scanf("%d", &e);
for(i=0;i<n;i++)
{
if(b[i]==e)
{
printf("Value is in the %d Position", i);
}}}

void insert()
{
printf("\n Enter the position u need to insert::"); scanf("%d", &pos);
if(pos>=n)
{
printf("\n invalid Location::");
}
else
{
for(i=MAX-1;i>=pos-1;i--)
{
b[i+1]=b[i];
}
printf("\n Enter the element to insert::\n");
scanf("%d",&p);
b[pos]=p; n++;
}

printf("\n The list after insertion::\n");


display();
}
void display()
{
printf("\n The Elements of The list ADT are:");
for(i=0;i<n;i++)
{
printf("\n\n%d", b[i]);
}}
OUTPUT

RESULT:

Thus the C program for array implementation of List ADT was created, executed and output
was verified successfully
EX. NO: 3A STACK ADT USING LINKED LIST

AIM:

To write a C program for stack ADT using linked list implementation.

ALGORITHM:

1. Define a struct for each node in the stack. Each node in the stack contains data and
link to the next node. TOP pointer points to last node inserted in the stack.

2. The operations on the stack are


a. PUSH data into the stack
b. POP data out of stack

3. PUSH DATA INTO STACK


a. Enter the data to be inserted into stack.
b. If TOP is NULL
i. The input data is the first node in stack.
ii. The link of the node is NULL.
iii. TOP points to that node.
c. If TOP is NOT NULL
i. The link of TOP points to the new node.
ii. TOP points to that node.

4. POP DATA FROM STACK


a. If TOP is NULL
i. the stack is empty
b. If TOP is NOT NULL
i. The link of TOP is the current TOP.
ii. The pervious TOP is popped from stack.

5. The stack represented by linked list is traversed to display its content.


PROGRAM:

#include<stdio.h>
#include<conio.h>
#include<alloc.h>
struct node
{
int data;
struct node *next;
}*top,*new1,*first;

void main()
{
int wish,opt;
void create(),push(),pop(),view();
do
{
clrscr();
printf("Stack using linked list menu");
printf("\n1.Create\n2.Push\n3.Pop\n4.View\n5.Exit\n");
printf("\nEnter your option(1,2,3,4,5):");
scanf("%d",&wish);

switch(wish)
{
case 1: create();
break;
case 2: push();
break;
case 3: pop();
break;
case 4: view();
break;
case 5: exit(0);
}
printf("\nDo you wnat to continue(0/1):");
scanf("%d",&opt);
}while(opt==1);
}

void create()
{
int ch;
top=(struct node*)malloc(sizeof(struct node));
top->next=NULL;
do
{
clrscr();
printf("Enter the data:\n");
scanf("%d",&top->data);
printf("Do you want to insert another(1/0)\n");
scanf("%d",&ch);
{
new1=(struct node*)malloc(sizeof(struct node));
new1->next=top;
top=new1;
first=top;
break;

}
else
}while(ch==1);
}

void push()
{
top=first;
new1=(struct node*)malloc(sizeof(struct node));
printf("Enter the element to be pushed:");
scanf("%d",&new1->data); new1->next=top; top=new1;
first=top;
}

void pop()
{
clrscr();
top=first;
if(top==NULL)
printf("\n Stack is empty");
else
{
printf("\nThe element popped out from stack is %d",top->data);
top=top->next;
first=top;
}}

void view()
{
printf("\nStack contents\n");
while(top->next!=NULL)
{
printf("%d->",top->data);
top=top->next;
}
printf("%d\n",top->data);
getch();
}
OUTPUT

RESULT:

Thus the C program for array implementation of Stack ADT was created, executed and
output was verified successfully
EX. NO :3B QUEUE ADT USING LINKED LIST

AIM:
To write a C program for Queue using Linked implementation.

ALGORITHM:

1. Define a struct for each node in the queue. Each node in the queue contains data and
link to the next node. Front and rear pointer points to first and last node inserted in the queue.

2. The operations on the queue are


a. INSERT data into the queue
b. DELETE data out of queue

3. INSERT DATA INTO queue


a. Enter the data to be inserted into queue.
b. If TOP is NULL
i.The input data is the first node in queue.
ii. The link of the node is NULL.
iii.TOP points to that node.
c. If TOP is NOT NULL
i.The link of TOP points to the new node.
ii. TOP points to that node.

4. DELETE DATA FROM queue


a. If TOP is NULL
i. the queue is empty
b. If TOP is NOT NULL
i.The link of TOP is the current TOP.
ii.The pervious TOP is popped from queue.

5. The queue represented by linked list is traversed to display its content.


PROGRAM:

#include<stdio.h>
#include<conio.h>
struct node
{
int info;
struct node *link;
}*front = NULL, *rear = NULL;

void insert();
void delet();
void display();
int item;
void main()
{
int ch;
do
{
printf("\n\n1.\tEnqueue\n2.\tDequeue\n3.\tDisplay\n4.\tExit\n");
printf("\nEnter your choice: ");
scanf("%d", &ch);
switch(ch)
{
case 1:
insert();
break;
case 2:
delet();
break;
case 3:
display();
break;
case 4:
exit(0);
default:
printf("\n\nInvalid choice. Please try again...\n");
}
} while(1);
getch();
}

void insert()
{
printf("\n\nEnter ITEM: ");
scanf("%d", &item);
if(rear == NULL)
{
rear = (struct node *)malloc(sizeof(struct node));
rear->info = item;
rear->link = NULL;
front = rear;
}
else
{
rear->link = (struct node *)malloc(sizeof(struct node));
rear = rear->link;
rear->info = item;
rear->link = NULL;
}}

void delet()
{
struct node *ptr;
if(front == NULL)
printf("\n\nQueue is empty.\n");
else
{
ptr = front;
item = front->info;
front = front->link;
free(ptr);
printf("\nItem deleted: %d\n", item);
if(front == NULL)
rear = NULL;
}}

void display()
{
struct node *ptr = front;
if(rear == NULL)
printf("\n\nQueue is empty.\n");
else
{
printf("\n\n");
while(ptr != NULL)
{
printf("%d\t",ptr->info);
ptr = ptr->link;
}}}
OUTPUT

RESULT:

Thus the C program for array implementation of Queue ADT was created, executed and
output was verified successfully.
EXNO:4A REPRESENT A POLYNOMIAL AS A LINKED LIST

AIM:
To write program in C to convert given infix expression in to postfix notation

ALGORITHM:

1: Get the two polynomials. First polynomial is P1 and second polynomial is P2

2: For addition of two polynomials if exponents of both the polynomials are same then we ad
the coefficients. For storing the result we will create the third linked lists say P3.

3: If Exponent of P2 is greater than exponent of P1 then keep the P3 as P2

4: If Exponent of P2 is greater than exponent of P1 then keep the P3 as P1

5: If Exponent of P2 is equal to the exponent of P1 then add the coefficient of P1 and


coefficient of P2 as coefficient of P3.

6: Continue the above step from 3 to 5 until end o the two polynomials.

7: If any of the polynomial is ended keep P3 as the remaining polynomial.

8: Stop the execution.


PROGRAM:

#include<stdio.h>
#include<conio.h>
main()
{
int a[10], b[10], c[10],m,n,k,k1,i,j,x;
clrscr();
printf("\n\tPolynomial Addition\n");
printf("\t===================\n");
printf("\n\tEnter the no. of terms of the polynomial:");
scanf("%d", &m);
printf("\n\tEnter the degrees and coefficients:");
for (i=0;i<2*m;i++)
scanf("%d", &a[i]);
printf("\n\tFirst polynomial is:");
k1=0;
if(a[k1+1]==1)
printf("x^%d", a[k1]);
else
printf("%dx^%d", a[k1+1],a[k1]);
k1+=2;
while (k1<i)
{
printf("+%dx^%d", a[k1+1],a[k1]);
k1+=2;
}
printf("\n\n\n\tEnter the no. of terms of 2nd polynomial:");
scanf("%d", &n);
printf("\n\tEnter the degrees and co-efficients:");
for(j=0;j<2*n;j++)
scanf("%d", &b[j]);
printf("\n\tSecond polynomial is:");
k1=0;
if(b[k1+1]==1)
printf("x^%d", b[k1]);
else
printf("%dx^%d",b[k1+1],b[k1]);
k1+=2;
while (k1<2*n)
{
printf("+%dx^%d", b[k1+1],b[k1]);
k1+=2;
}
i=0; j=0; k=0;
while (m>0 && n>0)
{
if (a[i]==b[j])
{
c[k+1]=a[i+1]+b[j+1];
c[k]=a[i];
m--;
n--;
i+=2;
j+=2;
}
else if (a[i]>b[j])
{
c[k+1]=a[i+1];
c[k]=a[i];
m--;
i+=2;
}
else
{
c[k+1]=b[j+1];
c[k]=b[j];
n--;
j+=2;
} k+=2;
}
while (m>0)
{
c[k+1]=a[i+1];
c[k]=a[i];
k+=2;
i+=2;
m--;
}
while (n>0)
{
c[k+1]=b[j+1];
c[k]=b[j];
k+=2;
j+=2;
n--;
}
printf("\n\n\n\n\tSum of the two polynomials is:");
k1=0;
if (c[k1+1]==1)
printf("x^%d", c[k1]);
else
printf("%dx^%d", c[k1+1],c[k1]);
k1+=2;
while (k1<k)
{
if (c[k1+1]==1)
printf("+x^%d", c[k1]);
else
printf("+%dx^%d", c[k1+1], c[k1]);
k1+=2;
}
getch();
return 0;
}

OUTPUT

RESULT:
Thus the program in C to convert given infix expression in to postfix notation
EX.NO:4B CONVERSION OF INFIX EXPRESSION TO POSTFIX NOTATION

AIM:
To write program in C to convert given infix expression to postfix notation

ALGORITHM:

1: Get an infix expression.


2: Scan the expression from left to right.
3: If any operands come display it.
4: If the incoming symbol in a operator and has more priority then the symbol into the stack.

5: If the incoming operator has less priority than the stack symbol then copy the symbol at the
top of the stack and then print until the condition becomes false and push the following
operator on the stack.

6: If the symbol is ‘)’ then copy operators from top of the stack. Deletion opening parenthesis
is from top of the stack.

7: Stop the process.


PROGRAM:

#include<stdio.h>
char stack[20];
int top = -1;
void push(char x)
{
stack[++top] = x;
}

char pop()
{
if(top == -1)
return -1;
else
return stack[top--];
}
int priority(char x)
{
if(x == '(')
return 0;
if(x == '+' || x == '-')
return 1;
if(x == '*' || x == '/')
return 2;
}
main()
{
char exp[20];
char *e, x;
printf("Enter the expression :: ");
scanf("%s",exp);
e = exp;
while(*e != '\0')
{
if(isalnum(*e))
printf("%c",*e);
else if(*e == '(')
push(*e);
else if(*e == ')')
{
while((x = pop()) != '(')
printf("%c", x);
}
else
{
while(priority(stack[top]) >= priority(*e))
printf("%c",pop());
push(*e);
}
e++;
}
while(top != -1)
{
printf("%c",pop());
}
}

OUTPUT

RESULT:

Thus the program in C to convert given infix expression to postfix notation


EXNO:5 IMPLEMENTATION BINARY TREE AND OPERATIONS OF
BINARY TREES

AIM:

To write a C Program to implement Binary Tree And Operations Of Binary Trees

ALGORITHM:

1. Start from root.

2. Compare the inserting element with root, if less than root, then recurse for left, else
recurse for right.

3. If element to search is found anywhere, return true, else return false

PROGRAM

#include<stdio.h>
#include<stdlib.h>
struct tree
{
int data;
struct tree *left;
struct tree *right;
} *root = NULL, *node = NULL, *temp = NULL;

struct tree* insert(int key,struct tree *leaf)


{
if(leaf == 0)
{
struct tree *temp;
temp = (struct tree *)malloc(sizeof(struct tree));
temp->data = key;
temp->left = 0;
temp->right = 0;
printf("Data inserted!\n");
return temp;
}
else
{
if(key < leaf->data)
leaf->left = insert(key,leaf->left);
else
leaf->right = insert(key,leaf->right);
}
return leaf;
}
struct tree* search(int key,struct tree *leaf)
{
if(leaf != NULL)
{
if(key == leaf->data)
{
printf("Data found!\n");
return leaf;
}
else
{
if(key < leaf->data)
return search(key,leaf->left);
else
return search(key,leaf->right);
}
}
else
{
printf("Data not found!\n");
return NULL;
}}
struct tree* minvalue(struct tree *node)
{
if(node == NULL)
return NULL;
if(node->left)
return minvalue(node->left);
else
return node;
}
/* Function for find maximum value from the Tree */ struct tree* maxvalue(struct tree *node)
{
if(node == NULL)
return NULL;
if(node->right)
return maxvalue(node->right);
else
return node;
}
void preorder(struct tree *leaf)
{
if(leaf == NULL)
return;
printf("%d\n",leaf->data);
preorder(leaf->left);
preorder(leaf->right);
}
void inorder(struct tree *leaf)
{
if(leaf == NULL)
return;
preorder(leaf->left);
printf("%d\n",leaf->data);
preorder(leaf->right);
}

void postorder(struct tree *leaf)


{
if(leaf == NULL)
return;
preorder(leaf->left);
preorder(leaf->right);
printf("%d\n",leaf->data);
}

struct tree* delete(struct tree *leaf, int key)


{
if(leaf == NULL)
printf("Element Not Found!\n");
else if(key < leaf->data)
leaf->left = delete(leaf->left, key);
else if(key > leaf->data)
leaf->right = delete(leaf->right, key);
else
{
if(leaf->right && leaf->left)
{
temp = minvalue(leaf->right);
leaf->data = temp->data;
leaf->right = delete(leaf->right,temp->data);
}
else
{
temp = leaf;
if(leaf->left == NULL) leaf = leaf->right;
else if(leaf->right == NULL) leaf = leaf->left;
free(temp);
printf("Data delete successfully!\n");
}
}
}

int main()
{
int key, choice;
while(choice != 7)
{
printf("1. Insert\n2. Search\n3. Delete\n4. Display\n5. Min Value\n6.
Max Value\n7. Exit\n");
printf("Enter your choice:\n");
scanf("%d", &choice);
switch(choice)

{
case 1:
printf("\nEnter the value to insert:\n");
scanf("%d", &key);
root = insert(key, root);
break;

case 2:
printf("\nEnter the value to search:\n");
scanf("%d", &key);
search(key,root);
break;

case 3:
printf("\nEnter the value to delete:\n");
scanf("%d", &key);
delete(root,key);
break;

case 4:
printf("Preorder:\n");
preorder(root);
printf("Inorder:\n");
inorder(root);
printf("Postorder:\n");
postorder(root);
break;

case 5:
if(minvalue(root) == NULL)
printf("Tree is empty!\n");

else
printf("Minimum value is %d\n", minvalue(root)- >data);
break;

case 6:
if(maxvalue(root) == NULL)

printf("Tree is empty!\n");
else
printf("Maximum value is %d\n", maxvalue(root)- >data);
break;
case 7:
printf("Bye Bye!\n");
exit(0);
break;
default:
printf("Invalid choice!\n");
}
}
return 0;

OUTPUT

RESULT:

Thus the program in C is implemented Binary Tree and Operations of Binary Trees.
EX. NO: 6 IMPLEMENTATION OF BINARY SEARCH TREE

AIM:
To write a C program to implementation of binary search tree.

ALGORITHM:

1. Declare function create (), search (), delete (), Display ().

2. Create a structure for a tree contains left pointer and right pointer.

3. Insert an element is by checking the top node and the leaf node and the operation will
be performed.

4. Deleting an element contains searching the tree and deleting the item.

5. Display the Tree elements.

PROGRAM:

#include<stdio.h>
#include<conio.h>
#include<process.h>
#include<alloc.h>

struct tree
{
int data;
struct tree *lchild;
struct tree *rchild;
}*t,*temp;

int element;
void inorder(struct tree *);
void preorder(struct tree *);
void postorder(struct tree *);
struct tree * create(struct tree *, int);
struct tree * find(struct tree *, int);
struct tree * insert(struct tree *, int);
struct tree * del(struct tree *, int);
struct tree * findmin(struct tree *);
struct tree * findmax(struct tree *);
void main()
{
int ch;
do
{
printf("\n\t\t\tBINARY SEARCH TREE");
printf("\n\t\t\t****** ****** ****");
printf("\nMain Menu\n");
printf("\n1.Create\n2.Insert\n3.Delete\n4.Find\n5.FindMin\n6.FindMax");
printf("\n7.Inorder\n8.Preorder\n9.Postorder\n10.Exit\n");
printf("\nEnter ur choice :");
scanf("%d",&ch);
switch(ch)
{
case 1:
printf("\nEnter the data:");
scanf("%d",&element);
t=create(t,element);
inorder(t);
break;

case 2:
printf("\nEnter the data:");
scanf("%d",&element);
t=insert(t,element);
inorder(t);
break;

case 3:
printf("\nEnter the data:");
scanf("%d",&element);
t=del(t,element);
inorder(t);
break;

case 4:
printf("\nEnter the data:");
scanf("%d",&element);
temp=find(t,element);
if(temp->data==element)
printf("\nElement %d is at %d",element,temp);
else
printf("\nElement is not found");
break;

case 5:
temp=findmin(t);
printf("\nMax element=%d",temp->data);
break;

case 6:
temp=findmax(t);
printf("\nMax element=%d",temp->data);
break;

case 7:
inorder(t);
break;

case 8:
preorder(t);
break;

case 9:
postorder(t);
break;

case 10:
exit(0);
}
}while(ch<=10);
}

struct tree * create(struct tree *t, int element)


{
t=(struct tree *)malloc(sizeof(struct tree));
t->data=element;
t->lchild=NULL;
t->rchild=NULL;
return t;
}

struct tree * find(struct tree *t, int element)


{
if(t==NULL)
return NULL;
if(element<t->data)
return(find(t->lchild,element));
else
if(element>t->data)
return(find(t->rchild,element));
else

return t;
}

struct tree *findmin(struct tree *t)


{
if(t==NULL)
return NULL;
else
if(t->lchild==NULL)
return t;
else
return(findmin(t->lchild));
}

struct tree *findmax(struct tree *t)


{
if(t!=NULL)
{
while(t->rchild!=NULL)
t=t->rchild;
}
return t;
}

struct tree *insert(struct tree *t,int element)


{
if(t==NULL)
{
t=(struct tree *)malloc(sizeof(struct tree));
t->data=element;
t->lchild=NULL;
t->rchild=NULL;
return t;
}
else if(element<t->data)
{
t->lchild=insert(t->lchild,element);
}
else if(element>t->data)
{
t->rchild=insert(t->rchild,element);
}
else if(element==t->data)
{
printf("element already present\n");
}
return t;
}

struct tree * del(struct tree *t, int element)


{
if(t==NULL)
printf("element not found\n");
else if(element<t->data)
t->lchild=del(t->lchild,element);
else if(element>t->data)
t->rchild=del(t->rchild,element);
else if(t->lchild&&t->rchild)
{
temp=findmin(t->rchild);
t->data=temp->data;
t->rchild=del(t->rchild,t->data);
}
else if(t->lchild==NULL)
{
temp=t;
t=t->rchild;
return t;
}

else if(t->rchild==NULL)
t=t->lchild;
free(temp);
}

void inorder(struct tree *t)


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

void preorder(struct tree *t)


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

void postorder(struct tree *t)


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

RESULT:

Thus the C program for binary search tree was created, executed and output was verified
successfully.
EX NO:7 IMPLEMENTATION OF AVL TREE

AIM:-
To write a C program to implement insertion in AVL trees.

ALGORITHM:-

1. Initialize all variables and functions.


2. To insert and element read the value.
3. Check whether root is null
4. If yes make the new value as root.
5. Else check whether the value is equal to root value.
6. if yes, print “duplicate value”.
7. Otherwise insert the value at its proper position and balance the tree using rotations. 8.
To display the tree values check whether the tree is null.
9. If yes, print “tree is empty”.
10. Else print all the values in the tree form and in order ofthe tree.
11. Repeat the steps 2 to 10 for more values.
12 .End

PROGRAM

#include<stdio.h>
#include<malloc.h>
typedef enum { FALSE ,TRUE } bool;
struct node
{
int info;
int balance;
struct node *lchild;
struct node *rchild;
};

struct node *insert (int , struct node *, int *);


struct node* search(struct node *,int);

main()
{
bool ht_inc; int info ; int choice;
struct node *root = (struct node *)malloc(sizeof(struct node));
root = NULL;
while(1)
{
printf("1.Insert\n");
printf("2.Display\n");
printf("3.Quit\n");
printf("Enter your choice : ");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("Enter the value to be inserted : ");
scanf("%d", &info);
if( search(root,info) == NULL )
root = insert(info, root, &ht_inc);
else
printf("Duplicate value ignored\n");
break;

case 2: if(root==NULL)
{
printf("Tree is empty\n");
continue;
}
printf("Tree is :\n");
display(root, 1);
printf("\n\n");
printf("Inorder Traversal is: ");
inorder(root);
printf("\n");
break;

case 3:

exit(1);
default:
printf("Wrong choice\n");

}/*End of switch*/

}/*End of while*/

}/*End of main()*/

struct node* search(struct node *ptr,int info)


{
if(ptr!=NULL)
if(info < ptr->info)
ptr=search(ptr->lchild,info);
else if( info > ptr->info)
ptr=search(ptr->rchild,info);
return(ptr);
}/*End of search()*/

struct node *insert (int info, struct node *pptr, int *ht_inc)
{
struct node *aptr; struct node *bptr;
if(pptr==NULL)
{
pptr = (struct node *) malloc(sizeof(struct node));
pptr->info = info;
pptr->lchild = NULL;
pptr->rchild = NULL;
pptr->balance = 0;
*ht_inc = TRUE;
return (pptr);
}
if(info < pptr->info)
{
pptr->lchild = insert(info, pptr->lchild, ht_inc);
if(*ht_inc==TRUE)
{
switch(pptr->balance)
{
case -1: /* Right heavy */ pptr->balance = 0;
*ht_inc = FALSE;
break;

case 0: /* Balanced */ pptr->balance = 1;


break;

case 1: /* Left heavy */ aptr = pptr->lchild;


if(aptr->balance == 1)
{
printf("Left to Left Rotation\n");
pptr->lchild= aptr->rchild;
aptr->rchild = pptr;
pptr->balance = 0;
aptr->balance=0;
pptr = aptr;
}
else
{
printf("Left to right rotation\n");
bptr = aptr->rchild;
aptr->rchild = bptr->lchild;
bptr->lchild = aptr;
pptr->lchild = bptr->rchild;
bptr->rchild = pptr;
if(bptr->balance == 1 )
pptr->balance = -1;
else
pptr->balance = 0;
if(bptr->balance == -1)
aptr->balance = 1;
else
aptr->balance = 0;
bptr->balance=0;
pptr=bptr;
}
*ht_inc = FALSE;
}/*End of switch */
}/*End of if */
}/*End of if*/
if(info > pptr->info)
{
pptr->rchild = insert(info, pptr->rchild, ht_inc);
if(*ht_inc==TRUE)
{
switch(pptr->balance)
{
case 1: /* Left heavy */ pptr->balance = 0;
*ht_inc = FALSE;
break;

case 0: /* Balanced */ pptr->balance = -1;


break;

case -1: /* Right heavy */ aptr = pptr->rchild;


if(aptr->balance == -1)
{
printf("Right to Right Rotation\n");
pptr->rchild= aptr->lchild;
aptr->lchild = pptr;
pptr->balance = 0;
aptr->balance=0;
pptr = aptr;
}
else
{
printf("Right to Left Rotation\n");
bptr = aptr->lchild;
aptr->lchild = bptr->rchild;
bptr->rchild = aptr;
pptr->rchild = bptr->lchild;
bptr->lchild = pptr;
if(bptr->balance == -1)
pptr->balance = 1;
else
pptr->balance = 0;
if(bptr->balance == 1)
aptr->balance = -1;
else
aptr->balance = 0;
bptr->balance=0;
pptr = bptr;
}/*End of else*/
*ht_inc = FALSE;
}/*End of switch */
}/*End of if*/
}/*End of if*/
return(pptr);
}/*End of insert()*/

display(struct node *ptr,int level)


{
int i;
if ( ptr!=NULL )
{
display(ptr->rchild, level+1);
printf("\n");
for (i = 0; i < level; i++)
printf(" ");
printf("%d", ptr->info);
display(ptr->lchild, level+1);
}/*End of if*/

}/*End of display()*/

inorder(struct node *ptr)


{
if(ptr!=NULL)
{
inorder(ptr->lchild);
printf("%d ",ptr->info);
inorder(ptr->rchild);
}}/*End of inorder()*/
OUTPUT

RESULT

Thus the ‘C’ program to implement an AVL trees . Produce its pre-Sequence, In-
Sequence, and Post- Sequence traversals
EXNO:8 IMPLEMENTATION OF PRIORITY QUEUE USING HEAPS

AIM:

To write a C program to implement Priority Queue using Binary Heaps.

ALGORITHM:

1. Initialize all necessary variables and functions.

2. Read the choices.

3. For insertion, read the element to be inserted.

4. If root is NULL, assign the given element as root.

5. If the element is equal to the root, print “Duplicate value”.

6. Else if element value is less than the root value, insert element at the left of the root.

7. Else insert right side of the root.

8. For deletion, get the priority for maximum or minimum.

9. If maximum, it deletes the root and rearranges the tree.

10. If minimum, it deletes the leaf.

11. End of the program

PROGRAM

#include<stdio.h>
#include<conio.h>
#include <stdlib.h>
enum {FALSE=0,TRUE=-1};
struct Node
{
struct Node *Previous;
int Data;
struct Node *Next;
}Current;
struct Node *head;
struct Node *ptr;
static int NumOfNodes;
int PriorityQueue(void);
int Maximum(void);
int Minimum(void);
void Insert(int);
int Delete(int);
void Display(void);
int Search (int);

void main()
{
int choice;
int DT;
PriorityQueue();
while(1)
{
printf("\nEnter ur Choice:");
printf("\n1.Insert\n2.Display\n3.Delete\n4.Search\n5.Exit\n");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("\nEnter a data to enter Queue");
scanf("%d",&DT);
Insert(DT);
break;

case 2:
Display();
break;

case 3:
{
int choice,DataDel;
printf("\nEnter ur choice:");
printf("\n1.Maximum Priority queue\n2.Minimum priority Queue\n");
scanf("%d",&choice);
switch(choice)
{
case 1:
DataDel=Maximum();
Delete(DataDel);
printf("\n%d is deleted\n",DataDel);
break;

case 2:
DataDel=Minimum();
Delete(DataDel);
printf("\n%d is deleted\n",DataDel);
break;
default:
printf("\nSorry Not a correct Choice\n");
}
}
break;
case 4:
printf("\nEnter a data to Search in Queue:");
scanf("%d",&DT);
if(Search(DT)!=FALSE)
printf("\n %d is present in queue",DT);
else
printf("\n%d is not present in queue",DT);
break;

case 5:
exit(0);

default:
printf("\nCannot process ur choice\n");
} }}

int PriorityQueue(void)
{
Current.Previous=NULL;
printf("\nEnter first element of Queue:");
scanf("%d",&Current.Data);
Current.Next=NULL;
head=&Current; ptr=head;
NumOfNodes++; return;
}
int Maximum(void)
{
int Temp; ptr=head;
Temp=ptr->Data;
while(ptr->Next!=NULL)
{
if(ptr->Data>Temp)
Temp=ptr->Data;
ptr=ptr->Next;
}
if(ptr->Next==NULL && ptr->Data>Temp)
Temp=ptr->Data;
return(Temp);
}
int Minimum(void)
{
int Temp;
ptr=head;
Temp=ptr->Data;
while(ptr->Next!=NULL)
{
if(ptr->Data<Temp)
Temp=ptr->Data;
ptr=ptr->Next;
}
if(ptr->Next==NULL && ptr->Data<Temp)
Temp=ptr->Data;
return(Temp);
}

void Insert(int DT)


{
struct Node *newnode;
newnode=(struct Node *)malloc(sizeof(struct Node));
newnode->Next=NULL;
newnode->Data=DT;
while(ptr->Next!=NULL)
ptr=ptr->Next;
if(ptr->Next==NULL)
{
newnode->Next=ptr->Next;
ptr->Next=newnode;
}
NumOfNodes++;
}

int Delete(int DataDel)


{
struct Node *mynode,*temp;
ptr=head;
if(ptr->Data==DataDel)
{
temp=ptr;
ptr=ptr->Next;
ptr->Previous=NULL;
head=ptr;
NumOfNodes--;
return(TRUE);
}
else
{
while(ptr->Next->Next!=NULL)
{
if(ptr->Next->Data==DataDel)
{
mynode=ptr;
temp=ptr->Next;
mynode->Next=mynode->Next->Next;
mynode->Next->Previous=ptr;
free(temp);
NumOfNodes--;
return(TRUE);
}
ptr=ptr->Next;
}
if(ptr->Next->Next==NULL && ptr->Next->Data==DataDel)
{

temp=ptr->Next;
free(temp);
ptr->Next=NULL;
NumOfNodes--;
return(TRUE);
}
}
return(FALSE);
}

int Search(int DataSearch)


{
ptr=head;
while(ptr->Next!=NULL)
{
if(ptr->Data==DataSearch)
return ptr->Data;
ptr=ptr->Next;
}

if(ptr->Next==NULL && ptr->Data==DataSearch)


return ptr->Data;
return(FALSE);
}

void Display(void)
{
ptr=head;
printf("\nPriority Queue is as Follows:-\n");

while(ptr!=NULL)
{
printf("\t\t%d",ptr->Data); ptr=ptr->Next;
}
}
OUTPUT

RESULT:

Thus the Priority Queue using Binary Heap is implemented and the result is verified
successfully.
Ex:10.A GRAPH REPRESENTATIONS

AIM:

To write a C program implement adjacent matrix and adjacency list .

ALGORITHM:

1. Create a graph with getting no. of vertices and no. of edges

2. Implement adjacency matrix

3. Implement adjacency list

4. Close the program

PROGRAM

#include <stdio.h>
#include <stdlib.h>
void main()
{
int option;
do
{
printf("\n A Program to represent a Graph by using an ");
printf("Adjacency Matrix method \n ");
printf("\n 1. Directed Graph ");
printf("\n 2. Un-Directed Graph ");
printf("\n 3. Exit ");
printf("\n\n Select a proper option : ");
scanf("%d", &option);
switch(option)
{
case 1 : dir_graph();
break;
case 2 : undir_graph(); break;
case 3 : exit(0);
} // switch
}while(1);
}

int dir_graph()
{
int adj_mat[50][50];
int n;
int in_deg, out_deg, i, j;
printf("\n How Many Vertices ? : ");
scanf("%d", &n);
read_graph(adj_mat, n);
printf("\n Vertex \t In_Degree \t Out_Degree \t Total_Degree ");
for (i = 1; i <= n ; i++ )
{
in_deg = out_deg = 0;
for ( j = 1 ; j <= n ; j++ )
{
if ( adj_mat[j][i] == 1 )
in_deg++;
}
for ( j = 1 ; j <= n ; j++ )
if (adj_mat[i][j] == 1 )
out_deg++;
printf("\n\n%5d\t\t\t%d\t\t%d\t\t%d\n\n",i,in_deg,out_deg,in_deg+out_deg);
}return;
}

int undir_graph()
{
int adj_mat[50][50];
int deg, i, j, n;
printf("\n How Many Vertices ? : ");
scanf("%d", &n);
read_graph(adj_mat, n);
printf("\n Vertex \t Degree ");
for ( i = 1 ; i <= n ; i++ )
{
deg = 0;
for ( j = 1 ; j <= n ; j++ )
if ( adj_mat[i][j] == 1)
deg++;
printf("\n\n %5d \t\t %d\n\n", i, deg);
}
return;
}

int read_graph ( int adj_mat[50][50], int n )


{
int i, j;
char reply;
for ( i = 1 ; i <= n ; i++ )
{
for ( j = 1 ; j <= n ; j++ )
{
if ( i == j )
{
adj_mat[i][j] = 0;
continue;
}
printf("\n Vertices %d & %d are Adjacent ? (Y/N) :",i,j);
scanf("%c", &reply);
if ( reply == 'y' || reply == 'Y' )
adj_mat[i][j] = 1;
else
adj_mat[i][j] = 0;
}}

return;
}

OUTPUT

RESULT:

Thus the C program implemented adjacent matrix and adjacency list


EX.NO.10.B IMPLEMENT DFS AND BFS GRAPH TRAVERSAL

AIM:

To write a C program implement DFS and BFS graph traversal.

ALGORITHM:

DFS

1. Define a Stack of size total number of vertices in the graph.


2. Select any vertex as starting point for traversal. Visit that vertex and push it on to the
Stack.
3. Visit any one of the adjacent vertex of the verex which is at top of the stack which is
not visited and push it on to the stack.
4. Repeat step 3 until there are no new vertex to be visit from the vertex on top of the
stack.
5. When there is no new vertex to be visit then use back tracking and pop one vertex
from the stack.
6. Repeat steps 3, 4 and 5 until stack becomes Empty.
7. When stack becomes Empty, then produce final spanning tree by removing unused
edges from the graph

BFS
1. Define a Queue of size total number of vertices in the graph.
2. Select any vertex as starting point for traversal. Visit that vertex and insert it into the
Queue.
3. Visit all the adjacent vertices of the verex which is at front of the Queue which is not
visited and insert them into the Queue.
4. When there is no new vertex to be visit from the vertex at front of the Queue then
delete that vertex from the Queue.
5. Repeat step 3 and 4 until queue becomes empty.
6. When queue becomes Empty, then produce final spanning tree by removing unused
edges from the graph
PROGRAM

include<stdio.h>
int q[20],top=-1,front=-1,rear=-1,a[20][20],vis[20],stack[20];
int delete();
void add(int item);
void bfs(int s,int n);
void dfs(int s,int n);
void push(int item);
int pop();
void main()
{
int n,i,s,ch,j;
char c,dummy;
printf("ENTER THE NUMBER VERTICES ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("ENTER 1 IF %d HAS A NODE WITH %d ELSE 0 ",i,j);
scanf("%d",&a[i][j]);
}
}
printf("THE ADJACENCY MATRIX IS\n");
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf(" %d",a[i][j]);
}
printf("\n");
}
do
{
for(i=1;i<=n;i++)
vis[i]=0;
printf("\nMENU");
printf("\n1.B.F.S");
printf("\n2.D.F.S");
printf("\nENTER YOUR CHOICE");
scanf("%d",&ch);
printf("ENTER THE SOURCE VERTEX :");
scanf("%d",&s);
switch(ch)
{
case 1:bfs(s,n); break;
case 2:dfs(s,n); break;
}
printf("DO U WANT TO CONTINUE(Y/N) ? ");
scanf("%c",&dummy);
scanf("%c",&c);
}while((c=='y')||(c=='Y'));
}

//**************BFS(breadth-first search) code**************//


void bfs(int s,int n)
{
int p,i;
add(s);
vis[s]=1;
p=delete();
if(p!=0)
printf(" %d",p);
while(p!=0)
{
for(i=1;i<=n;i++)
if((a[p][i]!=0)&&(vis[i]==0))
{
add(i);
vis[i]=1;
}
p=delete();
if(p!=0)
printf(" %d ",p);
}
for(i=1;i<=n;i++)
if(vis[i]==0)
bfs(i,n);
}

void add(int item)


{
if(rear==19)
printf("QUEUE FULL");
else
{
if(rear==-1)
{
q[++rear]=item; front++;
}
else q[++rear]=item;
}
}

int delete()
{
int k;
if((front>rear)||(front==-1))
return(0);
else
{
k=q[front++];
return(k);
}
}

//***************DFS(depth-first search) code******************//


void dfs(int s,int n)
{
int i,k;
push(s);
vis[s]=1;
k=pop();
if(k!=0)
printf(" %d ",k);
while(k!=0)
{
for(i=1;i<=n;i++)
if((a[k][i]!=0)&&(vis[i]==0))
{
push(i);
vis[i]=1;
}
k=pop();
if(k!=0) printf(" %d ",k);
}
for(i=1;i<=n;i++)
if(vis[i]==0)
dfs(i,n);
}

void push(int item)


{
if(top==19)
printf("Stack overflow ");
else
stack[++top]=item;
}

int pop()
{
int k;
if(top==-1)
return(0);
else
{
k=stack[top--];
return(k);
}}
OUTPUT

RESULT:

Thus the C program implemented DFS and BFS graph traversal.

Ex:11.A. IMPLEMENTATION OF SEARCHING ALGORITHMS LINEAR


SEARCH AND BINARY SEARCH

AIM:

To write a C Program to implement different searching techniques – Linear and


Binary search.

ALGORITHM:

Linear Search:
1. Read the search element from the user
2. Compare, the search element with the first element in the list.
3. If both are matching, then display "Given element found!!!" and terminate the
function
4. If both are not matching, then compare search element with the next element in the
list.
5. Repeat steps 3 and 4 until the search element is compared with the last element in the
list.
6. If the last element in the list is also doesn't match, then display "Element not found!!!"
and terminate the function.

Binary search :
1. Read the search element from the user
2. Find the middle element in the sorted list
3. Compare, the search element with the middle element in the sorted list.
4. If both are matching, then display "Given element found!!!" and terminate the
function
5. If both are not matching, then check whether the search element is smaller or larger
than middle element.
6. If the search element is smaller than middle element, then repeat steps 2, 3, 4 and 5
for the left sublist of the middle element.
7. If the search element is larger than middle element, then repeat steps 2, 3, 4 and 5 for
the right sublist of the middle element.
8. Repeat the same process until we find the search element in the list or until sublist
contains only one element.
9. If that element also doesn't match with the search element, then display "Element not
found in the list!!!" and terminate the function.

PROGRAM
#include <stdio.h>
void sequential_search(int array[], int size, int n)
{
int i;
for (i = 0; i < size; i++)
{
if (array[i] == n)
{
printf("%d found at location %d.\n", n, i+1);
break;
}
}
if (i == size)
printf("Not found! %d is not present in the list.\n", n);
}

void binary_search(int array[], int size, int n)


{
int i, first, last, middle;
first = 0;
last = size - 1;
middle = (first+last) / 2;
while (first <= last)
{
if (array[middle] < n)
first = middle + 1;
else if (array[middle] == n)
{
printf("%d found at location %d.\n", n, middle+1);
break;
}
else
last = middle - 1;
middle = (first + last) / 2;
}
if ( first > last )
printf("Not found! %d is not present in the list.\n", n);
}

int main()
{
int a[200], i, j, n, size;
printf("Enter the size of the list:");
scanf("%d", &size);
printf("Enter %d Integers in ascending order\n", size);
for (i = 0; i < size; i++)
scanf("%d", &a[i]);
printf("Enter value to find\n");
scanf("%d", &n);
printf("Sequential search\n");
sequential_search(a, size, n);
printf("Binary search\n");
binary_search(a, size, n); return 0;
}

OUTPUT

RESULT

Thus the C Program to implement different searching techniques – Linear and Binary
search

Ex. No:11.B.1 BUBBLE SORT


AIM:

To write a C program to implement the concept of bubble sort

ALGORITHM:

1: Start.
2: Repeat Steps 3 and 4 for i=1 to 10
3: Set j=1
4: Repeat while j<=n

(A) if a[i] < a[j]


Then interchange a[i] and a[j] [End of if]
(B) Set j = j+1
[End of Inner Loop] [End of Step 1 Outer Loop]
5: Stop.

PROGRAM:

#include<stdio.h>
#include<conio.h>
void main()
{
int n, i, j, temp , a[100];
printf("Enter the total integers you want to enter (make it less than 100):\n");
scanf("%d",&n);
printf("Enter the %d integer array elements:\n",n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(a[j+1]<a[j])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}}}

printf("The sorted numbers are:");


for(i=0;i<n;i++)
{
printf("%3d",a[i]);
}getch();
}

OUTPUT

RESULT:

Thus a C program for the concept of bubble sort was implemented successfully

Ex. No:11.B.2 MERGE SORT


AIM:

To write a C program to implement the concept of merge sort.

ALGORITHM:

1: Start.
2: First you divide the number of elements by 2 and seperate them as two. 3: Divide those
two which are divided by 2.
4: Divide them until you get a single element.
5: Start comparing the starting two pair of elements with each other and place them in
ascending order.
6: When you combine them compare them so that you make sure they are sorted.
7: When all the elements are compared the array will be surely sorted in an ascending order.
8: Stop.

PROGRAM:

#include<stdio.h>
#include<conio.h>
void merge(int [],int ,int ,int );
void part(int [],int ,int );
void main()
{
int arr[30];
int i,size;
printf("\n\t------- Merge sorting method \n\n");
printf("Enter total no. of elements : ");
scanf("%d",&size);
for(i=0; i<size; i++)
{
printf("Enter %d element : ",i+1);
scanf("%d",&arr[i]);
}
part(arr,0,size-1);
printf("\n\t------- Merge sorted elements \n\n");
for(i=0; i<size; i++)
printf("%d ",arr[i]); getch();
}

void part(int arr[],int min,int max)


{
int mid;
if(min<max)
{
mid=(min+max)/2;
part(arr,min,mid);
part(arr,mid+1,max);
merge(arr,min,mid,max);
}}

void merge(int arr[],int min,int mid,int max)


{
int tmp[30];
int i,j,k,m;
j=min;
m=mid+1;
for(i=min; j<=mid && m<=max ; i++)
{
if(arr[j]<=arr[m])
{
tmp[i]=arr[j];
j++;
}
else
{
tmp[i]=arr[m];
m++;
}}
if(j>mid)
{
for(k=m; k<=max; k++)
{
tmp[i]=arr[k];
i++;
}}
else
{
for(k=j; k<=mid; k++)
{
tmp[i]=arr[k];
i++;
}}

for(k=min; k<=max; k++)


arr[k]=tmp[k];
}
OUTPUT

RESULT:

Thus a C program for the concept of merge sort was implemented successfully.
Ex. No:11.B.3 QUICK SORT

AIM:

To write a C program to implement the concept of Quick sort.

ALGORITHM:

1: Start.

2: Choose any element of the array to be the pivot.

3: Divide all other elements (except the pivot) into two partitions.

 All elements less than the pivot must be in the first partition.
 All elements greater than the pivot must be in the second partition.

4: Use recursion to sort both partitions.

5: Join the first sorted partition, the pivot, and the second sorted partition. 6: Stop

PROGRAM:

#include<stdio.h>
#include<conio.h>
void qsort(int arr[20], int fst, int last);
void main()
{
int arr[30];
int i,size;
printf("Enter total no. of the elements : ");
scanf("%d",&size);
printf("Enter total %d elements : \n",size);
for(i=0; i<size; i++)
scanf("%d",&arr[i]);
qsort(arr,0,size-1);
printf("Quick sorted elements are as : \n");
for(i=0; i<size; i++)
printf("%d\t",arr[i]);
getch();
}

void qsort(int arr[20], int fst, int last)


{
int i,j,pivot,tmp;
if(fst<last)
{
pivot=fst;
i=fst;
j=last;
while(i<j)
{
while(arr[i]<=arr[pivot] && i<last)
i++;
while(arr[j]>arr[pivot])
j--;
if(i<j)
{
tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}}
tmp=arr[pivot];
arr[pivot]=arr[j];
arr[j]=tmp;
qsort(arr,fst,j-1);
qsort(arr,j+1,last);
}}

OUTPUT

RESULT:

Thus the C program to implement the concept of Quick sort.


Ex. No: 11 HASHING TECHNIQUES

AIM:

To write a C program to implement hash table

ALGORITHM:

1. Create a structure, data (hash table item) with key and value as data.

2. Now create an array of structure, data of some certain size (10, in this case). But, the
size of array must be immediately updated to a prime number just greater than initial array
capacity (i.e 10, in this case).

3. A menu is displayed on the screen.

4. User must choose one option from four choices given in the menu

5. Perform all the operations

6. Stop the program

PROGRAM:

#include<stdio.h>
#include<stdlib.h>
struct data
{
int key;
int value;
};

struct data *array;


int capacity = 10;
int size = 0;
/* this function gives a unique hash code to the given key */
int hashcode(int key)
{
return (key % capacity);
}

/* it returns prime number just greater than array capacity */


int get_prime(int n)
{
if (n % 2 == 0)
{
n++;
}
}
for (; !if_prime(n); n += 2);
return n;

/* to check if given input (i.e n) is prime or not */


int if_prime(int n)
{
int i;

if ( n == 1||n == 0)
{
return 0;
}

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


{
if (n % i == 0)
{
return 0;
}}
return 1;
}

void init_array()
{
int i;
capacity = get_prime(capacity);
array = (struct data*) malloc(capacity * sizeof(struct data));
for (i = 0; i < capacity; i++)
{
array[i].key = 0;
array[i].value = 0;
}}

/* to insert a key in the hash table */


void insert(int key)
{
int index = hashcode(key);
if (array[index].value == 0)
{
/* key not present, insert it */
array[index].key = key;
array[index].value = 1;
size++;
printf("\n Key (%d) has been inserted \n", key);
}
else if(array[index].key == key)
{

/* updating already existing key */


printf("\n Key (%d) already present, hence updating its value \n", key);
array[index].value += 1;
}
else
{
/* key cannot be insert as the index is already containing some other key*/
printf("\n ELEMENT CANNOT BE INSERTED \n");
}}

/* to remove a key from hash table */


void remove_element(int key)
{
int index= hashcode(key);
if(array[index].value == 0)
{
printf("\n This key does not exist \n");
}
else
{
array[index].key = 0;
array[index].value = 0;
size--;
printf("\n Key (%d) has been removed \n", key);
}}

/* to display all the elements of a hash table */


void display()
{
int i;
for (i = 0; i < capacity; i++)
{
if (array[i].value == 0)
{
printf("\n Array[%d] has no elements \n");
}
else
{
printf("\n array[%d] has elements -:\n key(%d) and value(%d) \t", i, array[i].key,
array[i].value);
}}}

int size_of_hashtable()
{
return size;
}
void main()
{

int choice, key, value, n, c;


init_array();
do
{
printf("\n Implementation of Hash Table in C \n\n");
printf("MENU-: \n1.Inserting item in the Hash Table"
"\n2.Removing item from the Hash Table" "\n3.Check the size of Hash Table"
"\n4.Display a Hash Table" "\n\n Please enter your choice -:");
scanf("%d", &choice);
switch(choice)
{
case 1:
printf("Inserting element in Hash Table\n");
printf("Enter key -:\t");
scanf("%d", &key);
insert(key);
break;

case 2:

printf("Deleting in Hash Table \n Enter the key to delete-:");


scanf("%d", &key);
remove_element(key);
break;

case 3:

n = size_of_hashtable();
printf("Size of Hash Table is-:%d\n", n);
break;

case 4:
display();
break;

default:
printf("Wrong Input\n");
}

printf("\n Do you want to continue-:(press 1 for yes)\t");


scanf("%d", &c);
}while(c == 1);

getch();
}
OUTPUT

RESULT:

Thus the C program to implemented Hash Table has been


executed successfully.

You might also like