0% found this document useful (0 votes)
2 views32 pages

5-14

LAB PROGRAM 5- I4
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)
2 views32 pages

5-14

LAB PROGRAM 5- I4
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/ 32

EX:NO:5 IMPLEMENTATION OF EVALUATING POSTFIX

EXPRESSION,INFIX TO POSTFIX CONVERSION

A) IMPLEMENTATION OF EVALUATING POSTFIX EXPRESSION


#include<stdio.h>
#include<conio.h>
#define size 100
int a[size];
int top=-1;
void push(int x)
{
if(top>=size-1)
printf("Stack Overflow\n");
top++;
a[top]=x;
}
int pop()
{
int x;
if(top<0)
{
printf("Stack Underflow\n");
return -1;
}
x=a[top];
top--;
return x;
}
int operator(char symbol)
{
if(symbol=='+'||symbol=='-'||symbol=='*'||symbol=='/')
return 1;
return 0;
}
int(evaluate(char* expression))
{
int i=0;
char symbol=expression[i];
int a,b,res;
while(symbol!='\0')
{
if(isdigit(symbol))
{
int num=symbol-'0';
push(num);
}
else if(operator(symbol))
{
b=pop();
a=pop();
switch(symbol)
{
case '+':
res=a+b;
break;
case '-':
res=a-b;
break;
case '*':
res=a*b;
break;
case '/':
res=a/b;
break;
}
push(res);
}
i++;
symbol=expression[i];
}
res=pop();
return res;
}
int main()
{
char expression[10];
int res;
clrscr();
printf("Enter a expression:");
scanf("%s",expression);
res=evaluate(expression);
printf("Result=%d\n",res);
getch();
return 0;
}
OUTPUT:
Enter a expression:934*8+4/-
Result=4
B) IMPLEMENTATION OF EVALUATING INFIX TO POSTFIX
CONVERSION
#include<stdio.h>
#define size 50
char s[size];
int top=-1;
void push(char elem)
{
s[++top]=elem;
}
char pop()
{
return(s[top--]);
}
int pr(char elem)
{
switch(elem)
{
case '#':
return 0;
case '(':
return 1;
case '+':
case '-':
return 2;
case '*':
case '/':
return 3;
}
return 0;
}
void convert(char* infix,char* postfix)
{
char ch,elem;
int i=0,k=0;
push('#');
while((ch=infix[i++])!='\n')
{
if(ch=='(')
push(ch);
else if(isalnum(ch))
postfix[k++]=ch;
else if(ch==')')
{
while(s[top]!='(')
postfix[k++]=pop();
elem=pop();
}
else
{
while(pr(s[top])>=pr(ch))
postfix[k++]=pop();
push(ch);
}
}
while(s[top]!='#')
postfix[k++]=pop();
postfix[k]=0;
}
int evaluate(char* postfix)
{
char ch;
int i=0,a,b;
while((ch=postfix[i++])!=0)
{
if(isdigit(ch))
push(ch-'0');
else
{
b=pop();
a=pop();
switch(ch)
{
case '+':
push(a+b);
break;
case '-':
push(a-b);
break;
case '*':
push(a*b);
break;
case '/':
push(a/b);
break;
}
}
}
return s[top];
}
void main()
{
char infix[50],postfix[50];
clrscr();
printf("Enter the infix expression:");
fgets(infix,50,stdin);
convert(infix,postfix);
printf("Postfix expression:%s",postfix);
top=-1;
printf("\nResult of evaluation is=%d",evaluate(postfix));
getch();
}
OUTPUT:
Enter the infix expression:7+(3*4)
Postfix expression:734*+
Result of evaluation is=19
EX:NO:6 IMPLEMENTATION OF BINARY SEARCH TREE

#include<stdio.h>
int max=15;
char t[]={'\0','D','A','F','E','B','R','T','G','Q','\0','\0','V','\0','J','L'};
int rchild(int i)
{
if(t[i]!='\0'&&((2*i)+1)<=max)
return(2*i)+1;
return -1;
}
int lchild(int i)
{
if(t[i]!='\0'&&(2*i)<=max)
return(2*i);
return -1;
}
void preorder(int i)
{
if(i>0&&t[i]!='\0')
{
printf("%c ",t[i]);
preorder(lchild(i));
preorder(rchild(i));
}
}
void postorder(int i)
{
if(i>0&&t[i]!='\0')
{
postorder(lchild(i));
postorder(rchild(i));
printf("%c ",t[i]);
}
}
void inorder(int i)
{
if(i>0&&t[i]!='\0')
{
inorder(lchild(i));
printf("%c ",t[i]);
inorder(rchild(i));
}
}
int main()
{
clrscr();
printf("Preorder:\n");
preorder(1);
printf("\nPostorder:\n");
postorder(1);
printf("\nInorder:\n");
inorder(1);
getch();
return 0;
}

