0% found this document useful (0 votes)
18 views126 pages

DS LM

The document is a lab manual for the Data Structures and Algorithms course for second-year EEE students at Rajalakshmi Engineering College. It includes various exercises on implementing data structures such as stacks, queues, linked lists, trees, and algorithms like Dijkstra's and Prim's. Each exercise provides aims, algorithms, coding examples in C, and expected outputs.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
18 views126 pages

DS LM

The document is a lab manual for the Data Structures and Algorithms course for second-year EEE students at Rajalakshmi Engineering College. It includes various exercises on implementing data structures such as stacks, queues, linked lists, trees, and algorithms like Dijkstra's and Prim's. Each exercise provides aims, algorithms, coding examples in C, and expected outputs.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 126

Data structures and algorithms Lab manual for II year EEE

Department of Information Technology

LAB MANUAL

131352 – Data Structures and Algorithm Lab


(III Semester EEE)

Prepared by,

B.M.Gouthami(Lecturer /IT)

RAJALAKSHMI ENGINEERING COLLEGE


Rajalakshmi Nagar, Thandalam, Chennai – 602 105

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

INDEX
1. Array Implementation Of Stack

2. Application Of Stack – Conversion Of Infix To Postfix

3. Implementation Of Linear Queue Using Arrays

4. Array Implementation Of Circular Queue

5. Linked List Implementation Of Stack

6. Singly linked list – Linked list implementation

7. Doubly linked list – Linked list implementation

8. Polynomial Manipulation

9. Tree Traversals

10. Expression Tree

11. Priority Queue Using Heap

12. Hashing Technique

13. Dijkstra’s Algorithm

14. Back tracking algorithm – knap sack problem

15. Insertion in AVL trees.

16. Perform topological sort on a directed graph to decide if it is acyclic.

17. Prim's algorithms

18. Branch and bound algorithm for traveling salesperson problem

19. Randomized algorithm.

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Ex. no.: 1

Date :

ARRAY IMPLEMENTATION OF STACK


Aim
To write a C-program to implement stack using array data structure.
And perform the following stack operations
1. POP
2. PUSH
3. PEEP

Algorithm
STEP 1:Start
STEP 2:Initialize stack, will=1,i, num
STEP 3:Add element in stack
PUSH(S,TOP,X)
3.a. [Check overflow condition]
If(TOP>=N) then
Write(“Stack is full”)
3.b. [Insert element]
[Increment TOP]
TOP <- TOP+1
S[TOP]<- X
3.c. [Finish the process]
STEP 4: Delete element in stack
POP(S,TOP)
4.a. [Check for underflow condition]
If(TOP <- 0) then
Write(“Stack is empty”)

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

4.b. [Delete element]


[Decrement TOP]
TOP<- TOP-1
Delete S[TOP+1]
4.c.[Finish the process]
STEP 5:Stop
Coding:

#include<stdio.h>
#include<conio.h>
#define size 10
int stack[size],top=0,b;
int res;
void push();
void pop();
void display();
void main()
{
int c;
clrscr();
printf("\n1.Push\n2.Pop\n3.Display");
do
{
printf("\n\nEnter your Choice :: ");
scanf("%d",&c);
switch(c)
{
case 1:

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

push();
break;
case 2:
pop();
break;
case 3:
printf("\n\nContents of stack is \t");
display();
break;
default:
printf("\nInvalid Choice......");
exit(0);
}
}while(c<4);
getch();
}
void push()
{
if(top>=size)
{
printf("\nStack Overflow");
return;
}
else
{
printf("\nEnter the number to be pushed into the stack :: ");
scanf("%d",&b);
top++;

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

stack[top]=b;
printf("\nNumber pushed is %d",stack[top]);
return;
}
}
void pop()
{
if(top==0)
{
printf("\nStack Underflow");
return;
}
else
{
res=stack[top];
top--;
printf("\nDeleted element is %d",res);
return;
}
}
void display()
{
int i;
if(top==0)
{
printf("\nStack Underflow");
return;
}

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

for(i=top;i>0;i--)
printf("%d , ",stack[i]);
}

Output:

1.Push
2.Pop
3.Display

Enter your Choice :: 1

Enter the number to be pushed into the stack :: 3

Number pushed is 3

Enter your Choice :: 1

Enter the number to be pushed into the stack :: 5

Number pushed is 5

Enter your Choice :: 3

Contents of stack is 5,3,

Enter your Choice :: 2

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Deleted element is 5

Enter your Choice :: 3

Contents of stack is 3,

Enter your Choice :: 8

Invalid Choice......

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Ex. No.:2
Date :

CONVERSION OF INFIX EXPRESSION TO POSTFIX


Aim
To write a C-program to convert the given infix expression to its postfix format.

Algorithm

