ds all prgms
DESCRIPTION
data structuresTRANSCRIPT
POLYNOMIAL ADDITION USING LINKED LISTCODING:
#include<stdio.h>#include<conio.h>#include<stdlib.h>typedef struct polynode{int coeff,exp;struct polynode*next;}node;node*first=NULL;node*second=NULL;node*result=NULL;void createfirst(int,int);void createsecond(int,int);void displayfirst(node*);void displaysecond(node*);void displayresult(node*);void addpoly(node*,node*);node *getnode();node *getnode(){node*temp;temp=(node*)malloc(sizeof(node));temp->next=NULL;return temp;}void main(){int r,s,i,j,x,y,ch;clrscr();printf("\nenter the number of terms in first and second polynomial:");scanf("%d%d",&r,&s);for(i=0;i<r;i++){printf("\n1st");printf("\nenter the coeff part:");scanf("%d",&x);printf("\nenter the exponent part:");scanf("%d",&y);createfirst(x,y);}for(i=0;i<s;i++){
printf("\n2nd");printf("\nenter the coeff part:");scanf("%d",&x);printf("\nenter the exponent part:");scanf("%d",&y);createsecond(x,y);}fflush(stdin);do{printf("\nPOLYNOMIAL ADDITION");printf("\n1.display the first equation");printf("\n2.display the second equation");printf("\n3.add the equation");printf("\n4.display the result");printf("\n5.exit");printf("\nenter your choice:");scanf("%d",&ch);switch(ch){case 1:displayfirst(first);break;case 2:displaysecond(second);break;case 3:addpoly(first,second);break;case 4:displayresult(result);break;case 5:exit(0);default:printf("\ninvalid choice");}}while(ch!=5);}void createfirst(int x,int y){node*temp,*q;temp=getnode();temp->coeff=x;temp->exp=y;temp->next=NULL;
if(first==NULL)first=temp;else{q=first;while(q->next!=NULL)q=q->next;q->next=temp;}}void createsecond(int x,int y){node*temp,*q;temp=getnode();temp->coeff=x;temp->exp=y;temp->next=NULL;if(second==NULL)second=temp;else{q=second;while(q->next!=NULL)q=q->next;q->next=temp;}}void displayfirst(node*first){printf("\nfirst equation is:");while(first!=NULL){printf("%dx^%d+",first->coeff,first->exp);first=first->next;}}void displaysecond(node*second){printf("\nsecond equation is:");while(second!=NULL){printf("%dx^%d+",second->coeff,second->exp);second=second->next;}}void displayresult(node*result)
{printf("\nresult is:");while(result!=NULL){printf("%dx^%d+",result->coeff,result->exp);result=result->next;}}void addpoly(node*first,node*second){struct polynode*temp;if(first==NULL&&second==NULL)return;while(first!=NULL&&second!=NULL){if(result==NULL){result=getnode();temp=result;}else{temp->next=getnode();temp=temp->next;}if(first->exp>second->exp){temp->coeff=first->coeff;temp->exp=first->exp;first=first->next;}elseif(first->exp<second->exp){temp->coeff=second->coeff;temp->exp=second->exp;second=second->next;}elseif(first->exp==second->exp){temp->exp=second->exp;temp->coeff=(first->coeff)+(second->exp);second=second->next;first=first->next;}
}while(first!=NULL){if(result==NULL){result=getnode();temp=result;}else{temp->next=getnode();temp=temp->next;}temp->coeff=first->coeff;temp->exp=first->exp;first=first->next;}while(second!=NULL){if(result==NULL){result=getnode();temp=result;}else{temp->next=getnode();temp=temp->next;}temp->coeff=second->coeff;temp->exp=second->exp;second=second->next;}}
OUTPUT:
enter the number of terms in first and second polynomial:33
1stenter the coeff part:1
enter the exponent part:2
1stenter the coeff part:2
enter the exponent part:1
1stenter the coeff part:3
enter the exponent part:0
2ndenter the coeff part:1
enter the exponent part:2
2ndenter the coeff part:2
enter the exponent part:1
2ndenter the coeff part:3
enter the exponent part:0
POLYNOMIAL ADDITION1.display the first equation2.display the second equation3.add the equation4.display the result5.exitenter your choice:1
first equation is:1x^2+2x^1+3x^0+POLYNOMIAL ADDITION1.display the first equation2.display the second equation3.add the equation4.display the result5.exitenter your choice:2
second equation is:1x^2+2x^1+3x^0+POLYNOMIAL ADDITION1.display the first equation
2.display the second equation3.add the equation4.display the result5.exitenter your choice:3
POLYNOMIAL ADDITION1.display the first equation2.display the second equation3.add the equation4.display the result5.exitenter your choice:4
result is:2x^2+4x^1+6x^0+POLYNOMIAL ADDITION1.display the first equation2.display the second equation3.add the equation4.display the result5.exitenter your choice:5
RESULT:
SINGLY LINKED LIST
CODING:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<malloc.h>
struct list
{
int data;
struct list *next;
};
typedef structlist node;
node*head=NULL;
void display(node*head)
{
node*temp=head;
while(temp!=NULL)
{
printf("\n %d\n",temp->data);
temp=temp->next;
}
}
void addbeg(int no)
{
node*temp;
temp=(node*)malloc(size of (node));
temp->data=no;
if(head==NULL)
temp->next=NULL;
else
{
temp->next=head;
head=temp;
}
}
void addend(int no)
{
node*temp*r;
temp=(node*)malloc(size of (node));
temp->data=no;
temp->next=NULL;if(head==NULL)
head=temp;
else
{
r=head;
while(r->next!=NULL)
r=r->next;
r->next=temp;
}
}
void addafter(int no)
{
node*temp*r;
int i,loc;
temp=head;
printf("\n Enter position to be added:");
scanf("%d",&loc);
for(i=0;i<loc;i++)
{
temp=temp->next;
if(temp==NULL)
{
printf("empty");
}
}
r=(node*)malloc(size of(node));
r->data=no;
r->next-=temp->next;
temp->next=r;
}
void delbeg()
{
node*temp;
temp=(node*)malloc(size of (node));
temp=head;
if(head==NULL)
printf("empty list: deletion cannot be done");
else
head=temp->next;
}
void delend()
{
node*r;
if(head==NULL)
printf("empty list");
else
{
r=head;
while(r->next!=NULL)
r=r->next;
printf("\n The deleted element is %d",r->next=data);
r->next=NULL;
}
}
void delafter(node*head)
{
node*temp,*r=head,*q=NULL;
int i,loc;
printf(“enter the position”);
scanf(“%d”,&loc);
for(i=0;i<=loc;i++)
{
q=r;
r=r->next;
if(r=NULL)
{
printf(“empty”);
}
else
q->next=r->next;
}
}
void create(int no)
{
node*temp,*q;
temp=(node*)malloc(sizeof(node));
temp->data no;
temp->next=NULL;
if(head==NULL)
head =temp;
else
{
q=head;
while(q->next!=NULL)
q=q->next;
q->next=temp;
}
}
void main()
{
int choice,no.element;
clrscr();
do
{printf(“singly linked list implementation of list\n”);
printf(“n0.create\n1.insert at front\n2.insert at end\n3.insert at a specified\n4.delete at beginning\n5.deletion at end\n6.deletion at position\n7.display list\n8.exit”);
printf(“\nenter the choice”);
scanf(“%d”,&choice);
switch (choice)
{
case 0:
printf(“enter the element\n”);
scanf(“%d”,&no);
create(no);
break;
case 1:
printf(“enter the element\n”);
ccanf(“%d”,&no);
addbeg(no);
break;
case 2:
printf(“enter the element\n”);
scanf(“%d”,&no);
addend(no);
break;
case 3:
printf(“enter the element\n”);
scanf(“%d”,&no);
addafter(no);
break;
case 4:
delbeg(no);
break;
case 5:
delend(no);
break;
case 6:
delafter(no);
break;
case 7:
printf(“\n display”);
display(head);
break;
case 8:
exit(0);
}
}
while(1);
getch();
}
OUTPUT:
singly linked list
0.create
1.insert at front
2.insert at end
3.insert at specified
4.delete at beginning
5.deletion at end
6.delete at position
7.display the list
8.exit
Enter your choice 0
Enter the element 10
singly linked list
0.create
1.insert at front
2.insert at end
3.insert at specified
4.delete at beginning
5.deletion at end
6.delete at position
7.display the list
8.exit
Enter your choice 1
Enter the element 5
singly linked list
0.create
1.insert at front
2.insert at end
3.insert at specified
4.delete at beginning
5.deletion at end
6.delete at position
7.display the list
8.exit
Enter your choice 2
Enter the element 15
singly linked list
0.create
1.insert at front
2.insert at end
3.insert at specified
4.delete at beginning
5.deletion at end
6.delete at position
7.display the list
8.exit
Enter your choice 3
Enter the element 12
Enter the position to be added 1
singly linked list
0. create
1. insert at front
2.insert at end
3.insert at specified
4.delete at beginning
5.deletion at end
6.delete at position
7.display the list
8.exit
Enter your choice 4
singly linked list
0.create
1.insert at front
2.insert at end
3.insert at specified
4.delete at beginning
5.deletion at end
6.delete at position
7.display the list
8.exit
Enter your choice 5
the deleted element is 56
singly linked list
0.create
1.insert at front
2.insert at end
3.insert at specified
4.delete at beginning
5.deletion at end
6.delete at position
7.display the list
8.exit
Enter your choice 6
Enter the position 0
singly linked list
0.create
1.insert at front
2.insert at end
3.insert at specified
4.delete at beginning
5.deletion at end
6.delete at position
7.display the list
Enter your choice7
display
10
INFIX TO POSTFIX CONVERSION
CODING:
#include<stdio.h>
#include<conio.h>
#include<string.h>
int top=-1;
char stack[100];
int len;
void inpost(char[]);
int priority(char);
void push(char);
char pop();
void main()
{
char infix[50];
clrscr();
printf("enter the expression");
scanf("%s",infix);
len=strlen(infix);
inpost(infix);
getch();
}
void inpost(char exp[])
{
int i;
for(i=0;i<len;i++)
{
if((exp[i]>='a')&&(exp[i]<='z'))
printf("%c",exp[i]);
else if(exp[i]=='(')
push(exp[i]);
else if(exp[i]==')')
{
while (stack[top]!='(')
{
printf("%c",pop());
}
top=top-1;
}
else if(priority(exp[i])>priority(stack[top]))
push(exp[i]);
else if(priority(exp[i])<=priority(stack[top]))
{
while(priority(exp[i])<=priority(stack[top])&&(top!=1))
{
printf("%c",pop());
}
push(exp[i]);
}
else
{
printf("\n invalid input");
break;
}
}
while((top!=-1)&&(stack[top]!='('))
printf("%c",pop());
}
int priority(char ele)
{
switch(ele)
{
case'^':return(3);
case'*':return(2);
case'/':return(2);
case'+':return(1);
default:return(0);
}
}
void push(char in)
{
if(top==(len-1))
printf("\n stack is full");
else
{
stack[++top]=in;
}
}
char pop()
{
char stacktop;
if(top==-1)
printf("\n stack is empty");
else
{
stacktop=stack[top];
top--;
}
return(stacktop);
}
OUTPUT:
Enter the expression
((a*b)=(c*d))
ab*cd*+
ARRAY IMPLEMENTATION OF QUEUE
CODING:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
# define max 20
int s[max],front=-1,rear=-1;
void insert(int k)
{
if(rear==(max-1))
{
printf("\n queue is full");
}
else
{
rear+=1;
s[rear]=k;
if(front==-1)
front+=1;
}
}
void delet()
{
int del;
if(front==-1)
printf("\n queue is empty");
else
{
del=front;
printf("%d",del);
s[front]=0;
if(front==rear)
front=rear=-1;
else
front+=1;
}
}
void display()
{
int i;
if(front==-1)
printf("\n queue is empty");
else
{
for(i=front;i<=rear;i++)
printf("\n%d",s[i]);
}
}
void main()
{
int n,p;
clrscr();
while(1)
{
printf("\nARRAY IMPLEMENTATION OF QUEUE\n");
printf("\n1.to insert an element in the queue\n 2.to delete an element in the queue\n 3.display the elments in the queue\n 4.exit");
printf("enter your choice");
scanf("%d",&n);
switch(n)
{
case 1:
printf("\n enter the elements to be inserted in the queue");
scanf("%d",&p);
insert(p);
break;
case 2:
delet();
break;
case 3:
printf("\n the contents in the queue are");
display();
break;
case 4:
exit(0);
}
}
getch();
}
OUTPUT:
ARRAY IMPLEMENTATION OF QUEUE
1.to insert an element in the queue
2.to delete an element in the queue
3.display the elments in the queue
4.exit
enter your choice1
enter the elements to be inserted in the queue10
ARRAY IMPLEMENTATION OF QUEUE
1.to insert an element in the queue
2.to delete an element in the queue
3.display the elments in the queue
4.exit
enter your choice1
enter the elements to be inserted in the queue20
ARRAY IMPLEMENTATION OF QUEUE
1.to insert an element in the queue
2.to delete an element in the queue
3.display the elments in the queue
4.exit
enter your choice1
enter the elements to be inserted in the queue30
ARRAY IMPLEMENTATION OF QUEUE
1.to insert an element in the queue
2.to delete an element in the queue
3.display the elments in the queue
4.exit
enter your choice2
ARRAY IMPLEMENTATION OF QUEUE
1.to insert an element in the queue
2.to delete an element in the queue
3.display the elments in the queue
4.exit
enter your choice3
the contents in the queue are
20
30
ARRAY IMPLEMENTATION OF QUEUE
1.to insert an element in the queue
2.to delete an element in the queue
3.display the elments in the queue
4.exitenter your choice2
1
ARRAY IMPLEMENTATION OF QUEUE
1.to insert an element in the queue
2.to delete an element in the queue
3.display the elments in the queue
4.exitenter your choice2
2
ARRAY IMPLEMENTATION OF QUEUE
1.to insert an element in the queue
2.to delete an element in the queue
3.display the elments in the queue
4.exitenter your choice3
the contents in the queue are
queue is empty
STACK IMPLEMENTATION USING LINKED LIST
CODING:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<malloc.h>
struct stack
{
int data;
struct stack *next;
};
typedef struct stack node;
node *top=NULL;
void display(node *top)
{
node *temp=top;
while(temp!=NULL)
{
printf("\n%d\n",temp->data);
temp=temp->next;
}
}
void push(int no)
{
node *temp;
temp=(node*)malloc(sizeof(node));
temp->data=no;
temp->next=top;
top=temp;
}
void pop()
{
node *temp;
int no;
if(top==NULL)
printf("\n stack is empty");
temp=top;
no=temp->data;
printf("%d",no);
top=top->next;
free(temp);
}
void main()
{
int ch,no;
clrscr();
do
{
printf("\nLINKED LIST IMPLEMENTATION OF STACK");
printf("\n 1.push in to the stack\n 2.pop from the stack \n 3.dispaly stack\n 4.exit");
printf("\n enter your choice");
scanf("%d",&ch);
switch(ch)
{
case 1:
printf("enter the element to be pushed into the stack");
scanf("%d",&no);
push(no);
break;
case 2:
printf("the poped element is:");
pop();
break;
case 3: printf("elements in the stack are:");
display(top);
break;
case 4:
exit(0);
}
}
while(1);
getch();
}
OUTPUT:
LINKED LIST IMPLEMENTATION OF STACK
1.push in to the stack
2.pop from the stack
3.dispaly stack
4.exit
enter your choice1
enter the element to be pushed into the stack10
LINKED LIST IMPLEMENTATION OF STACK
1.push in to the stack
2.pop from the stack
3.dispaly stack
4.exit
enter your choice1
enter the element to be pushed into the stack20
LINKED LIST IMPLEMENTATION OF STACK
1.push in to the stack
2.pop from the stack
3.dispaly stack
4.exit
enter your choice1
enter the element to be pushed into the stack30
LINKED LIST IMPLEMENTATION OF STACK
1.push in to the stack
2.pop from the stack
3.dispaly stack
4.exit
enter your choice3
elements in the stack are:
30
20
10
LINKED LIST IMPLEMENTATION OF STACK
1.push in to the stack
2.pop from the stack
3.dispaly stack
4.exit
enter your choice2
the poped element is:30
DOUBLY LINKEDLIST
CODING:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<ctype.h>
#define null 0
struct info
{
int data;
struct info*next;
struct info*prev;
};
struct info*head,*temp,*disp;
void create();
void display();
void addatbeg();
void addafter();
void addatend();
void delatbeg();
void delinbet();
void search();
void create()
{
struct info *q;
q=(struct info *)malloc(sizeof(struct info));
printf("enter the data");
scanf("%d",q->data);
if(head==NULL)
{
head=q;
q->next=NULL;
q->prev=NULL;
temp=q;
}
else
{
temp->next=q;
q->prev=temp;
q->next=NULL;
temp=q;
}
}
void display()
{
struct info *disp;
if(head==NULL)
{
printf("list is empty\n");
return;
}
else
printf("the elements are\n");
printf("from forward direction");
for(disp=head;disp!=NULL;disp=disp->next)
{
printf("%d->\t",disp->data);
}
printf("\n from backward direction");
for(disp=temp;disp!=NULL;disp=disp->prev)
{
printf("%d->\t",disp->data);
}
}
void addatbeg()
{
struct info *q;
q=(struct info *)malloc(sizeof(struct info));
printf("enter the inserted");
scanf("%d",q->data);
if(head!=NULL)
{
q->next=head;
head->prev=q;
q->prev=NULL;
head=q;
}
}
void addafter()
{
int i,pos;
struct info *s,*temp1;
s=(struct info *)malloc(sizeof(struct info));
printf("enter the data to be insreted");
scanf("%d",&s->data);
printf("enter the position to be inserted");
scanf("%d",&pos);
temp1=head;
for(i=0;i<pos;i++)
{
temp1=temp1->next;
}
s->prev=temp1;
s->next=temp1->next;
temp1->next->prev=s;
temp1->next=s;
}
void addatend()
{
struct info *q,*temp;
q=(struct info *)malloc(sizeof(struct info));
printf("enter the element to be inserted");
scanf("%d",q->data);
if(head==NULL)
{
printf("linked list is empty\n");
printf("insertion is not possible");
return;
}
temp=head;
while(temp->next!=NULL)
{
temp=temp->next;
}
temp->next=q;
q->prev=temp;
q->next=NULL;
return;
}
void delatbeg()
{
struct info *p;
p=head;
if(head==NULL)
{
printf("empty list:deletion cannot be done");
return;
}
head=head->next;
head->prev=NULL;
free(p);
}
void delinbet()
{
struct info*temp,*temp1;
int pos,c=1;
if(head->next==NULL)
{
printf("no items in the list");
return;
}
else
{
temp=head;
printf("enter the position to be deleted");
scanf("%d",&pos);
while(c<pos)
{
temp1=temp;
temp=temp->next;
c++;
}
{
temp1->next=temp->next;
temp->next->prev=temp1;
free(temp);
}
}
}
void delatend()
{
struct info *a;
a=temp;
temp->prev->next=NULL;
temp=temp->prev;
free(a);
}
void search()
{
int tdata,flag=0;
if(head==NULL)
{
printf("\n no.of items in the list");
return;
}
printf("enter the element to be searched\n");
scanf("%d",&tdata);
for(disp=head;(disp!=null)&&(flag==0);disp=disp->next)
{
if(disp->data==tdata)
flag=1;
if(flag==0)
printf("elements not found in the list\n");
else
printf("elements found in the list\n");
}
}
void main()
{
int ch,m;
clrscr();
while(1)
{
printf("\ndoubly linked list\n");
printf("\n 1.create\n 2.display \n 3.addatbeg\n 4.addafter\n 5.addend\n 6.delatbeg\n 7.delinbet\n 8.delatend\n 9.serach\n 10.exit");
printf("enter your choice");
scanf("%d",&ch);
switch(ch)
{
case 1:
create();
break;
case 2:
display();
break;
case 3:
addatbeg();
break;
case 4:
addafter();
break;
case 5:
addatend();
break;
case 6:
delatbeg();
break;
case 7:
delinbet();
break;
case 8:
delatend();
break;
case 9:
search();
break;
case 10:
exit(0);
}
}
}
OUTPUT:
DOUBLY LINKED LIST
1.create
2.display
3.addatbeg
4.addafter
5.addend
6.delatbeg
7.delinbet
8.delatend
9.serach
10.exitenter your choice1
enter the data10
DOUBLY LINKED LIST
1.create
2.display
3.addatbeg
4.addafter
5.addend
6.delatbeg
7.delinbet
8.delatend
9.serach
10.exitenter your choice2
the elements are
from forward direction10->
from backward direction10->
DOUBLY LINKED LIST
1.create
2.display
3.addatbeg
4.addafter
5.addend
6.delatbeg
7.delinbet
8.delatend
9.serach
10.exitenter your choice3
enter the inserted20
DOUBLY LINKED LIST
1.create
2.display
3.addatbeg
4.addafter
5.addend
6.delatbeg
7.delinbet
8.delatend
9.serach
10.exitenter your choice 4
enter the data to be insreted30
enter the position to be inserted2
2.display
3.addatbeg
4.addafter
5.addend
6.delatbeg
7.delinbet
8.delatend
9.serach
10.exitenter your choice5
enter the element to be inserted40
DOUBLY LINKED LIST
1.create
2.display
3.addatbeg
4.addafter
5.addend
6.delatbeg
7.delinbet
8.delatend
9.serach
10.exitenter your choice6
DOUBLY LINKED LIST
1.create
2.display
3.addatbeg
4.addafter
5.addend
6.delatbeg
7.delinbet
8.delatend
9.serach
10.exitenter your choice7
enter the position to be deleted2
DOUBLY LINKED LIST
1.create
2.display
3.addatbeg
4.addafter
5.addend
6.delatbeg
7.delinbet
8.delatend
9.serach
10.exitenter your choice8
DOUBLY LINKED LIST
1.create
2.display
3.addatbeg
4.addafter
5.addend
6.delatbeg
7.delinbet
8.delatend
9.serach
10.exitenter your choice9
enter the element to be searched
30
elements not found in the list
elements not found in the list
elements not found in the list
DOUBLE ENDED QUEUE
PROGRAM:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define size 5
struct queue
{
int queue [size];
int front,rear;
}q;
qfull()
{
if(q.rear==size-1)
return 1;
else
return 0;
}
int qempty()
{
if((q.front>q.rear)||(q.front==-1&&q.rear==-1))
return 1;
else
return 0;
}
int insert_rear(int item)
{
if(q.front==-1&&q.rear==-1)
q.front ++;
q.queue[++q.rear]=item;
return q.rear;
}
int delete_front()
{
int item;
if(q.front==-1)
q.front++;
item=q.queue[q.front];
q.queue[q.front]=-1;
q.front++;
return item;
}
int insert_front(int item)
{
int i,j;
if(q.front==-1)
q.front++;
i=q.front-1;
while(i>=0)
{
q.queue[i+1]=q.queue[i];
i--;
}
j=q.rear;
while(j>=q.front)
{
q.queue[j+1]=q.queue[j];
j--;
}
q.rear++;
q.queue[q.front]=item;
return q.front;
}
int delete_rear()
{
int item;
item=q.queue[q.rear];
q.queue[q.rear]=-1;
q.rear--;
return item;
}
void display()
{
int i;
for(i=q.front;i<=q.rear;i++)
printf("%d",q.queue[i]);
}
void main()
{
int choice,item,i;
char ans='y';
q.front=-1;
q.rear=-1;
for(i=0;i<size;i++)
q.queue[i]=-1;
printf("\n program for double ended queue");
clrscr();
do
{
printf("\n 1. insert by rear \n 2.del by frnt \n 3. insert betw frnt \n 4. del by rear \n 5. display \n 6.quit");
printf("\n enter ur choice ");
scanf("%d",&choice);
switch(choice)
{
case 1:if(qfull())
printf("\n full");
else
{
printf("\n entr the elements to be inserted ");
scanf("%d",&item);
q.rear=insert_rear(item);
}
break;
case 2:if(qempty())
printf("\n empty");
else
{
item=delete_front();
printf("\n the item deleted is %d",item);
}
break;
case 3:
if(qfull())
printf("\n full");
{
printf("\n entr the elements to be inserted ");
scanf("%d",&item);
q.front=insert_front(item);
}
break;
case 4:
if(qempty())
printf("\n empty");
else
{
item=delete_rear();
printf("\n the item deleted is %d",item);
}
break;
case 5:
display();
break;
case 6:
exit(0);
}
}
while(ans=='y'||ans=='y');
getch();
}
OUTPUT:
1. insert by rear
2.del by frnt
3. insert betw frnt
4. del by rear
5. display
6.quit
enter ur choice 1
entr the elements to be inserted 20
1. insert by rear
2.del by frnt
3. insert betw frnt
4. del by rear
5. display
6.quit
enter ur choice 4
the item deleted is 20
1. insert by rear
2.del by frnt
3. insert betw frnt
4. del by rear
5. display
6.quit
enter ur choice 3
entr the elements to be inserted 52
1. insert by rear
2.del by frnt
3. insert betw frnt
4. del by rear
5. display
6.quit
enter ur choice 2
the item deleted is 52
1. insert by rear
2.del by frnt
3. insert betw frnt
4. del by rear
5. display
6.quit
enter ur choice 6
PRIM’S ALGORITHM
PROGRAM:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int edge[10][2];
void main()
{
int prims(int cost[10][10],int n);
int i,j,k,n,cost[10][10];
int totcost=0;
clrscr();
printf("\n enter the no of vertices : ");
scanf("%d",&n);
printf("\n n=%d",n);
printf("\nenter the cost of the matrix \n ");
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i==j)
{
cost[i][j]=0;
}
else
{
printf("\n cost from edge %d to %d \t ",i,j);
scanf("%d",&cost[i][j]);
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%d",cost[i][j]);
printf("\n");
}
totcost=prims(cost,n);
printf("\n total cost of minimum sapnning tree is %d",totcost);
getch();
}
int prims(int cost[10][10],int n)
{
int closest[10],lowcost[10],min,i,j,k,totcost=0;
for(i=2;i<=n;++i)
{
lowcost[i]=cost[1][i];
closest[i]=1;
}
for(i=2;i<=n;++i)
{
min=1000;
k=2;
for(j=2;j<=n;++j)
if(lowcost[j]<min&&lowcost[j]!=0)
{
min=lowcost[j];
k=j;
}
if(min==1000)
{
printf("\n the graph is not connected ");
exit(0);
}
edge[i-1][1]=closest[k];
edge[i-1][2]=k;
printf("\n %d -> %d", edge[i-1][1],edge[i-1][2]);
totcost+=cost[edge[i-1][1]][edge[i-1][2]];
lowcost[k]=0;
for(j=2;j<=n;+++j)
{
if(cost[k][j]<lowcost[j])
if(lowcost[j]>0)
{
lowcost[j]=cost[k][j];
closest[j]=k;
}
}
}
return(totcost);
}
OUTPUT:
enter the no of vertices : 3
n=3
enter the cost of the matrix
cost from edge 1 to 2 1
cost from edge 1 to 3 2
cost from edge 2 to 1 3
cost from edge 2 to 3 4
cost from edge 3 to 1 5
cost from edge 3 to 2 6
012
304
560
1 -> 2
1 -> 3
total cost of minimum sapnning tree is 3
PRIORITY QUEUE USING HEAPS
PROGRAM:
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<process.h>
struct heapstruct
{int capacity;
int size;
int *a;
};typedef struct heapstruct *pq;
pq initialize(int max,int min)
{pq h;
if(max<min)
printf("\n priority queue is small");
h=(struct heapstruct*)malloc(sizeof(struct heapstruct));
if(h==NULL)
printf("\n out of space");
h->capacity=max;
h->size=0;
h->a[0]=min;
return h;
}void insert(int x,pq h)
{int i;
if(h->size==h->capacity)
{printf("\n priority queue is full");
}else
for(i=++h->size;h->a[i/2]>x;i/=2)
{h->a[i]=h->a[i/2];
}h->a[i]=x;
}int delmin(pq h)
{int i,mindata,last,a,child;
if(h->size==0)
{printf("\n priority queue is empty");
return (h->a[0]);
}mindata=h->a[i];
last=h->a[h->size--];
for(i=1;i*2<=h->size;i=child)
{child=i*2;
if(child!=h->size && h->a[child+1]<h->a[child])
child++;
if(last>h->a[child])
{h->a[i]=h->a[child];
}else break;
}h->a[i]=last;
return mindata;
}void display(pq h)
{int i;
for(i=1;i<=h->size;i++)
{printf("\n the data is %d",h->a[i]);
}}void main()
{pq h;
int x,y,z,u,v;
char ch;
clrscr();
printf("enter the max no of element in the priority queue");
scanf("%d",&x);
printf("enter the min no of element in the priority queue");
scanf("%d",&y);
h=initialize(x,y);
menu:
printf("\npriority queue");
printf("\n 1.insert\n 2.delete\n 3.dispaly\n 4.exit\n");
printf("enter your choice");
scanf("%d",&u);
switch(u)
{case 1:
printf("enter the data\t");
scanf("%d",&z);
insert(z,h);
break;
case 2:
printf("\nthe deleted element is %d\n",z);
break;
case 3: display(h);
break;
case 4: exit(0); }goto menu; }
OUTPUT:
enter the max no of element in the priority queue3
enter the min no of element in the priority queue2
priority queue
1.insert
2.delete
3.dispaly
4.exit
enter your choice1
enter the data 10
priority queue
1.insert
2.delete
3.dispaly
4.exit
Enter your choice1
enter the data 20
1.insert
2.delete
3.dispaly
4.exit
enter your choice1
enter the data 30
priority queue
1.insert
2.delete
3.dispaly
4.exit
enter your choice2
the deleted element is 30
priority queue
1.insert
2.delete
3.dispaly
4.exit
enter your choice3
the data is 10
the data is 20
IMPLEMENTATION OF HASHING USING LINEAR PROBING
P ROGRAM:
#include<stdio.h>#include<conio.h>#include<stdlib.h>#define MAX 10void display(int a[]);void main(){
int a[MAX],num,key,i;char ans;int create(int);void linear_prob(int [],int,int),display(int []);clrscr();printf("\n collision handling by linear probing");for(i=0;i<MAX;i++)
a[i]= -1;do{printf("\n enter the number");
scanf("%d",&num);key=create(num); linear_prob(a,key,num); printf("\n Do u wish to continue?(y/n)");ans=getche();
}while(ans=='y');display(a); getch();
}int create(int num){int key;
key=num%10;return key;
}void linear_prob(int a[MAX],int key,int num){
int flag,i,count=0;//void display(int a[]);flag=0;if(a[key]==-1)
a[key]=num; else{
i=0;while(i<MAX){
if(a[i]!= -1)count++;
i++;}if(count==MAX) {
printf("\nhash table is full");display(a);getch();exit(1);
}for(i=key+1;i<MAX;i++)
if(a[i]== -1) {
a[i]=num; flag=1;break;
}for(i=0;i<key&&flag==0;i++)
if(a[i]== -1){
a[i]=num;flag=1;break;
}}
}void display(int a[MAX]){
int i;printf("\n the hash table is...\n");for(i=0;i<MAX;i++)
printf("\n %d %d",i,a[i]);}
Output:Collision handling by linear probingEnter the number 0
Do u wish to continue?(y/n)yenter the number 2
Do u wish to continue?(y/n)yEnter the number 1
Do u wish to continue?(y/n)yEnter the number 8
Do u wish to continue?(y/n)yEnter the number 3
Do u wish to continue?(y/n)yEnter the number 4
Do u wish to continue?(y/n)yEnter the number 5
Do u wish to continue?(y/n)yEnter the number 9
Do u wish to continue?(y/n)yEnter the number 6
Do u wish to continue?(y/n)yEnter the number 7
Do u wish to continue?(y/n)yEnter the number 11
Hash table is fullThe hash table is...
0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9
INSERTION IN AVL TREE
PROGRAM:
#include<stdio.h>
#include<conio.h>
#include<alloc.h>
typedef struct node st;
struct node
{
char name[20];
int lr,index;
st *left,*right,*par;
}*head,*temp;
void add();
int check(st*);
void indexing();
void rotation (int, int);
void display();
st *stk[30];
int top=-1;
empty();
void push(st*);
st* pop() ;
void main(void)
{
int i,j,n;
char ch,name[20];
clrscr();
head=(st*)malloc(sizeof(st));
head->left=NULL;
head->right=NULL;
head->par=NULL;
head->index=0;
printf("\n\tenter the number of nodes to be inserted: ");
scanf("%d",&n);
printf("\n\n\tEnter the nodes :: \n\n\t\t");
scanf("%s",head->name);
for(i=1 ;i<n;i++)
{
temp=(st*)malloc(sizeof(st));
temp->left=NULL;
temp->right=NULL;
temp->par=NULL;
temp->index=0;
printf("\n\t\t");
scanf("%s",temp->name);
add();
indexing();
}
display();
getch();
}
void add()
{
int f1;
st *tp,*tp1;
tp=head;
while(tp)
{
tp1=tp;
f1=check(tp);
if(f1==1)
tp=tp->right;
else
tp=tp->left;
}
if(f1==1)
{
tp1->right=temp;
temp->par=tp1;
temp->lr=-1;
}
else
{
tp1->left=temp;
temp->par=tp1;
temp->lr=1;
}
}
check(st *tp)
{
int flag,i;
for(i=0;tp->name[i]!='\0';i++)
{
if(tp->name[i]<temp->name[i])
{
flag=1;
break;
}
if(tp->name[i]>temp->name[i])
{
flag=0;
break;
}
}
if(tp->name[i]=='\0')
if(temp->name[i]!='\0')
flag=1;
return flag;
}
void indexing()
{
int path1=0,path2;
while(temp->par)
{
temp->par->index+=temp->lr;
path2=path1;
if(temp->lr==1)
path1=1;
if(temp->lr==-1)
path1=0;
temp=temp->par;
if(temp->index<-1||temp->index>1)
{
rotation(path1,path2);
break;
}
if(temp->index==0)
break;
}}
void rotation(int path1,int path2)
{
void LL();
void RR();
if(path1==1)
if(path2==1)
LL();
else
RR();
}
void RR()
{
st *hd,*m,*mr;
int f;
hd=temp;
m=hd->right;
mr=m->left;
hd->right=mr;
mr->par=hd;
mr->lr=-1;
m->left=hd;
if(hd->par)
{
f=hd->lr;
hd=hd->par;
if(f==1)
hd->left=m;
else
hd->right=m;
m->lr=f;
m->par=hd;
}
else
{
head=m;
m->par=NULL;
}
hd=m->left;
hd->par=m;
hd->lr=1;
m->index=0;
hd->index=0;
}
void LL()
{
st *hd,*m,*mr;
int f;
hd=temp;
m=hd->left;
mr=m->right;
hd->left=mr;
mr->par=hd;
mr->lr=1;
m->right=hd;
if(hd->par)
{
f=hd->lr;
hd=hd->par;
if(f==1)
hd->left=m;
else
hd->right=m;
m->lr=f;
m->par=hd;
}
else
{
head=m;
m->par=NULL;
}
hd=m->right;
hd->par=m;
hd->lr=-1;
m->index=0;
hd->index=0;
}
void display()
{
void inorder();
printf("\n\n\t\t AVL tree is => ");
printf("\n\n\tInorder display :: \n\t");
inorder();
}
void inorder()
{
temp=head;
while(temp||empty())
{
while(temp)
{
push(temp);
temp=temp->left;}
temp=pop();
printf("%s",temp->name);
temp=temp->right;
}
}
}
void push(st *node)
{
if(top==30)
printf("\n\tStack is full ");
else
{
top++;
stk[top]=node;
}
}
st* pop()
{
st *node;
if(!empty())
node=NULL;
else
{
node=stk[top];
top--;
}
return(node);
}
empty()
{
if(top==-1)
return(0);
else
return(1);
}
OUTPUT: Enter the number of nodes to be inserted:
Enter the nodes:5 3 9 6
AVL tree is =>
Inorder display:
3 5 6 9
BINARY SEARCH TREE
CODING:#include<stdio.h>#include<conio.h>#include<malloc.h>#include<stdlib.h>struct treenode;typedef struct treenode *position;typedef struct treenode *searchtree;typedef struct treenode ptrnode;typedef int elementtype;searchtree makeempty(searchtree t);position find(elementtype x,searchtree t);position findmin(searchtree t);position findmax(searchtree t);searchtree insert(elementtype x,searchtree t);searchtree delet(elementtype x,searchtree t);elementtype retrive(position p);struct treenode{elementtype element;searchtree left;searchtree right;};searchtree makeempty(searchtree t){if(t!=NULL){makeempty(t->left);makeempty(t->right);free(t);}return NULL;}searchtree insert(elementtype x,searchtree t){if(t==NULL){t=(ptrnode *)malloc(sizeof(struct treenode));if(t==NULL)printf("\n Out of space");else{t->element=x;
t->left=NULL;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;}searchtree delet(elementtype x,searchtree t){position tmp;if(t==NULL){}else if(x<t->element){t->left=delet(x,t->left);}else if(x>t->element){t->right=delet(x,t->right);}else{if(t->right && t->left){tmp=findmin(t->right);t->element=tmp->element;t->right=delet(tmp->element,t->right);}else{tmp=t;if(t->left==NULL)t=t->right;if(t->right==NULL)t=t->left;free(tmp);
}}return t;}position find(elementtype x, searchtree t){if(t==NULL)return NULL;else if(x < t->element){return find(x,t->left);}else if(x > t->element){return find(x,t->right);}elsereturn t;}position findmin(searchtree t){if(t==NULL)return NULL;else if(t->left==NULL)return t;elsereturn findmin(t->left);}position findmax(searchtree t){if(t==NULL)return NULL;else if(t->right==NULL)return t;elsereturn findmax(t->right);}void inorder(searchtree t){if(t!=NULL){inorder(t->left);printf("\n%d",t->element);inorder(t->right);
}}void main(){int opt,item;searchtree t;position p;t=NULL;clrscr();do{printf("\n MENU \n\n1.Insert\n2.Delete\n3.search\n4.Display(inorder traversal)\n5.Findmin \n6.Findmax\n7.Exit\n");printf("\n Enter choice:");scanf("%d",&opt);switch(opt){case 1:printf("\n Enter the item to be inserted:");scanf("%d",&item);t=insert(item,t);printf("\n Item is inserted");break;case 2:printf("\n Enter the item to be deleted:");scanf("%d",&item);if(find(item,t)){t=delet(item,t);printf("\n Itemk is deleted");}elseprintf("\n Item is not found");break;case 3:printf("\n Enter the item to be found:");scanf("%d",&item);p=find(item,t);if(p)printf("\n Item is found");elseprintf("\n Item is not found");break;case 4:
if(t){printf("Binary searchtree is\n\n");inorder(t);}elseprintf("\nBinsary searchtree empty");break;case 5:p=findmin(t);printf("\n The min element in the tree %d",p->element);break;case 6:p=findmax(t);printf("\n The max element in the tree %d",p->element);break;case 7:exit(1);}}while(opt<=7);}
OUTPUT:MENU1.Insert2.Delete3.Search4.Display(inorder traversal)5.Findmin6.Findmax7.ExitEnter choice:1Enter the item to be inserted:10Item is inserted
MENU1.Insert2.Delete3.search4.Display(inorder traversal)5.Findmin6.Findmax7.Exit
Enter choice:1 Enter the item to be inserted:20Item is inserted
MENU1.Insert2.Delete3.search4.Display(inorder traversal)5.Findmin6.Findmax7.Exit
Enter choice:1 Enter the item to be inserted:607.ExitEnter choice:4Binary searchtree is102060
MENU1.Insert2.Delete3.search4.Display(inorder traversal)5.Findmin6.Findmax7.ExitEnter choice:3Enter the item to be found:20Item is found
MENU1.Insert2.Delete3.search4.Display(inorder traversal)5.Findmin6.Findmax7.Exit
Enter choice:3
Enter the item to be found:90 Item is not found
MENU1.Insert2.Delete3.search4.Display(inorder traversal)5.Findmin6.Findmax7.Exit
Enter choice:5The min element in the tree 10MENU1.Insert2.Delete3.search4.Display(inorder traversal)5.Findmin6.Findmax7.Exit
Enter choice:6The max element in the tree 60
MENU1.Insert2.Delete3.search4.Display(inorder traversal)5.Findmin6.Findmax7.ExitEnter choice:2Enter the item to be deleted:20Item is deleted
TREE TRAVERSAL IN AN EXPRESSION TREE
CODING:
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<ctype.h>
#define size 20
typedef struct node
{
char data;
struct node *left;
struct node *right;
}btree;
btree *stack[size];
int top;
void main()
{
btree *root;
char exp[80];
btree *create(char exp[]);
void inorder(btree *root);
void postorder(btree *root);
void preorder(btree *root);
clrscr();
printf("\n Enter the postfix expression\n");
scanf("%s",exp);
top=-1;
root=create(exp);
printf("\n The tree is created\n");
printf("\n The inorder tree traversal is\n");
inorder(root);
printf("\n The preorder tree traversal is\n");
preorder(root);
printf("\n The postorder traversal is\n");
postorder(root);
getch();
}
btree *create(char exp[])
{
btree *temp;
int pos;
char ch;
void push(btree*);
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("\n Invalid character");
pos++;
ch=exp[pos];
}
temp=pop();
return (temp);
}
void push(btree *node)
{
if(top +1 >= size)
printf("\n error ,Stack is full\n");
top++;
stack[top]=node;
}
btree *pop()
{
btree *node;
if(top==-1)
printf("Stack is empty\n");
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 postorder(btree *root)
{
btree *temp;
temp=root;
if(temp!=NULL)
{
postorder(temp->left);
postorder(temp->right);
printf("%c",temp->data);
}
}
void preorder(btree *root)
{
btree *temp;
temp=root;
if(temp!=NULL)
{
printf("%c",temp->data);
preorder(temp->left);
preorder(temp->right);
}
}
OUTPUT:
Enter the postfix expression
a b + c *
The tree is created..
The inorder tree traversal is…
a + b * c
The preorder traversal is…
* + a b c
The post order tree traversal is…
a b + c *
CIRCULAR QUEUE
PROGRAM:
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<stdlib.h>
int front=-1,rear=-1;
void enqueue(int item,int size,int cq[])
{if(front==(rear+1)%size)
printf("\nCircular Queue is full");
else
{if(front==-1&&rear==-1)
{front=(front+1)%size;
rear=(rear+1)%size;
cq[rear]=item;
}else
{rear=(rear+1)%size;
cq[rear]=item;
}}}int dequeue(int size,int cq[])
{int x;
if(front==-1&&rear==-1)
printf("\nCircular Queue is Empty");
else
x=cq[front];
if(front==rear)
front=rear=-1;
else
front=(front+1)%size;
return x;
}void display(int size,int cq[])
{if(front==-1&&rear==-1)
printf("\nQueue is Empty");
else
{int i=front;
printf("\nThe Circular Queue is");
while(i!=rear)
{printf("%d->",cq[i]);
i=(i+1)%size;
}printf("%d",cq[i]);
}}void main()
{int cq[20];
int ch,qsize,items;
printf("\nEnter the size of Circular Queue:");
scanf("%d",&qsize);
printf("\n\t\tMENU");
printf("\n1.Insert\n2.Delete\n3.Display\n4.Exit");
do
{printf("\nEnter Your Choice:");
scanf("%d",&ch);
switch(ch)
{case 1:printf("\nEnter Item to be Inserted:");
scanf("%d",&items);
enqueue(items,qsize,cq);
printf("\nItem is Inserted at rear");
break;
case 2:printf("\nThe Deleted Item is %d",dequeue(qsize,cq));
break;
case 3:printf("\nThe Circular Queue is");
display(qsize,cq);
break;
case 4:exit(1);
break;
}}while(1);
}
OUTPUT:
Enter the size of Circular Queue:3
MENU
1.Insert
2.Delete
3.Display
4.Exit
Enter Your Choice:1
Enter Item to be Inserted:10
Item is Inserted at rear
Enter Your Choice:1
Enter Item to be Inserted:20
Item is Inserted at rear
Enter Your Choice:3
The Circular Queue is
The Circular Queue is10->20
Enter Your Choice:2
The Deleted Item is 10
Enter Your Choice:3
The Circular Queue is
The Circular Queue is20
Enter Your Choice:4
ARRAY IMPLEMENTATION OF STACK
PROGRAM:
#include<stdio.h>
#include<conio.h>
void push();
void pop();
void display();
int stack[25],top=-1;
void main()
{int choice;
clrscr();
do
{printf("STACK OPERATIONS\n");
printf("\n1. Push Operation\n2. Display Stack\n3. Pop Operation\n4. Exit");
printf("\nEnter the choice: ");
scanf("%d",&choice);
switch(choice)
{case 1:
push();
break;
case 2:
display();
break;
case 3:
pop();
break;
case 4:
break;
}}while(choice<=3);
}void push()
{if(top==24)
printf("Stack Overflow");
else
{int c;
lable:
top++;
printf("Enter data :");
scanf("%d",&stack[top]);
printf("Do u want to continue press 1 else press 0: ");
scanf("%d",&c);
if(c==1&&top<24)
goto lable;
}}void display()
{int t=top;
if(top==-1)
printf("Stack is Empty");
else
{for(t=top;t>-1;t--)
printf("\n%d",stack[t]);
}}void pop()
{int x;
if(top==-1)
printf("\nStack is Empty");
else
{x=stack[top];
free(x);
top--;
}}
OUTPUT:
STACK OPERATIONS
1. Push Operation
2. Display Stack
3. Pop Operation
4. Exit
Enter the choice: 1
Enter data :20
Do u want to continue press 1 else press 0: 1
Enter data :30
Do u want to continue press 1 else press 0: 1
Enter data :40
Do u want to continue press 1 else press 0: 0
STACK OPERATIONS
1. Push Operation
2. Display Stack
3. Pop Operation
4. Exit
Enter the choice: 2
40
30
20
STACK OPERATIONS
1. Push Operation
2. Display Stack
3. Pop Operation
4. Exit
Enter the choice: 3
STACK OPERATIONS
1. Push Operation
2. Display Stack
3. Pop Operation
4. Exit
Enter the choice: 2
30
20
STACK OPERATIONS
1. Push Operation
2. Display Stack
3. Pop Operation
4. Exit
Enter the choice: 4