OUTPUT:

Preorder:
DAEGQBFRVTJL
Postorder:
GQEBAVRJLTFD
Inorder:
GEQABDVRFJTL
EX:NO:7 IMPLEMENTATION OF AVL TREE

#include<stdio.h>
typedef struct node
{
int data;
struct node* l,*r;
int ht;
}node;
node* insert(node*,int);
node* delete(node*,int);
void inorder(node*);
int height(node*);
node* rotateright(node*);
node* rotateleft(node*);
node* RR(node*);
node* LL(node*);
node* LR(node*);
node* RL(node*);
int BF(node*);
node* insert(node* T,int x)
{
if(T==NULL)
{
T=(node*)malloc(sizeof(node));
T->data=x;
T->l=NULL;
T->r=NULL;
}
else if(x>T->data)
{
T->r=insert(T->r,x);
if(BF(T)==-2)
if(x>T->r->data)
T=RR(T);
else
T=RL(T);
}
else if(x<T->data)
{
T->l=insert(T->l,x);
if(BF(T)==2)
if(x<T->l->data)
T=LL(T);
else
T=LR(T);
}
T->ht=height(T);
return(T);
}
node* delete(node* T,int x)
{
node* p;
if(T==NULL)
return NULL;
else if(x>T->data)
{
T->r=delete(T->r,x);
if(BF(T)==2)
if(BF(T->l)>=0)
T=LL(T);
else
T=LR(T);
}
else if(x<T->data)
{
T->l=delete(T->l,x);
if(BF(T)==-2)
if(BF(T->r)<=0)
T=RR(T);
else
T=RL(T);
}
else
{
if(T->r!=NULL)
{
p=T->r;
while(p->l!=NULL)
p=p->l;
T->data=p->data;
T->r=delete(T->r,p->data);
if(BF(T)==2)
if(BF(T->l)>=0)
T=LL(T);
else
T=LR(T);
}
else
return(T->l);
}
T->ht=height(T);
return(T);
}
int height(node* T)
{
int lh,rh;
if(T==NULL)
return 0;
if(T->l==NULL)
lh=0;
else
lh=1+T->l->ht;
if(T->r==NULL)
rh=0;
else
rh=1+T->r->ht;
if(lh>rh)
return(lh);
return(rh);
}
node* rotateright(node* x)
{
node* y;
y=x->l;
x->l=y->r;
y->r=x;
x->ht=height(x);
y->ht=height(y);
return(y);
}
node* rotateleft(node* x)
{
node* y;
y=x->r;
x->r=y->l;
y->l=x;
x->ht=height(x);
y->ht=height(y);
return(y);
}
node* RR(node* T)
{
T=rotateleft(T);
return(T);
}
node* LL(node* T)
{
T=rotateright(T);
return(T);
}
node* LR(node* T)
{
T->l=rotateleft(T->l);
T=rotateright(T);
return(T);
}
node* RL(node* T)
{
T->r=rotateright(T->r);
T=rotateleft(T);
return(T);
}
int BF(node* T)
{
int lh,rh;
if(T==NULL)
return 0;
if(T->l==NULL)
lh=0;
else
lh=1+T->l->ht;
if(T->r==NULL)
rh=0;
else
rh=1+T->r->ht;
return(lh-rh);
}
void inorder(node* T)
{
if(T!=NULL)
{
inorder(T->l);
printf("%d(BF=%d)",T->data,BF(T));
inorder(T->r);
}
}
void main()
{
node* root=NULL;
int x,n,i,op;
clrscr();
printf("1.Create\n2.Insert\n3.Delete\n4.Display\n5.Exit\n");
while(1)
{
printf("Enter choice:");
scanf("%d",&op);
switch(op)
{
case 1:
printf("Enter the number of elements:");
scanf("%d",&n);
printf("Enter tree data:");
root=NULL;
for(i=0;i<n;i++)
{
scanf("%d",&x);
root=insert(root,x);
}
break;
case 2:
printf("Enter a data:");
scanf("%d",&x);
root=insert(root,x);
break;
case 3:
printf("Enter a data:");
scanf("%d",&x);
root=delete(root,x);
break;
case 4:
printf("The AVL tree is:\n");
inorder(root);
printf("\n");
break;
case 5:
exit(1);
}
}
getch();
}
OUTPUT:

1.Create
2.Insert
3.Delete
4.Display
5.Exit
Enter choice:1
Enter the number of elements:4
Enter tree data:50 10 20 15
Enter choice:4
The AVL tree is:
10(BF=-1)15(BF=0)20(BF=1)50(BF=0)
Enter choice:2
Enter a data:8
Enter choice:4
The AVL tree is:
8(BF=0)10(BF=0)15(BF=0)20(BF=1)50(BF=0)
Enter choice:3
Enter a data:8
Enter choice:4
The AVL tree is:
10(BF=-1)15(BF=0)20(BF=1)50(BF=0)
Enter choice:5
EX:NO:8 IMPLMENTATION OF EAPS USING PRIORITY QUEUES

#include<stdio.h>
#include<math.h>
#define MAX 100
void swap(int*,int*);
void display(int[],int);
void insert(int[],int,int,int);
int delete(int[],int,int);
void insert(int a[],int heapsize,int data,int lb)
{
int i,p;
int parent(int);
if(heapsize==MAX)
{
printf("Queue is FULL!\n");
return;
}
i=lb+heapsize;
a[i]=data;
while(i>lb&&a[p=parent(i)]<a[i])
{
swap(&a[p],&a[i]);
i=p;
}
}
int delete(int a[],int heapsize,int lb)
{
int data,i,l,r,max_child,t;
int left(int);
int right(int);
if(heapsize==1)
{
printf("Queue is pty!\n");
return 0;
}
t=a[lb];
swap(&a[lb],&a[heapsize-1]);
i=lb;
heapsize--;
while(1)
{
if((l=left(i))>=heapsize)
break;
if((r=right(i))>=heapsize)
max_child=l;
else
max_child=(a[l]>a[r])?l:r;
if(a[i]>=a[max_child])
break;
swap(&a[i],&a[max_child]);
i=max_child;
}
return t;
}
int parent(int i)
{
float p;
p=((float)i/2.0)-1.0;
return ceil(p);
}
int left(int i)
{
return (2*i+1);
}
int right(int i)
{
return (2*i+2);
}
void display(int a[],int n)
{
int i;
if(n==0)
{
printf("Queue is Empty!\n");
return;
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
}
void swap(int* p,int* q)
{
int temp;
temp=*p;
*p=*q;
*q=temp;
}
void main()
{
int lb,ch,num,n,a[MAX],data,s;
ch=n=lb=0;
clrscr();
printf("1.Insert\n2.Delete\n3.Display\n4.Exit\n");
while(1)
{
printf("Enter choice:");
scanf("%d",&ch);
switch(ch)
{
case 1:
printf("Enter data to be inserted:");
scanf("%d",&data);
insert(a,n,data,lb);
n++;
break;
case 2:
s=delete(a,n+1,lb);
if(s!=0)
printf("The deleted value is:%d\n",s);
if(n>0)
n--;
break;
case 3:
display(a,n);
break;
case 4:
exit(1);
}
}
getch();
}
OUTPUT:

1.Insert
2.Delete
3.Display
4.Exit
Enter choice:1
Enter data to be inserted:3
Enter choice:1
Enter data to be inserted:6
Enter choice:1
Enter data to be inserted:8
Enter choice:3
836
Enter choice:2
The deleted value is:8
Enter choice:3
63
Enter choice:4
EX:NO:9 IMPLEMENTATION OF DIJKSTRAS ALGORITHM

#include<stdio.h>
#define INF 9999
#define MAX 10
void D(int G[MAX][MAX],int n,int start);
void D(int G[MAX][MAX],int n,int start)
{
int cost[MAX][MAX],distance[MAX],pred[MAX];
int visited[MAX],count,mindistance,nextnode,i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(G[i][j]==0)
cost[i][j]=INF;
else
cost[i][j]=G[i][j];
for(i=0;i<n;i++)
{
distance[i]=cost[start][i];
pred[i]=start;
visited[i]=0;
}
distance[start]=0;
visited[start]=1;
count=1;
while(count<n-1)
{
mindistance=INF;
for(i=0;i<n;i++)
if(distance[i]<mindistance&&!visited[i])
{
mindistance=distance[i];
nextnode=i;
}
visited[nextnode]=1;
for(i=0;i<n;i++)
if(!visited[i])
if(mindistance+cost[nextnode][i]<distance[i])
{
distance[i]=mindistance+cost[nextnode][i];
pred[i]=nextnode;
}
count++;
}
for(i=0;i<n;i++)
if(i!=start)
{
printf("\nDistance from source to %d:%d",i,distance[i]);
}
}
int main()
{
int G[MAX][MAX],i,j,n,u;
n=5;
clrscr();
G[0][0]=0;
G[0][1]=0;
G[0][2]=1;
G[0][3]=2;
G[0][4]=0;
G[1][0]=0;
G[1][1]=0;
G[1][2]=2;
G[1][3]=0;
G[1][4]=0;
G[2][0]=1;
G[2][1]=2;
G[2][2]=0;
G[2][3]=1;
G[2][4]=3;
G[3][0]=2;
G[3][1]=0;
G[3][2]=1;
G[3][3]=0;
G[3][4]=0;
G[4][0]=0;
G[4][1]=0;
G[4][2]=3;
G[4][3]=0;
G[4][4]=0;
u=0;
D(G,n,u);
getch();
return 0;
}
OUTPUT:
Distance from source to 1:3
Distance from source to 2:1
Distance from source to 3:2
Distance from source to 4:4
EX:NO:10 IMPLEMENTATION OF PRIMS ALGORITHM

typedef int bool;


#define false 0
#define true 1
#include<limits.h>
#include<stdio.h>
#include<conio.h>
#define V 5
int minkey(int key[],bool mstset[])
{
int v;
int min=INT_MAX,min_index;
for(v=0;v<V;v++)
if(mstset[v]==0&&key[v]<min)
min=key[v],min_index=v;
return min_index;
}
int printmst(int parent[],int graph[V][V])
{
int i;
printf("edge\tweight\n");
for(i=1;i<V;i++)
printf("%d-%d\t%d\n",parent[i],i,graph[i][parent[i]]);
}
void primmst(int graph[V][V])
{
int i;
int parent[V];
int key[V];
int count;
bool mstset[V];
for(i=0;i<V;i++)
key[i]=INT_MAX,mstset[i]=0;
key[0]=0;
parent[0]=-1;
for(count=0;count<V-1;count++)
{
int v;
int u=minkey(key,mstset);
mstset[u]=1;
for(v=0;v<V;v++)
if(graph[u][v]&&mstset[v]==0&&graph[u][v]<key[v])
parent[v]=u,key[v]=graph[u][v];
}
printmst(parent,graph);
}
int main()
{
int graph[V][V]={{0,2,0,6,0},{2,0,3,8,5},{0,3,0,0,7},{6,8,0,0,9},{0,5,7,9,0}};
clrscr();
primmst(graph);
getch();
return 0;
}

OUTPUT:

edge weight
0-1 2
1-2 3
0-3 6
1-4 5
EX:NO:11 IMPLEMENTATION OF LINEAR SEARCH AND BINARY
SEARCH
A) LINEAR SEARCH
#include<stdio.h>
int search(int arr[],int n,int x)
{
int i;
for(i=0;i<n;i++)
{
if(arr[i]==x)
return i;
}
return -1;
}
void main()
{
int arr[]={2,4,6,8,10};
int x=8;
int n=sizeof(arr)/sizeof(arr[0]);
int result=search(arr,n,x);
clrscr();
if(result!=-1)
printf("Element is present at index %d",result);
else
printf("Element is not present in the array");
getch();
}