STEP 1: Start
STEP 2: Initialize the stack.
STEP 3: While (INSTR!= NULL)
STEP 4: CH= get the character from INSTR.
STEP 5: If( CH= = operand) then
append CH int POSTSTR
else if(CH = = ‘(‘) then
push CH into stack
else if(CH = =’)’) then
pop the data from the stack and append the data into POSTSTR until we get
‘(‘ from the stack
else
while(precedence (TOP) >= precedence (CH))
pop the data from stack and append the data into POSTSTR.
[End of while structure]
[End of if structure]

STEP 6: Push CH into the stack.


STEP 7: [End of second while structure]

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

STEP 8: pop all the data from stack and append data into POSTSTR.
STEP 9: Stop
Coding:
#include<stdio.h>
#include<conio.h>
int stack[20],top=0;
char inf[40],post[40];
void push(int);
void postfix();
char pop();
void main(void)
{
clrscr();
printf("\t\t\t****INFIX TO POSTFIX****\n\n");
printf("Enter the infix expression :: ");
scanf("%s",inf);
postfix();
getch();
}
void postfix()
{
int i,j=0;
for(i=0;inf[i]!=NULL;i++)
{
switch(inf[i])
{
case '+':
while(stack[top]>=1)

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

post[j++]=pop();
push(1);
break;
case '-':
while(stack[top]>=1)
post[j++]=pop();
push(2);
break;
case '*':
while(stack[top]>=3)
post[j++]=pop();
push(3);
break;
case '/':
while(stack[top]>=3)
post[j++]=pop();
push(4);
break;
case '^':
while(stack[top]>=4)
post[j++]=pop();
push(5);
break;
case '(':
push(0);
break;
case ')':
while(stack[top]!=0)

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

post[j++]=pop();
top--;
break;
default:
post[j++]=inf[i];
}
}
while(top>0)
post[j++]=pop();
printf("\nPostfix Expression is :: %s",post);
}
void push(int ele)
{
top++;
stack[top]=ele;
}
char pop()
{
char e;
e=stack[top];
top--;
switch(e)
{
case 1:
e='+';
break;
case 2:
e='-';

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

break;
case 3:
e='*';
break;
case 4:
e='/';
break;
case 5:
e='^';
break;
}
return(e);
}

Output:

Enter the infix expression :: (a+b)/(c*d)

Postfix Expression is :: ab+cd*/

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Manual Calculation

SE EXPRESSION STACK RESULT FIELD


( (

A A

+ +,( A

B +,( AB

) ),( AB+

/ / AB+

( (,/

C (,/ AB+C

- -,(,/ AB+C

D -,(,/ AB+CD

+ +,(,/ AB+CD-

E +,(,/ AB+CD-E

) ),+,(,/ AB+CD-E+

+ +,/ AB+CD-E+/

F + AB+CD-E/F

- - AB+CD-E/F+

G - AB+CD-E/F+G

AB+CD-E/F+G-

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Ex.no.3
Date:

IMPLEMENTATION OF LINEAR QUEUE USING ARRAYS

Aim
To write a C-program to implement linear queue data structure using arrays.

Algorithm
STEP 1: Start
STEP 2: [Include all header files]
STEP 3: [Declare the variables]
STEP 4: [If n->1 call the function Enqueue( )]
STEP 5: [If n->2 call the function Dequeue( )]
STEP 6: [If n->3 call the function Peep( )]
STEP 7: [If n->4 call the function Size( )]
STEP 8: [If n->5 call the function View( )]
STEP 9: [else Exit( )]
STEP 10: Stop

Algorithm for Enqueue( )


STEP 1: If[front= =rear]
Initialize front=rear=0
STEP 2: else rear=(rear+1)% qsize
Set queue[rear] =value
[return]
Algorithm for Dequeue( )
STEP 1: If[front = =rear]
1.1: temp=queue[front]

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

1.2: Initialize front=rear=-1


STEP 2:else
2.1: front=(front+1)% qsize
[return]

Algorithm for Peep( )


STEP 1:If [front= =rear]
STEP 1.1: temp=queue[front]
[return]

Algorithm for Size( )

STEP 1:If [front= =rear]


1.1: Set f=front
1.2: Set count=1
STEP 2: If [front!=rear]
2.1: front=(front+1)%qsize
2.2: set count=count+1
[return]

Algorithm for View( )

STEP 1: If [front = =rear]


Write (“Queue is empty”)
STEP 2: else
[display elements]

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Coding:
#include<stdio.h>
#include<conio.h>
#define size 15
int queue[size],front=0,rear=0,b;
int res;
void enqueue();
void dequeue();
void display();
void main()
{
int c;
clrscr();
printf("\n1.Insertion\n2.Deletion\n3.Display");
do
{
printf("\n\nEnter your Choice :: ");
scanf("%d",&c);
switch(c)
{
case 1:
enqueue();
break;
case 2:
dequeue();
break;

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

case 3:
printf("\n\nContents of queue is \t");
display();
break;
default:
printf("\nInvalid Choice......");
exit(0);
}
}while(c<4);
getch();
}
void enqueue()
{
if(rear>=size)
{
printf("\nOverflow");
return;
}
else
{
printf("\nEnter the number to be entered :: ");
scanf("%d",&b);
rear++;
queue[rear]=b;
printf("\nNumber pushed is %d",queue[rear]);
if(front==0)
front=1;
return;

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

}
}
void dequeue()
{
if(front==0)
{
printf("\nUnderflow");
return;
}
else
{
res=queue[front];
if(front==rear)
{
front=0;
rear=0;
}
else
front++;
}
printf("\nDeleted element is %d",res);
return;
}
void display()
{
int i;
if(front==0)
{

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

printf("\nUnderflow");
return;
}
for(i=front;i<=rear;i++)
printf("%d , ",queue[i]);
}

Output:

1.Insertion
2.Deletion
3.Display

Enter your Choice :: 1

Enter the number to be entered :: 12

Number pushed is 12

Enter your Choice :: 1

Enter the number to be entered :: 2

Number pushed is 2

Enter your Choice :: 3

Contents of queue is 12 , 2 ,

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Enter your Choice :: 2

Deleted element is 12

Enter your Choice :: 3

Contents of queue is 2,

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Ex.No.4
Date:

ARRAY IMPLEMENTATION OF CIRCULAR QUEUE


Aim
To write a c program using arrays for implementing circular queue data structure.

Algorithm

Step 1: [Include All Header Files Required]


Step 2: [Define the array size as 5 and declare front and rear pointers]
Step 3: Declare the functions isEmpty() , isFull(), enqueue(), size(),dequeue(), peek() and
view()]
Step 4: [Call the functions]
Choice :1 CALL enqueue()
Choice :2 CALL deenqueue()
Choice :3 CALL peek()
Choice :4 CALL size()
Choice :5 CALL view()

Algorithm for isEmpty( )

Step 1: [Check for underflow]


If ( front -1 and rear -1 )
RETURN -1
Step 2: Else RETURN 0
[Finish the process]

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Algorithm for isFull( )

Step 1: [Check for overflow]


If (= (rear+1)% qsize front )
RETURN -1
Step 2: Else RETURN 0
[Finish the process]

Algorithm for Enqueue( )

STEP 1: If[front= =rear]


Initialize front=rear=0
STEP 2: else rear=(rear+1)% qsize
Set queue[rear] =value
[return]

Algorithm for Dequeue( )

STEP 1: If[front = =rear]


1.1: temp=queue[front]
1.2: Initialize front=rear=-1
STEP 2:else
2.1: front=(front+1)% qsize
[return]

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Algorithm for Peek( )

STEP 1:If [front= =rear]


STEP 1.1: temp=queue[front]
[return]
Algorithm for Size( )

STEP 1:If [front= =rear]


1.1: Set f=front
1.2: Set count=1
STEP 2: If [front!=rear]
2.1: front=(front+1)%qsize
2.2: set count=count+1
[return]

Algorithm for View( )

STEP 1: If [front = =rear]


Write (“Queue is empty”)
STEP 2: else
[display elements]

Coding:
#include<stdio.h>
#include<conio.h>
#define qsize 5

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

int queue[qsize],front=-1,rear=-1;
void enqueue(int value);
void dequeue();
void view();
void main()
{
int c,data,item;
clrscr();
printf("\n1.ENQUEUE\n2.DEQUEUE\n3.VIEW");
while(1)
{
printf("\n\nEnter your Choice :: ");
scanf("%d",&c);
switch(c)
{
case 1:
printf("\nEnter the element::");
scanf("%d",&data);
enqueue(data);
break;
case 2:
dequeue();
break;
case 3:
printf("\n\nContents of circular queue is \t");
view();
break;
default:

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

printf("\nInvalid Choice......");
exit(0);
}
}
}
int isfull()
{
extern int queue[],front,rear;
if(front==(rear+1)%qsize)
return(1);
else
return(0);
}
int isempty()
{
extern int queue[],front,rear;
if((front==-1)&&(rear==-1))
return(1);
else
return(0);
}
void enqueue(int value)
{
extern int queue[],front,rear;
if(isfull())
{
printf("\nOverflow");
return;

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

}
else
{
if(isempty())
front=rear=0;
else
rear=(rear+1)%qsize;
queue[rear]=value;
}
}
void dequeue()
{
int value;
extern int queue[],front,rear;
if(isempty())
printf("\n\nQueue is Empty");
else
{
value=queue[front];
printf("\nDequeue value is %d",value);
}
if(front==rear)
{
front=-1;
rear=-1;
}
else
front=(front+1)%qsize;

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

}
void view()
{
extern int queue[],front,rear;
int f;
if(isempty())
printf("\nUnderflow");
else
{
printf("\nFront-->");
for(f=front;f!=rear;f=(f+1)%qsize)
printf("%d ---> ",queue[f]);
printf("%d <--Rear",queue[f]);
}
if(isfull())
printf("\nQueue is full");
}

Output

1.ENQUEUE
2.DEQUEUE
3.VIEW

Enter your Choice :: 1

Enter the element::2

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Enter your Choice :: 3

Contents of circular queue is


Front-->2 <--Rear

Enter your Choice :: 1

Enter the element::3

Enter your Choice :: 1

Enter the element::5

Enter your Choice :: 3

Contents of circular queue is


Front-->2 ---> 3 ---> 5 <--Rear

Enter your Choice :: 2

Dequeue value is 2

Enter your Choice :: 3

Contents of circular queue is


Front-->3 ---> 5 <--Rear

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Enter your Choice :: 4

Invalid Choice......

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Ex.no.:5
Date :

LINKED LIST IMPLEMENTATION OF STACK

Aim
To demonstrate linked list implementation of stack using a C program.

Algorithm

Step 1: [Include all the necessary header files]


Step 2: [Declare the Variables]
Step 3: Read operator
Step 4: IF opt 1 THEN
Step 4.1: READ n
Step 4.2: WHILE (n n-1)
Step 4.2.1: READ d
Step 4.2.2: CALL INSERT( start , d)
Step 4.3: [End of while Structure]
Step 5: IF opt 2 THEN
Step 5.1: READ x
Step 5.2: CALL del(start,x)
Step 6: IF opt 3 THEN
Step 6.1: READ x
Step 6.2: CALL FIND
Step 7: IF opt 4 THEN
Step 7.1: READ x
Step 7.2: CALL FINDPREVIOUS

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Step 8: IF opt 5 THEN


Step 8.1: READ x
Step 8.2: CALL FINDNEXT(start, x)
Step 9: IF opt 6 THEN
CALL len(Start)
Step 10: IF opt 7 THEN
CALL printlist(Start)
Step 10: IF opt 8 THEN
CALL erase (Start)
Step 12: [End of Main]

Algorithm For Find(struct node*p, int x, int *pos)


Step 1: temp p
Step 2 :*pos 1
Step 3: IF ( TEMP NULL) THEN
RETURN NULL
ELSE
WHILE ( TEMP!= NULL && TEMP DATA!= X)
ASSIGN 1 TO *POS+1 AND TEMP’S LLINK FIELD TO TEMP
RETURN THE TEMP

Algorithm for Previous (struct node*p, int x)


Step 1: temp p
Step2: IF ( TEMP NULL) THEN
RETURN NULL
ELSE
WHILE (TEMP LINK != NULL && TEMP LINK DATA!= X)

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

ASSIGN TEMP’S LINK FIELD TO TEMP


RETURN THE TEMP

Algorithm For Find next(struct node*p, int x)

Step 1: temp p
Step2: IF ( TEMP NULL) THEN
RETURN NULL
ELSE
WHILE (TEMP LINK != NULL && TEMP DATA!= X)
ASSIGN TEMP’S LLINK FIELD TO TEMP
RETURN THE TEMP’S LINK FIELD

Coding:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
push();
void pop();
void display();
struct node
{
int data;
struct node *next;
}*top=NULL;
void main()

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

{
int ch;
clrscr();
printf("\n\n1.Push\n\n2.Pop\n\n3.Display");
do
{
printf("\n\nEnter your Choice :: ");
scanf("%d",&ch);
switch(ch)
{
case 1:
push();
break;
case 2:
pop();
break;
case 3:
printf("\n\nContents of stack :: \t");
display();
break;
default:
printf("\n\nInvalid Choice......");
getch();
exit(0);
}
}while(ch<4);
getch();
}

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

push()
{
int x;
struct node *newnode;
newnode=malloc(sizeof(struct node));
printf("\n\nEnter the number to be pushed into the stack :: ");
scanf("%d",&x);
newnode->data=x;
if(top==NULL)
{
newnode->next=top;
top=newnode;
}
else
{
newnode->next=top;
top=newnode;
}
printf("\n\nNumber pushed is %d",x);
return(x);
}
void pop()
{
struct node *t;
if(top==NULL)
printf("\n\nStack Underflow");
else
{

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

t=top;
top=top->next;
printf("\nDeleted element is %d",t->data);
free(t);
}
getch();
}
void display()
{
struct node*i;
for(i=top;i!=NULL;i=i->next)
printf("%d , ",i->data);
if(top==NULL)
printf("Stack is empty");
getch();
}

Output:

1.Push
2.Pop
3.Display

Enter your Choice :: 1

Enter the number to be pushed into the stack :: 5

Number pushed is 5

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Enter your Choice :: 1

Enter the number to be pushed into the stack :: 10

Number pushed is 10

Enter your Choice :: 3

Contents of stack :: 10 , 5 ,

Enter your Choice :: 2

Deleted element is 10

Enter your Choice :: 3

Contents of stack :: 5 ,

Enter your Choice :: 5

Invalid Choice......

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Ex.no.:6
Date :

LINKED LIST IMPLEMENTATION OF SINGLY LINKED LIST


Aim:
To write a program to implement singly linked list using linked list.
Algorithm:
Step 1: initialize the list as null
Step 2: Display linked list operations insert, delete and display the result.
Step 3: If choice is 1 the read element to be inserted and call the insert function
Step 4: If choice is 2 then read element to be deleted and call the delete function
Step 5: If choice is 3 then call display function
Step 6: If choice is default the exit the program.
Program:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void insert(int x);
void deletion(int x);
void display();
struct node
{
int element;
struct node *next;
}*list=NULL,*p;
struct node *find(int s)
{
p=list->next;

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

while(p!=NULL && p->element!=s)


p=p->next;
return p;
}
struct node *findprevious(int s)
{
p=list;
while(p->next!=NULL && p->next->element!=s)
p=p->next;
return p;
}
void main()
{
int data,ch;
clrscr();
printf("\n\n1.INSERT\n\n2.DELETE\n\n3.DISPLAY");
do
{
printf("\n\nEnter your Choice :: ");
scanf("%d",&ch);
switch(ch)
{
case 1:
printf("\n\nEnter the element to be inserted::");
scanf("%d",&data);
insert(data);
break;
case 2:

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

printf("\n\nEnter the element to be deleted::");


scanf("%d",&data);
deletion(data);
break;
case 3:
display();
break;
default:
printf("\n\nInvalid Choice......");
getch();
exit(0);
}
}while(ch<4);
}
void insert(int x)
{
struct node *newnode;
int pos;
newnode=malloc(sizeof(struct node));
newnode->element=x;
if(list->next==NULL)
{
list->next=newnode;
newnode->next=NULL;
}
else
{
printf("\n\nEnter the value of the element to be inserted ::");

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

scanf("%d",&pos);
p=find(pos);
newnode->next=p->next;
p->next=newnode;
}
}
void deletion(int x)
{
struct node *temp;
temp=malloc(sizeof(struct node));
p=findprevious(x);
if(p->next!=NULL)
{
temp=p->next;
p->next=temp->next;
printf("\n\nThe deleted element is %d",temp->element);
free(temp);
}
else
printf("\n\nElement is not found in the list!!!");
}
void display()
{
if(list->next==NULL)
printf("\n\nList is empty!!!");
else
{
p=list->next;

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

printf("\n\nThe contents of the list are\n::");


while(p!=NULL)
{
printf("%d ->",p->element);
p=p->next;
}
}
}

Output:

1.INSERT
2.DELETE
3.DISPLAY

Enter your Choice ::1

Enter the element to be inserted::2

Enter your Choice ::1

Enter the element to be inserted::5

Enter the value of the element to be inserted ::2

Enter your Choice :: 3

The contents of the list are::2 ->5 ->NULL

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Enter your Choice :: 1

Enter the element to be inserted::7

Enter the value of the element to be inserted ::2

Enter your Choice :: 3

The contents of the list are ::2 ->7 ->5 ->NULL

Enter your Choice :: 2

Enter the element to be deleted::5

The deleted element is 5

Enter your Choice :: 3

The contents of the list are ::2 ->7 ->NULL

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Ex.no.7
Date:

DOUBLY LINKED LIST – LINKED LIST IMPLEMENTATION

Aim:
To write a program to implement doubly linked list using linked list.
Algorithm:
Step 1: Declare header and pointer variables
Step 2: Display the choices
Step 3: If choice is 1 the get the element to be inserted in beginning and call ins_beg function.
Step 4: If choice is 2 the get the element to be inserted in the end and call the ins_end function
Step 5: If choice is 3 then get the element to be deleted and call deletion function.
Step 6: If choice is 4 then call display duncation
Step 7: If choice is default the exit the program
Step 8: Terminate the program execution.
Program:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void display(struct node *first);
struct node
{
int data;
struct node *lptr,*rptr;
}*head;
struct node *ins_beg(int x,struct node *first)
{
struct node *new1,*cur,*prev;

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

new1=malloc(sizeof(struct node));
if(first==NULL)
{
new1->data=x;
new1->lptr=NULL;
new1->rptr=NULL;
return new1;
}
else
{
new1->data=x;
new1->lptr=NULL;
new1->rptr=first;
return new1;
}
}
struct node *ins_end(int x,struct node *first)
{
struct node *new1,*cur,*prev;
new1=malloc(sizeof(struct node));
if(first==NULL)
{
new1->data=x;
new1->lptr=NULL;
new1->rptr=NULL;
return new1;
}
else

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

{
cur=first;
while(cur->rptr!=NULL)
{
prev=cur;
cur=cur->rptr;
}
cur->rptr=new1;
new1->data=x;
new1->lptr=cur;
new1->rptr=NULL;
return first;
}
}
struct node *deletion(struct node *first,int del)
{
struct node *prev,*cur;
cur=first;
if(first==NULL)
{
printf("\n\nNo data present!!!");
getch();
}
else if(first->data==del)
{
printf("\n\nData %d is deleted",first->data);
first=first->rptr;
getch();

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

return first;
}
else
{
while(cur->rptr!=NULL && cur->data!=del)
{
prev=cur;
cur=cur->rptr;
}
if(cur->rptr==NULL && cur->data!=del)
printf("\n\nData is not present!!!");
else if(cur->rptr!=NULL && cur->data==del)
{
prev->rptr=cur->rptr;
(cur->rptr)->lptr=prev;
printf("\n\nData % d is deleted",cur->data);
}
else if(cur->rptr==NULL && cur->data==del)
{
prev->rptr=NULL;
printf("\n\nData %d is deleted:",cur->data);
}
getch();
return first;
}
}
void main()
{

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

int x,ch,del;
head=NULL;
clrscr();
printf("\n1.Insert in Begining\n2.Insert in the End\n3.Delete\n4.Display");
while(1)
{
printf("\n\nEnter your Choice :: ");
scanf("%d",&ch);
switch(ch)
{
case 1:
printf("\n\nEnter the element to be inserted::");
scanf("%d",&x);
head=ins_beg(x,head);
break;
case 2:
printf("\n\nEnter the element to be inserted::");
scanf("%d",&x);
head=ins_end(x,head);
break;
case 3:
printf("\n\nEnter the element to be deleted::");
scanf("%d",&del);
head=deletion(head,del);
break;
case 4:
display(head);
break;

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

default:
printf("\n\nInvalid Choice......");
getch();
exit(0);
}
}
}
void display(struct node *first)
{
struct node *temp;
temp=first;
if(temp==NULL)
printf("\n\nList is empty!!!");
while(temp!=NULL)
{
printf("%d ->",temp->data);
temp=temp->rptr;
}
getch();
}

Output:
1.Insert in Begining
2.Insert in the End
3.Delete
4.Display

Enter your Choice :: 1

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Enter the element to be inserted::2

Enter your Choice :: 1

Enter the element to be inserted::3

Enter your Choice :: 4


3 ->2 ->

Enter your Choice :: 2

Enter the element to be inserted::1

Enter your Choice :: 2

Enter the element to be inserted::5

Enter your Choice :: 4


3 ->2 ->1 ->5 ->

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Enter your Choice :: 3


Enter the element to be deleted::1
Data 1 is deleted
Enter your Choice :: 4
3 ->2 ->5 ->

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Ex.no.:8
Date :
POLYNOMIAL MANUPULATION
Aim
To implement polynomial manipulation using doubly linked lists.
Algorithm
POLYADD(POLY1: POLY2:POLY)
HEAD:POLY
Step 1: Assign HEAD+=NULL
Step2: While (POLY !=null)
Step3: HEAD=INSERTNODE(HEAD,COPYNODE,(POLY1,1))
Step4: POLY1=POLY1NEXT
Step5: [End of Step2 while structure]
Step6: While(POLY2 1=NULL)
Step7: HEAD =INSERTNODE(HEAD,COPYNODE(POLY2,1))
Step8: POLY2=POLY2NEXT
Step9: [End of Step 6 while Structure]
Step10: Return HEAD
END POLYADD()

Algorithm for polynomial subtraction

POLYSUB(POLY1:POLY, POLY2:POLY)
HEAD:POLY
Step1: Assign HEAD=NULL
Step2: While(POLY1!=NULL)
Step3: HEAD=INSERTNODE(HEAD,COPYNODE(POLY1,1))
Step4: POLY1=POLY1 NEXT

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Step5: [End of Step2 while Structure]


Step6:While(POLY2!=NULL)
Step7: HEAD=INSERTNODE(HEAD,COPYNODE(POLY2,-1))
Step8: POLY2=POLY2NEXT
Step9: [End of Step 6 While Structure]
Step10: Return HEAD
END POLYSUB()

Coding:
#include<malloc.h>
#include<conio.h>
struct link
{
int coeff;
int pow;
struct link *next;
};
struct link *poly1=NULL,*poly2=NULL,*poly=NULL;
void create(struct link *node)
{
char ch;
do
{
printf("\nEnter the coefficient :");
scanf("%d",&node->coeff);
printf("\nEnter the power :");
scanf("%d",&node->pow);
node->next=(struct link *)malloc(sizeof(struct link));

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

node=node->next;
node->next=NULL;
printf("\nContinue??? (Y/N) :");
ch=getch();
}while(ch=='y' || ch=='Y');
}
void display(struct link *node)
{
while(node->next!=NULL)
{
printf("%dx^%d",node->coeff,node->pow);
node=node->next;
if(node->next!=NULL)
printf(" + ");
}
}
void polyadd(struct link *poly1,struct link *poly2,struct link *poly)
{
while(poly1->next && poly2->next)
{
if(poly->pow > poly2->pow)
{
poly->pow=poly1->pow;
poly->coeff=poly1->coeff;
poly1=poly1->next;
}
else if(poly1->pow < poly2->pow)
{

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

poly->pow=poly2->pow;
poly->coeff=poly2->coeff;
poly2=poly2->next;
}
else
{
poly->pow=poly1->pow;
poly->coeff=poly1->coeff+poly2->coeff;
poly1=poly1->next;
poly2=poly2->next;
}
poly->next=(struct link *)malloc(sizeof(struct link));
poly=poly->next;
poly->next=NULL;
}
while(poly1->next||poly2->next)
{
if(poly1->next)
{
poly->pow=poly1->pow;
poly->coeff=poly1->coeff;
poly1=poly1->next;
}
if(poly2->next)
{
poly->pow=poly2->pow;
poly->coeff=poly2->coeff;
poly2=poly2->next;

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

}
poly->next=(struct link *)malloc(sizeof(struct link));
poly=poly->next;
poly->next=NULL;
}
}
void main()
{
poly1=(struct link *)malloc(sizeof(struct link));
poly2=(struct link *)malloc(sizeof(struct link));
poly=(struct link *)malloc(sizeof(struct link));
clrscr();
printf("\nEnter the first polynomial::");
create(poly1);
printf("\nFirst polynomial is :: \n");
display(poly1);
printf("\nEnter the second polynomial::");
create(poly2);
printf("\nSecond polynomial is :: \n");
display(poly2);
polyadd(poly1,poly2,poly);
printf("\nAddition of the two polynomials::");
display(poly);
getch();
}

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Output

Enter the first polynomial::

Enter the coefficient :5

Enter the power :3

Continue??? (Y/N) :Y
Enter the coefficient :3

Enter the power :2

Continue??? (Y/N) :
First polynomial is ::
5x^3 + 3x^2
Enter the second polynomial::
Enter the coefficient :7

Enter the power :3

Continue??? (Y/N) :
Second polynomial is ::
7x^3
Addition of the two polynomials::12x^3 + 3x^2

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Ex.no.:9
Date :

BINARY SEARCH TREE


Aim
To write a C program to implement a stack using binary search tree.
Algorithm
1. [Include all the necessary header files.]
2. [Declare the structure with all necessary variables.]
3. Read x;
4. Call INORDER().
5. Call PREORDER().
6. Call POSTORDER().
7. Call display().
8.

Algorithm For INSERT(P,X)

1. If (pNULL)
Create P
P<-datax.
P->lchild PrchildNULL
Else
2.1 while(TEMP!=NULL)
2.2 Temp2Temp1
2.3 If(temp1datax)
2.4 Else Temp1Temp1rchild
2.5 [End of while structure]
2.6 If(temp2datax)
2.7 Temp 2Temp2lchild

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

2.8 Temp 2datax


2.9 Temp2dataslchildtemp2rchild Null
2.10 Else
2.11 Temp 2Temp2Temp2rchildnull
2.12 Temp2datax
2.13 Temp 2lchildTemp 2rchildnull
2.14 [Return P]

Algorithm For INORDER(p)

1.If(p!=Null)
2. CALL INORDER (pxdhild)
3. WRITE(Ddata)
4.CALL INORDER (prchild)
5. [End the function]

Algorithm for PREORDER

1. If (pl=NULL)
2. WRITE (PData)
3. CALL PREORDER (PlCHILD)
4. CALL PREORDER (P Rchild)
5. [END OF FUNTION]

Algorithm for POSTORDER


1. If (P!=NULL)
2. Call POSTORDER (Plchild)
3. Call POSTORDER (Prchild)
4. Write (Pdata)

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

5. [End of function]

Algorithm for COUNT


If (P==NULL)

1. Return 0
2. Else
3. [Return (1+count(Plchild)+call count(Prchild)) ]
4. Algorithm for postorder

Algorithm for DISPLAY


If (T!=NULL)
1. X(lm+rm)/2
2. Call goto xy (x,4*y)
3. Write (t--.data)
4. Call display (tlchild, lm,x, l+1)
5. Call display (trchild, x, rm,l+1)
6. [END THE FUNCTION}
Algorithm for SEARCH
1. while(temp!=NULL)
2. If (tempdatat)
[Return temp]
3.If (Tempdata>x)
Temptemplchild
4. ELSE
Temptemprchild
5. [RETURN NULL]
CODING
#include<stdio.h>
#include<conio.h>

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

#include<stdlib.h>
#define NULL 0
struct treenode
{ int element;
struct treenode *left;
struct treenode *right;
};
typedef struct treenode *position,*searchtree;
searchtree insert(int x,searchtree t)
{
if(t==NULL)
{
t=(struct treenode*)malloc(sizeof(struct treenode));
if(t==NULL)
exit(0);
else
{
t->element=x;
t->left=t->right=NULL;
}
}
else
if(x<t->element)
t->left=insert(x,t->left);
else
if(x>t->element)
t->right=insert(x,t->right);
return t;

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

}
position findmin(searchtree t)
{
if(t==NULL)
return NULL;
else
if(t->left==NULL)
return t;
else
return findmin(t->left);
}
position findmax(searchtree t)
{
if(t==NULL)
return NULL;
else
if(t->right==NULL)
return t;
else
return findmax(t->right);
}

searchtree rem(int x,searchtree t)


{
position temp;
if(t==NULL)

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

printf("\nElement not found");


else
if(x<t->element)
t->left=rem(x,t->left);
else
if(x>t->element)
t->right=rem(x,t->right);
else
if(t->left&&t->right)
{
temp=findmin(t->right);
t->element=temp->element;
t->right=rem(t->element,t->right);
}
else
{
temp=t;
if(t->left==NULL)
t=t->right;
else
if(t->right==NULL)
t=t->left;
free(temp);
}
return t;
}

void intrav(searchtree head)

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

{
if(head==NULL)
return;
if(head->left!=NULL)
intrav(head->left);
printf("%d\t",head->element);
if(head->right!=NULL)
intrav(head->right);
}

void main()
{
int n,i,dat,ch;
searchtree t=NULL;
position node;
clrscr();
printf("Enter no of elements:\n");
scanf("%d",&n);
printf("Enter the elements:\n");
for(i=1;i<=n;i++)
{
scanf("%d",&dat);
t=insert(dat,t);
}
intrav(t);
do
{
printf("\n\n");

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

printf("\n ****MENU****\n");
printf("\nEnter 1 -> Insert a node\n");
printf("\n 2 -> Delete a node\n");
printf("\n 3 -> Find Minimum\n");
printf("\n 4 -> Find Maximum\n");
printf("\n 5 -> Display(Inorder Traversal\n");
printf("\n 6 -> Exit\n");
printf("\nEnter your choice:");
scanf("%d",&ch);
switch(ch)
{
case 1:printf("\nEnter the element to be inserted:");
scanf("%d",&dat);
t=insert(dat,t);
break;
case 2:printf("\n Enter the node to be deleted:");
scanf("%d",&dat);
t=rem(dat,t);
break;
case 3:node=findmin(t);
printf("\nThe minimum element is %d",node->element);
break;
case 4:node=findmax(t);
printf("\nThe maximum element is %d",node->element);
break;
case 5:intrav(t);
break;
case 6:exit(0);

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

}
}while(ch!=6);
getch();
}
Enter no of elements:3
Enter the elements:
5
2
9
2 5 9
****MENU****
1 -> Insert a node
2 -> Delete a node
3 -> Find Minimum
4 -> Find Maximum
5 -> Display(Inorder Traversal
6 -> Exit
Enter your choice:1
Enter the element to be inserted:4
****MENU****
1 -> Insert a node
2 -> Delete a node
3 -> Find Minimum
4 -> Find Maximum
5 -> Display(Inorder Traversal
6 -> Exit

Enter your choice:1

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Enter the element to be inserted:6


****MENU****
1 -> Insert a node
2 -> Delete a node
3 -> Find Minimum
4 -> Find Maximum
5 -> Display(Inorder Traversal
6 -> Exit

Enter your choice:5


2 4 5 6 9
****MENU****
1 -> Insert a node
2 -> Delete a node
3 -> Find Minimum
4 -> Find Maximum
5 -> Display(Inorder Traversal
6 -> Exit

Enter your choice:2


Enter the element to be deleted:5
****MENU****
1 -> Insert a node
2 -> Delete a node
3 -> Find Minimum
4 -> Find Maximum
5 -> Display(Inorder Traversal
6 -> Exit

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Enter your choice:5


2 4 6 9
****MENU****
1 -> Insert a node
2 -> Delete a node
3 -> Find Minimum
4 -> Find Maximum
5 -> Display(Inorder Traversal
6 -> Exit

Enter your choice:3


The minimum element is:2
****MENU****
1 -> Insert a node
2 -> Delete a node
3 -> Find Minimum
4 -> Find Maximum
5 -> Display(Inorder Traversal
6 -> Exit

Enter your choice:4


The maximum element is:9
****MENU****
1 -> Insert a node
2 -> Delete a node
3 -> Find Minimum
4 -> Find Maximum

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

5 -> Display(Inorder Traversal


6 -> Exit

Enter your choice:6

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Ex.no. :10
Date :

EXPRESSION TREE
Aim:
To write a C program to demonstrate an expression tree.
Algorithm for Main ()
Step 1: [ INCLUDE NECESSARY HEADER FILES]
Step 2: [READ X]
Step 3:[ CALL EXPTREE(),CALL DISPLAY(), CALL INORDER(),CALL
PREORDER(),CALL EVALUATE ()]
Algorithm for EXPTREE()

Step 1: Read Character


Step 2: IF Character operator then
CALL PUSH_OP()
Step 3: [IF Character has only numbers]
IF [ is ALnum( str[i] 1 )] THEN
CREATE Newnode
Step 4: Check for ‘ NULL ‘ condition
Step 5: ASSIGN priority
Step 6: IF ( Priority !=0) THEN CALL POP_OP()
Step 7: IF Character = ‘)’ THEN CALL PUSH_OP()

Algorithm for INORDER (tree t)

Step 1: IF (t!=NULL) THEN


CALL INORDER(t left)
Step 2: PRINT t element

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Step 3: CALL INORDER(t right)

Algorithm for PREORDER (tree t)


Step 1: IF (t!=NULL) THEN
PRINT t element
Step 2: CALL PREORDER(t left)
Step 3: CALL INORDER(t right)

Algorithm for POSTORDER(tree t)


Step 1: IF (t!=NULL) THEN
CALL POSTORDER(t left)
CALL POSTORDER(t right)
Step 2: PRINT t element

Coding:

#include<stdio.h>

#include<conio.h>

#include<alloc.h>

#include<ctype.h>

#define size 20

typedef struct node

char data;

struct node *left;

struct node *right;

}btree;

btree *stack[size];

int top;

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

void main()

btree *root;

char exp[80];

btree *create(char exp[80]);

void inorder(btree *root);

void preorder(btree *root);

void postorder(btree *root);

clrscr();

printf("\nEnter the postfix expression:");

scanf("%s",exp);

top=-1;

root=create(exp);

printf("\nThe tree is created");

printf("\nThe inorder traversal is :\n");

inorder(root);

printf("\nThe preorder traversal is :\n");

preorder(root);

printf("\nThe postorder traversal is :\n");

postorder(root);

getch();

btree *create(char exp[])

btree *temp;

int pos;

char ch;

void push(btree *);

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

btree *pop();

pos=0;

ch=exp[pos];

while(ch!='\0')

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

temp->left=temp->right=NULL;

temp->data=ch;

if(isalpha(ch))

push(temp);

else if(ch=='+'||ch=='-'||ch=='*'||ch=='/')

temp->right=pop();

temp->left=pop();

push(temp);

else

printf("Invalid character\n");

pos++;

ch=exp[pos];

temp=pop();

return(temp);

void push(btree *node)

if(top+1>=size)

printf("\nstack is Full");

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

top++;

stack[top]=node;

btree *pop()

btree *node;

if(top==-1)

printf("\nStack is empty");

node=stack[top];

top--;

return(node);

void inorder(btree *root)

btree *temp;

temp=root;

if(temp!=NULL)

inorder(temp->left);

printf("%c",temp->data);

inorder(temp->right);

void preorder(btree *root)

btree *temp;

temp=root;

if(temp!=NULL)

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

printf("%c",temp->data);

preorder(temp->left);

preorder(temp->right);

void postorder(btree *root)

btree *temp;

temp=root;

if(temp!=NULL)

postorder(temp->left);

postorder(temp->right);

printf("%c",temp->data);

OUTPUT:
Enter the postfix expression:ab*c+

The tree is created

The inorder traversal is :

a*b+c

The preorder traversal is :

+*abc

The postorder traversal is :

ab*c+

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Ex.no.:11
Date :

PRIORITY QUEUE USING HEAP


Aim:
To implement priority queue using Heap in C program.
Algorithm:
Step 1: [Include necessary header files]
Step 2: [Define maxsize as 15]
Step 3: [Declare necessary variables]
Step 4: READ option, opt
IF opt is 1 THEN CALL INSERT()
IF opt is 2 THEN CALL DELMAX()
IF opt is 3 THEN CALL DIS()
Step 5: [END OF MAIN FUNCTION]

Algorithm For INSERT()


Step 1: I ne1+1

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Step 2: IF (I MAXSIZE)
WRITE (“ Heap size exceeded”)
RETURN FALSE
IF ( (I> 1) && (arraysize [i/2]< item) )
array[I] array[i/2]
I I/2
Array[I ] item
RETURN TRUE

Algorithm For DELMAX()


Step 1: IF (!nel)
WRITE (“HEAP IS EMPTY”)
ELSE
*item array [I]
Array[i] array [nel--]
CALL adjust (array,I,nel)

Coding:

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<malloc.h>
typedef struct heapstruct *pqueue;
struct heapstruct
{
int capacity;

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

int size;
int *elements;
};
void insert(int,pqueue);
pqueue initialize(int);
int deletemin(pqueue);
int isfull(pqueue);
int isempty(pqueue);
void display(pqueue);
void main()
{
pqueue heap;
int i,max,ele,ch,t;
clrscr();
printf("\nEnter the maximum no.of elements in the priority queue:");
scanf("%d",&max);
heap=initialize(max);
do
{
printf("\nMENU\n");
printf("\n1. Insertion\n");
printf("\n2.DeleteMin\n");
printf("\n3. Display\n");
printf("\n4. Exit\n");
printf("\nEnter your choice:");
scanf("%d",&ch);
switch(ch)
{

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

case 1: printf("\nEnter the element to be inserted:");


scanf("%d",&ele);
insert(ele,heap);
printf("\nThe element is inserted");
break;
case 2: t=deletemin(heap);
printf("\nThe minimum element %d is deleted\n",t);
break;
case 3: printf("\nThe elements in the HEAP are:");
display(heap);
break;
case 4: exit(0);
break;
}
}while(ch<4);
getch();
}
pqueue initialize(int max)
{
pqueue h;
if(max<3)
{
printf("\nPriority queue size is too small\n");
exit(0);
}
h=(heapstruct*)malloc(sizeof(struct heapstruct));
if(h==NULL)
exit(0);

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

h->capacity=max;
h->size=0;
return h;
}

void insert(int x,pqueue h)


{
int i;
if(isfull(h))
{
printf("\nPriority queue is full");
return;
}
if(h->size==0)
{
h->elements[1]=x;
h->size++;
}
else
{
for(i=++h->size;h->elements[i/2]>x;i/=2)
h->elements[i]=h->elements[i/2];
h->elements[i]=x;
}
}
int deletemin(pqueue h)
{

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

int i,child,minelement,lastelement;
if(isempty(h))
{
printf("\nPriority queue is empty");
exit(0);
}
minelement=h->elements[1];
lastelement=h->elements[h->size--];
for(i=1;i*2<=h->size;i=child)
{
child=i*2;
if(child!=h->size&&h->elements[child+1]<h->elements[child])
child++;
if(lastelement>h->elements[child])
h->elements[i]=h->elements[child];
else
break;
}
h->elements[i]=lastelement;
return minelement;
}
void display(pqueue h)
{
int i;
for(i=1;i<=h->size;i++)
printf("\n%d",h->elements[i]);
}
int isfull(pqueue h)

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

{
if(h->size==h->capacity)
return 1;
else
return 0;
}
int isempty(pqueue h)
{
if(h->size==0)
return 1;
else
return 0;
}
OUTPUT:

Enter the maximum no.of elements in the priority queue:5

MENU
1. Insertion
2.DeleteMin
3. Display
4. Exit
Enter your choice:1
Enter the element to be inserted:67
The element is inserted
MENU
1. Insertion
2.DeleteMin

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

3. Display
4. Exit
Enter your choice:1
Enter the element to be inserted:24
The element is inserted
MENU
1. Insertion
2.DeleteMin
3. Display
4. Exit
Enter your choice:1
Enter the element to be inserted:35
The element is inserted
MENU
1. Insertion
2.DeleteMin
3. Display
4. Exit
Enter your choice:3
The elements in the HEAP are:
24
67
35
MENU
1. Insertion
2.DeleteMin
3. Display
4. Exit

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Enter your choice:2


The minimum element 24 is deleted
MENU
1. Insertion
2.DeleteMin
3. Display
4. Exit
Enter your choice:3
The elements in the HEAP are:
35
67
Enter your choice:4

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Ex.no.:12
Date :

HASHING TECHNIQUE

Aim:

To implement a program using Hashing technique.

Algorithm:

Step1: Include necessary header files

Step2: Declare necessary variables

Step3: Check the value of *S

Then call Insert( )

Print “Enter the string”

Read S

Step4: Check the value of *S

Step5: Then print S by calling hGetVal( )

Step6: Call PrintHash( )

Step7: End

Algorithm For hINSERT( ):

Step1: Allocate memory to pointer

Step2: Assign index hGetIndex ( )

Step3: Assign Ptr Key Strdup(key)

Ptr Val Val

Ptr next h[index]

h[index] Ptr

Step4: Print “h[index]=key”

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Step5: Return

Algorithm For hGETVALUE( ):

Step1: [Ptr=h[hGetIndex(key)]]

Step2: If[Ptr && strcmp(Ptr key)]

Then Ptr Ptr next

Step3: If[Ptr],Check the value of Ptr

[Return Ptr Val]

Step4: [Return -1]

Algorithm For PRINTHASH( ):

Step1: Initialise i=0

Step2: If [i < Hash size]

Then Print i

Assign Ptr h[i]

Check the value of Ptr

If[Ptr!=0]

Then Ptr Ptr next

Print “Ptr key=Ptr Val”

Step3: [Return]

Coding:

#include<conio.h>
#include<stdio.h>
void main()
{
int a[10]={0,0,0,0,0,0,0,0,0,0};

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

int n,value,temp,hashvalue;
clrscr();
printf("Enter the value of n (table size) ::");
scanf("%d",&n);
do
{
printf("\nEnter the hash value ::");
scanf("%d",&value);
hashvalue=value%n;
if(a[hashvalue]==0)
{
a[hashvalue]=value;
printf("\na[%d] The value %d is stored",hashvalue,value);
}
else
{
for(hashvalue++;hashvalue<n;hashvalue++)
{
if(a[hashvalue]==0)
{
printf("Space is allocated!!!Give another value!!!");
a[hashvalue]=value;
printf("\na[%d] The value %d is stored",hashvalue,value);
goto a;
}
}
hashvalue=0;
for(hashvalue;hashvalue<n;hashvalue++)

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

{
if(a[hashvalue]==0)
{
printf("Space is allocated!!!Give another value!!!");
a[hashvalue]=value;
printf("\na[%d] The value %d is stored",hashvalue,value);
goto a;
}
}
}
a:printf("\nDo you want to enter more? :: ");
scanf("%d",&temp);
}while(temp==1);
getch();
}

OUTPUT:

Enter the value of n (table size) ::10


Enter the hash value ::10

a[0] The value 10 is stored


Do you want to enter more? :: 1

Enter the hash value ::11

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

a[1] The value 11 is stored


Do you want to enter more? :: 1

Enter the hash value ::21


Space is allocated!!!Give another value!!!
a[2] The value 21 is stored
Do you want to enter more? :: 1

Enter the hash value ::4


a[4] The value 4 is stored
Do you want to enter more? :: 1

Enter the hash value ::24


Space is allocated!!!Give another value!!!
a[5] The value 24 is stored
Do you want to enter more? :: 1

Enter the hash value ::19


a[9] The value 19 is stored
Do you want to enter more? :: 1

Enter the hash value ::29


Space is allocated!!!Give another value!!!
a[3] The value 29 is stored
Do you want to enter more? :: 1

Enter the hash value ::13


Space is allocated!!!Give another value!!!

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

a[6] The value 13 is stored


Do you want to enter more? :: 0

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Ex.no.:13

Date :

DIJKSTRA’S ALGORITHM
Aim

To implement Dijkstra’s algorithm to find the shortest path.

Algorithm

Step1: [Include all the header files]

Step2: Call allSelected( )

Step3: Call Shortpath( )

Step4: Access the functions from main

Step5: End

Algorithm For ALLSELECTED( )

Step1: Initialise i=0

Step2: Check whether i<max

Step3: Check whether Selected[i]=0

Return 0

Step4: Else Return 1

Step5: Return

Algorithm For SHORTPATH( )

Step1: Initialise i=0 , Check i<max

Distance[i]=INFINITE

Step2: Assign selected[current].distance[0]=0,

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Current=0

Step3: While(!allSelected(Selected))

Perform(Selected[i]= =0)

Current=k

Selected[current]=1

Print k

Coding:

#include<stdio.h>
#include<conio.h>
#define max 4
#define INFINITE 998
int allselected( int *selected)
{
int i;
for(i=0;i<max;i++)
if(selected[i]==0)
return 0;
return 1;
}
void shortpath(int cost[][max],int *preceed,int *distance)
{
int selected[max]={0};
int current=0,i,k,dc,smalldist,newdist;
for(i=0;i<max;i++)
distance[i]=INFINITE;
selected[current]=1;
distance[0]=0;
current=0;

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

while(!allselected(selected))
{
smalldist=INFINITE;
dc=distance[current];
for(i=0;i<max;i++)
{
if(selected[i]==0)
{
newdist=dc+cost[current][i];
if(newdist<distance[i])
{
distance[i]=newdist;
preceed[i]=current;
}
if(distance[i]<smalldist)
{
smalldist=distance[i];
k=i;
}
}
}
current=k;
selected[current]=1;
}
}
int main()
{

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

int cost[max][max]={{INFINITE,2,4,INFINITE},{2,INFINITE,1,5},{4,1,INFINITE,2},
{INFINITE,5,2,INFINITE}};
int preceed[max]={0},i,distance[max];
clrscr();
shortpath(cost,preceed,distance);
for(i=0;i<max;i++)
{
printf("The shortest path from 0 to %d is ",i);
printf("%d\n",distance[i]);
}
return 0;
getch();
}

Output:

The shortest path from 0 to 0 is 0


The shortest path from 0 to 1 is 2
The shortest path from 0 to 2 is 3
The shortest path from 0 to 3 is 5

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Ex.no.14

Date:

BACKTRACKING ALGORITHM – KNAPSACK PROBLEM

Aim:

To write a C program to solve the knapsack problem using backtracking algorithm


Algorithm:

Step 1: Declare the variables, array size and functions


Step 2: Get the value of number of objects and size of knapsack
Step 3: Enter weight and profit of objects
Step 4: Assign the initial values
Step 5: Call the necessary function and display the profit
Step 6: End of program

Coding:
#include<stdio.h>
#include<conio.h>
int c,cl,n,i,j,k;
int q[10],x[10][10],w[10],p[10],max;
void get();
void knapsack();
void display();
void get()
{
printf("Enter the number of objects ::");
scanf("%d",&n);
printf("Enter the size of knapsack :: ");

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

scanf("%d",&c);
printf("\nEnter the weight & profit of the objects\n");
for(i=1;i<=n;i++)
{
printf("Enter the weight %d ::",i);
scanf("%d",&w[i]);
printf("\nEnter the profit of weight %d ::",i);
scanf("%d",&p[i]);
}
}
void knapsack()
{
for(j=1;j<=n;j++)
{
for(i=1;i<=n;i++)
{
x[j][i]=0;
q[j]=0;
}
cl=c;
for(i=j;i<=n&&w[i]<=cl;i++)
{
x[j][i]=1;
cl=cl-w[i];
q[j]=q[j]+x[j][i]*p[i];
}
}
max=q[1];

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

for(i=1;i<=n;i++)
{
if(q[i]>max)
{
max=q[i];
k=i;
}
}}
void display()
{
printf("the optimal solution \t Profit \n");
for(i=1;i<=n;i++)
{
printf("\n");
for(j=1;j<=n;j++)
{
printf("%d\t",x[i][j]);
}
printf("%d\t",q[i]);
}
printf("\nThe maximum Profit is %d",max);
}
void main()
{
clrscr();
get();
knapsack();
display();

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

getch();
}

OUTPUT
Enter the number of objects ::3
Enter the size of knapsack :: 100

Enter the weight & profit of the objects


Enter the weight 1 ::60

Enter the profit of weight 1 ::30


Enter the weight 2 ::30

Enter the profit of weight 2 ::20


Enter the weight 3 ::10
Enter the profit of weight 3 ::10
the optimal solution Profit

1 1 1 60
0 1 1 30
0 0 1 10
The maximum Profit is 60

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Ex.no.15 INSERTION IN AVL


Date:

Aim:

To write a C program to perform insertion I n AVL tree.


Coding:

#include<conio.h>
#include<stdio.h>
typedef enum {FALSE,TRUE}bool;
struct node
{
int info;
int balance;
struct node *lchild;
struct node *rchild;
}*root;
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);
}
struct node *insert(int info,struct node *pptr,int *ht_inc)
{
struct node *aptr;

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

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:
pptr->balance=0;
*ht_inc=FALSE;
break;
case 0:
pptr->balance=1;
break;
case 1:
aptr=pptr->lchild;
if(aptr->balance==1)

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

{
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;

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

}
}
}
if(info>pptr->info)
{
pptr->rchild=insert(info,pptr->rchild,ht_inc);
if(*ht_inc==TRUE)
{
switch(pptr->balance)
{
case 1:
pptr->balance=0;
*ht_inc=FALSE;
break;
case 0:
pptr->balance=-1;
break;
case -1:
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;
}

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

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;
}
*ht_inc=FALSE;
}
}
}
return (pptr);
}
main()
{
bool ht_inc;

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

int info;
int choice;
clrscr();
root=(struct node *)malloc(sizeof(struct node));
root=NULL;
printf("1.Insert\n2.Display\n3.Exit\n");
while(1)
{
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");
continue;
}
printf("Tree is \n");
display(root,1);

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

printf("\n\n");
printf("Inorder Traversal :: ");
inorder(root);
printf("\n");
break;
default:
printf("Invalid Choice !!!");
exit(0);
}
}
}
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);
}
}
inorder(struct node *ptr)
{
if(ptr!=NULL)
{

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

inorder(ptr->lchild);
printf("%d ",ptr->info);
inorder(ptr->rchild);
}
}
OUTPUT:

1.Insert
2.Display
3.Exit
Enter your choice :1
Enter the value to be inserted ::15
Enter your choice :1
Enter the value to be inserted ::12
Enter your choice :1
Enter the value to be inserted ::24
Enter your choice :1
Enter the value to be inserted ::6
Enter your choice :2
Tree is
24
15
12
6
Inorder Traversal :: 6 12 15 24

Enter your choice :3

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Ex.no.16 IMPLEMENTATION OF TOPOLOGICAL SORT


Date:

Aim:

To write a C program to implement topological sort


Coding:

#include<stdio.h>
#define max 20
int n,adj[max][max];
int front=-1,rear=-1,queue[max];
void main()
{
int i,j=0,k;
int topsort[max],indeg[max];
clrscr();
create_graph();
printf("\nThe Adjacency Matrix is ::\n");
display();
for(i=1;i<=n;i++)
{
indeg[i]=indegree(i);
if(indeg[i]==0)
insert_queue(i);
}
while(front<=rear)
{
k=delete_queue();
topsort[j++]=k;

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

for(i=1;i<=n;i++)
{
if(adj[k][i]==1)
{
adj[k][i]=0;
indeg[i]=indeg[i]-1;
if(indeg[i]==0);
insert_queue(i);
}
}
}
printf("Nodes after topological sorting are ::\n");
for(i=0;i<=n;i++)
{
printf("%d",topsort[i]);
printf("\n");
}
}
create_graph()
{
int i,max_edges,origin,destin;
printf("Enter the number of Vertices::");
scanf("%d",&n);
max_edges=n*(n-1);
for(i=1;i<=max_edges;i++)
{
printf("Enter edge %d(0,0 to quit): ",i);
scanf("%d%d",&origin,&destin);

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

if((origin==0)&&(destin==0))
break;
if(origin>n || destin>n || origin<=0 || destin<=0)
{
printf("Invalid Edge!!!\n");
i--;
}
else
adj[origin][destin]=1;
}
}
display()
{
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%d",adj[i][j]);
printf("\n");
}
}
insert_queue(int node)
{
if(rear==max-1)
printf("Queue Overflow!!!\n");
else
{
if(front==-1)

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

front=0;
rear=rear+1;
queue[rear]=node;
}
}
delete_queue()
{
int del_item;
if(front==-1 || front>rear)
{
printf("Queue Overflow!!!\n");
return;
}
else
{
del_item=queue[front];
front=front+1;
return del_item;
}
}
int indegree(int node)
{
int i,in_deg=0;
for(i=1;i<=n;i++)
if(adj[i][node]==1)
in_deg++;
return in_deg;
}

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

OUTPUT:
Enter the number of Vertices::7
Enter edge 1(0,0 to quit): 1 2
Enter edge 2(0,0 to quit): 1 3
Enter edge 3(0,0 to quit): 1 4
Enter edge 4(0,0 to quit): 4 3
Enter edge 5(0,0 to quit): 2 4
Enter edge 6(0,0 to quit): 2 5
Enter edge 7(0,0 to quit): 3 6
Enter edge 8(0,0 to quit): 4 6
Enter edge 9(0,0 to quit): 4 7
Enter edge 10(0,0 to quit): 5 4
Enter edge 11(0,0 to quit): 5 7
Enter edge 12(0,0 to quit): 7 6
Enter edge 13(0,0 to quit): 0 0
The Adjacency Matrix is ::
0111000
0001100
0000010
0010011
0001001
0000000
0000010
Nodes after topological sorting are ::
1
2
5
4

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

3
7
6

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Ex.no.17 Prim's algorithms

Date:

Aim:

To write a C program to implement prim’s algorithms


Coding:

#include<stdio.h>
#include<conio.h>
#define max 10
#define infinity 9999
struct node
{
int predecessor;
int dist,status;
};
struct edge
{
int u;int v;
};
int adj[max][max];
int n;
void main()
{
int i,j;
int path[max];
int mincost,count;
struct edge tree[max];

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

clrscr();
create_graph();
count=maketree(tree,&mincost);
printf("\nEdges to be included in spanning tree are:\n");
for(i=1;i<=count;i++)
{
printf("%d->",tree[i].u);
printf("%d\n",tree[i].v);
}
printf("\nweight of spanning tree is:%d\n",mincost);
}
create_graph()
{
int i,max_edges,source,destin,wt;
printf("Enter no. of vertices:");
scanf("%d",&n);
max_edges=n*(n-1)/2;
for(i=1;i<max_edges;i++)
{
printf("Enter edge %d(00 to quit):",i);
scanf("%d%d",&source,&destin);
if((source==0)&&(destin==0))
break;
printf("Enter wt for this edge:");
scanf("%d",&wt);
if(source>n||destin>n||source<=0||destin<=0)
{
printf("Invalid edge!\n");

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

i--;
}
else
{
adj[source][destin]=wt;
adj[destin][source]=wt;
}
}
if(i<n-1)
{
printf("spanning tree is not possible\n");
exit(1);
}
return;
}
int maketree(struct edge tree[max],int *weight)
{
struct node state[max];
int i,k,min,count,current,newdist;int m;
int u1,v1;
*weight=0;
for(i=1;i<=n;i++)
{
state[i].predecessor=0;
state[i].dist=infinity;
state[i].status=0;
}
state[1].predecessor=0;

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

state[1].dist=0;
state[1].status=1;
current=1;
count=0;
while(all_perm(state)!=1)
{
for(i=1;i<=n;i++)
{
if(adj[current][i]>0&&state[i].status==0)
{
if(adj[current][i]<state[i].dist)
{
state[i].predecessor=current;
state[i].dist=adj[current][i];
}
}
}
min=infinity;
for(i=1;i<=n;i++)
{
if(state[i].status==0&&state[i].dist<min)
{
min=state[i].dist;
current=i;
}
}
state[current].status=1;
u1=state[current].predecessor;

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

v1=current;
count++;
tree[count].u=u1;
tree[count].v=v1;
*weight=*weight+adj[u1][v1];
}
return(count);
}
int all_perm(struct node state[max])
{
int i;
for(i=1;i<=n;i++)
if(state[i].status==0)
return 0;
return 1;
}
OUTPUT
Enter no. of vertices:4
Enter edge 1(00 to quit):1 2
Enter wt for this edge:1
Enter edge 2(00 to quit):1 3
Enter wt for this edge:3
Enter edge 3(00 to quit):1 4
Enter wt for this edge:2
Enter edge 4(00 to quit):2 4
Enter wt for this edge:4
Enter edge 5(00 to quit):3 4
Enter wt for this edge:2

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Edges to be included in spanning tree are:


1->2
1->4
4->3

weight of spanning tree is:5

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Ex.no.18 Branch and bound algorithm for traveling salesperson problem

Date:

Aim:

To write a C program to implement traveling sales man problem


Coding:

#include<stdio.h>
#include<conio.h>
#include<alloc.h>
int n;
int a[10][10],list[20],bpath[20];
int i,j,bcost,tbcost;
void get();
void initialize();
void calc(int list[]);
void swap(int x,int y);
void perm(int,int);
void display();
void get()
{
printf("Enter the number of cities ::");
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(i!=j)
{

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

if(a[i][j]==-1)
{
printf("Enter the cost travelling from %d to %d is",i+1,j+1);
scanf("%d",&a[i][j]);
a[j][i]=a[i][j];
}

}
else a[i][j]=0;
}
for(i=0;i<n;i++)
list[i]=i;
}
void initialize()
{
for(i=0;i<10;i++)
for(j=0;j<10;j++)
a[i][j]=-1;
bcost=0;
}
void calc(int list[])
{
int t;
tbcost=0;
for(j=1;j<n;j++)
{
t=a[list[j-1]][list[j]];
if(t!=0)

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

tbcost=tbcost+a[list[j-1]][list[j]];
else
tbcost=bcost+1;
}
}
void swap(int x, int y)
{
int temp;
temp=x;
x=y;
y=temp;
}
void perm(int k,int m)
{
int temp,i,j;
if(k==m)
{
calc(list);
if(bcost==0)
bcost=tbcost+1;
if((tbcost<bcost)&&(a[0][list[n-1]])!=0)
{
bcost=tbcost;
for(j=0;j<n;j++)
bpath[j]=list[j];
}
}
else

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

{
for(i=k;i<=m;i++)
{
swap(list[k],list[i]);
perm(k+1,m);
swap(list[k],list[i]);
}
}
}
void display()
{
printf("The best path is :: \n");
for(i=0;i<n;i++)
printf("%d --> ",bpath[i]+1);
printf("\nThe cost is %d ",bcost+a[0][bpath[n-1]]);
}
void main()
{
clrscr();
initialize();
get();
perm(1,n-1);
display();
getch();
}
OUTPUT
Enter the number of cities ::3
Enter the cost travelling from 1 to 2 is10

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Enter the cost travelling from 1 to 3 is15


Enter the cost travelling from 2 to 3 is20
The best path is ::
1 --> 2 --> 3 -->
The cost is 45

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

Ex.no.19 Randomized Algorithm.

Date:

Aim:

To write a C program to implement randomized algorithm


Coding:

#include <stdio.h>
#include <stdlib.h> /* required for randomize() and random() */
#include <conio.h> /* required for clrscr() */
int gen_rand(void); /* note these are declarations of functions */
int find_max(int x, int y, int z);
int find_min(int x, int y, int z);
void main(void)
{
int num1, num2, num3, max, min;
clrscr(); /* clear the screen */
num1=gen_rand();
num2=gen_rand();
num3=gen_rand();
max=find_max(num1, num2, num3);
min=find_min(num1, num2, num3);
printf("Random numbers are %d, %d, and %d\n", num1, num2, num3);
printf("Largest is %d. Smallest is %d.\n", max, min);
}
int gen_rand(void)
/* returns random number in range of 0 to 99 */
{

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

int n;
n=random(100); /* n is random number in range of 0 - 99 */
return(n);
}
int find_max( int x, int y, int z)
/* returns largest number */
{
int max;
if ((x>=y) && (x>=z))
{
max = x;
}
else if ((y>=x) && (y>=z))
{
max = y;
}
else
{
max = z;
}
return(max);
}
int find_min( int x, int y, int z)
/* returns smallest number */
{
int min;
if ((x<=y) && (x<=z))
{

Department of IT, REC, Thandalam.


Data structures and algorithms Lab manual for II year EEE

min = x;
}
else if ((y<=x) && (y<=z))
{
min = y;
}
else
{
min = y;
}
return(min);
}
OUTPUT
Random numbers are 1, 0, and 33
Largest is 33. Smallest is 0.

Department of IT, REC, Thandalam.

You might also like