OUTPUT:

Element is present at index 3


B) BINARY SEARCH

#include<stdio.h>
int binarysearch(int array[],int x,int low,int high)
{
while(low<=high)
{
int mid=low+(high-low)/2;
if(array[mid]==x)
return mid;
if(array[mid]<x)
low=mid+1;
else
low=mid-1;
}
return -1;
}
void main()
{
int array[]={1,3,5,7,9};
int n=sizeof(array)/sizeof(array[0]);
int x=9;
int result=binarysearch(array,x,0,n-1);
clrscr();
if(result==-1)
printf("Not found");
else
printf("Element is found at index %d",result);
getch();
}

OUTPUT:

Element is found at index 4


EXNO:12 IMPLEMENTATION OF INSERTION SORT AND
SELECTION SORT
A) INSERTION SORT
#include<stdio.h>
int main()
{
int a[100],n,i,j,temp;
clrscr();
printf("\nEnter the number of elements:");
scanf("%d",&n);
printf("Enter the array elements:");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
{
for(j=i;j>0&&a[j-1]>a[j];j--)
{
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
printf("Insertion sort result is:");
for(i=0;i<n;i++)
printf("%d ",a[i]);
getch();
return 0;
}

OUTPUT:

Enter the number of elements:5


Enter the array elements:9
2
8
7
6
Insertion sort result is:2 6 7 8 9
B) SELECTION SORT
#include<stdio.h>
int main()
{
int a[100],n,i,j,temp;
clrscr();
printf("\nEnter the number of elements:");
scanf("%d",&n);
printf("Enter the arrray elements:");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]>a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
printf("Selection sort result is:");
for(i=0;i<n;i++)
printf("%d ",a[i]);
getch();
return 0;
}

OUTPUT:

Enter the number of elements:5


Enter the arrray elements:2
5
9
6
8
Selection sort result is:2 5 6 8 9
EX:NO:13 IMPLEMENTATION OF MERGE SORT

#include <stdio.h>
#include <stdlib.h>
void merge(int arr[], int l, int m, int r)
{
int i, j, k;
int n1 = m - l + 1;
int n2 = r - m;
int L[50], R[50];
for (i = 0; i < n1; i++)
L[i] = arr[l + i];
for (j = 0; j < n2; j++)
R[j] = arr[m + 1 + j];
i = 0;
j = 0;
k = l;
while (i < n1 && j < n2)
{
if (L[i] <= R[j])
{
arr[k] = L[i];
i++;
}
else
{
arr[k] = R[j];
j++;
}
k++;
}
while (i < n1)
{
arr[k] = L[i];
i++;
k++;
}
while (j < n2)
{
arr[k] = R[j];
j++;
k++;
}
}
void mergeSort(int arr[], int l, int r)
{
if (l < r)
{
int m = l + (r - l) / 2;
mergeSort(arr, l, m);
mergeSort(arr, m + 1, r);
merge(arr, l, m, r);
}
}
void printArray(int A[], int size)
{
int i;
for (i = 0; i < size; i++)
printf("%d ", A[i]);
printf("\n");
}
int main()
{
int arr[] = { 12, 11, 13, 5, 6, 7 };
int arr_size = sizeof(arr) / sizeof(arr[0]);
clrscr();
printf("Given array is \n");
printArray(arr, arr_size);
mergeSort(arr, 0, arr_size - 1);
printf("\nSorted array is \n");
printArray(arr, arr_size);
getch();
return 0;
}
OUTPUT:
Given array is
12 11 13 5 6 7

Sorted array is
5 6 7 11 12 13

EX:NO:14 IMPLEMENTATION OF OPEN ADDRESSING


(LINEAR PROBING AND QUADRATIC PROBING)
#include <stdio.h>
#include <conio.h>
int tsize;
int hasht(int key)
{
int i ;
i = key%tsize ;
return i;
}
int rehashl(int key)
{
int i ;
i = (key+1)%tsize ;
return i ;
}
int rehashq(int key, int j)
{
int i ;
i = (key+(j*j))%tsize ;
return i ;
}
void main()
{
int key,arr[20],hash[20],i,n,s,op,j,k ;
clrscr() ;
printf ("Enter the size of the hash table:");
scanf ("%d",&tsize);
printf ("Enter the number of elements:");
scanf ("%d",&n);
for (i=0;i<tsize;i++)
hash[i]=-1 ;
printf ("Enter Elements:");
for (i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
printf("1.Linear Probing\n2.Quadratic Probing\n3.Exit\n");
while(1)
{
printf("Enter your option:");
scanf("%d",&op);
switch(op)
{
case 1:
for (i=0;i<tsize;i++)
hash[i]=-1 ;
for(k=0;k<n;k++)
{
key=arr[k] ;
i = hasht(key);
while (hash[i]!=-1)
{
i = rehashl(i);
}
hash[i]=key ;
}
printf("The elements in the array are:\n");
for (i=0;i<tsize;i++)
{
printf("Element at position %d:%d\n",i,hash[i]);
}
break ;
case 2:
for (i=0;i<tsize;i++)
hash[i]=-1 ;
for(k=0;k<n;k++)
{
j=1;
key=arr[k] ;
i = hasht(key);
while (hash[i]!=-1)
{
i = rehashq(i,j);
j++ ;
}
hash[i]=key ;
}
printf("The elements in the array are:\n");
for (i=0;i<tsize;i++)
{
printf("Element at position %d:%d\n",i,hash[i]);
}
break ;
case 3:
exit(1);
}
}
getch() ;
}

OUTPUT:
Enter the size of the hash table:5
Enter the number of elements:4
Enter Elements:50
70
93
76
1.Linear Probing
2.Quadratic Probing
3.Exit
Enter your option:1
The elements in the array are:
Element at position 0:50
Element at position 1:70
Element at position 2:76
Element at position 3:93
Element at position 4:-1
Enter your option:2
The elements in the array are:
Element at position 0:50
Element at position 1:70
Element at position 2:76
Element at position 3:93
Element at position 4:-1
Enter your option:3

You might also like