Dsprograms(2nd cse)

857 views

Published on

this file contains Data Structures Programs in C++

Published in: Education, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
857
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
27
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Dsprograms(2nd cse)

  1. 1. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR Program 1) /* Implementation of STACK ADT using arrays */ #include<iostream.h> #include<conio.h> template <class t> class stack { t s[20]; int top,size; public: stack (int); void push(t); t pop(); void display(); }; template <class t> stack <t> :: stack(int n) { top=-1; size=n; } template <class t> void stack<t> :: push(t item) { if(top>=size-1) cout<<"stack is full"; else s[++top]=item; } template <class t> t stack <t> :: pop() { if(top==-1) { cout<<"n stack is emptyn"; return 0; } else return (s[top--]); } template <class t> void stack <t> :: display() { if(top==-1) cout<<"n stack is emptyn"; else { cout<<"n the stack elements aren"; for(int i=top;i>=0;i--) cout<<s[i]<<endl; } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 1
  2. 2. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR } void main() { stack <int> s1(20); stack <char> s2(20); int ch,ch1; int iitem,piitem; char citem,pcitem; clrscr(); do { cout<<"nn 1.pushn 2.pop n 3.exitn"; cout<<"n Enter ur choice:"; cin>>ch; switch(ch) { case 1: cout<<"n 1.Integer n 2.Character n"; cin>>ch1; if(ch1==1) { cout<<"n Enter the element:"; cin>>iitem; s1.push(iitem); s1.display(); } else { cout<<"n Enter the character :"; cin>>citem; s2.push(citem); s2.display(); } break; case 2: cout<<"n 1.Integer n 2.Character n"; cout<<"Enter ur choice :"; cin>>ch1; if(ch1==1) { piitem=s1.pop(); cout<<"n The popped element is n"; cout<<piitem; s1.display(); } else { pcitem=s2.pop(); cout<<"n The popped element is n"; cout<<pcitem; s2.display(); COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 2
  3. 3. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR } break; } }while(ch<=2); } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 3
  4. 4. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR Program 2) /* Implementation of QUEUE ADT using arrays */ #include <iostream.h> #include <conio.h> template <class t> class queue { t q[10]; int front,rear,size; public: queue(int); void insert(t); t del(); void display(); }; template <class t> queue <t>:: queue(int n) { rear=-1; front=-1; size=n; } template <class t> void queue <t> :: insert(t item) { if(rear==size-1) cout<<"n Queue is full n"; else { q[++rear]=item; if(front==-1) front=0; } } template <class t> t queue <t> :: del() { if(front==-1) { cout<<"n queue is empty n"; return 0; } else { if(front==rear) { int temp=q[front]; front=-1; COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 4
  5. 5. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR rear=-1; return temp; } else return (q[front++]); } } template <class t> void queue <t> :: display() { if(front==-1) cout<<"n queue is emptyn"; else { cout<<"n the queue elements are :n"; for( int i=front;i<=rear;i++) cout<<q[i]<<endl; } } void main() { queue <int> q1(20); queue <char> q2(20); int ch,ch1,iitem,ditem; char citem,dcitem; clrscr(); do { cout<<"n 1.Insertionn 2.Deletion n 3.Exitn"; cout<<"n Enter your choice:"; cin>>ch; switch(ch) { case 1: cout<<"n 1.Integer n 2.Character n"; cout<<"n Enter ur choice :"; cin>>ch1; if(ch1==1) { cout<<"n Enter the element :"; cin>>iitem; q1.insert(iitem); q1.display(); } else { cout<<"n Enter the element :"; cin>>citem; q2.insert(citem); COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 5
  6. 6. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR q2.display(); } break; case 2: cout<<"n 1. Integer 2. Character n"; cout<<"n Enter your choice:"; cin>>ch1; if(ch1==1) { ditem=q1.del(); cout<<"n The deleted integer item is :"<<ditem; q1.display(); } else { dcitem=q2.del(); cout<<"n The deleted character item is :"<<dcitem; q2.display(); } break; } }while(ch<=2); } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 6
  7. 7. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR Program 3) /* Implementation STACK ADT using singly linked list */ #include <iostream.h> #include <conio.h> template <class t> class stack { protected: struct node { t data; node *link; }; node *top; public: void push(t); void pop(); void display(); stack() { top=NULL; } }; template <class t> void stack <t> :: push(t item) { node *first=new node[1]; first->data=item; first->link=top; top=first; } template <class t> void stack <t> :: pop() { if(top==NULL) cout<<"n stack is empty n"; else { cout<<"n the popped elemtn is :"<<top->data; top=top->link; } } template <class t> void stack <t> :: display() { if(top==NULL) cout<<"stack is empty"; else { node *list=top; cout<<"n The elements in the stack are n"; COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 7
  8. 8. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR while(list->link!=NULL) { cout<<list->data<<endl; list=list->link; } cout<<list->data; } } void main() { stack <int> s1; stack <char> s2; int ch,ch1,iitem; char citem; clrscr(); do{ cout<<"n 1.Push n 2.Pop n 3.Exit n"; cout<<"n Enter your choice:"; cin>>ch; switch(ch) { case 1: cout<<"n 1.Integer 2.Character n"; cout<<"n Enter your choice :"; cin>>ch1; if(ch1==1) { cout<<"n Enter Integer Element:"; cin>>iitem; s1.push(iitem); s1.display(); } else { cout<<"n Enter Character Element: "; cin>>citem; s2.push(citem); s2.display(); } break; case 2: cout<<"n 1.Integer 2.Character n"; cout<<"n Enter your choice :"; cin>>ch1; if(ch1==1) { s1.pop(); s1.display(); } else { s2.pop(); s2.display(); } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 8
  9. 9. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR break; } }while(ch<=2); } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 9
  10. 10. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR Program 4) / * Implementation of Queues using singly LinkedList */ #include<iostream.h> #include<conio.h> template <class T> class Listqueue { struct node { T data; node *link; }*front,*rear; public: Listqueue(); void Enqueue(T val); T Dequeue(); void Print(); ~Listqueue(); }; template <class T> Listqueue<T>::Listqueue() { front=rear=NULL; } template <class T> void Listqueue<T>::Enqueue(T val) { node *newnode,*ptr; newnode=new node; if(newnode==NULL) { cout<<"Queue is full!!!"; return; } else { newnode->data=val; newnode->link=NULL; if(rear==NULL) { front=rear=newnode; return; } rear->link=newnode; rear=rear->link; } } template <class T> T Listqueue<T>::Dequeue() COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 10
  11. 11. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR { if(front==NULL) { cout<<"Queue is empty!!!"; return(0); } else { node *temp; temp=front; T val=front->data; front=front->link; delete temp; cout<<"Deleted item is:"; return val; } } template <class T> void Listqueue<T>::Print() { if(front==NULL) { cout<<"Queue is empty!!!"; return; } else { node *ptr; ptr=front; cout<<"Elements in the Queue are:n" ; while(ptr!=NULL) { cout<<ptr->data<<" "; ptr=ptr->link; } } } template <class T> Listqueue<T>::~Listqueue() { if(front==NULL) return; node *temp; while(front!=NULL) { temp=front; front=front->link; delete temp; } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 11
  12. 12. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR } void main() { clrscr(); Listqueue <int>obj; int ch,flag=1; while(flag==1) { cout<<"nMENU"; cout<<"n1.Insert"; cout<<"n2.Delete"; cout<<"n3.Print"; cout<<"n4.Exit"; cout<<"nEnter your choice:"; cin>>ch; switch(ch) { case 1: cout<<"nEnter the element to be inserted:"; int val; cin>>val; obj.Enqueue(val); cout<<"Do you want to continue?(Yes=1 or No=0):"; cin>>flag; break; case 2: cout<<obj.Dequeue(); cout<<"nDo you want to continue?(Yes=1 or No=0):"; cin>>flag; break; case 3: obj.Print(); cout<<"nDo you want to continue?(Yes=1 or No=0):"; cin>>flag; break; case 4: flag=0; break; default: cout<<"Enter the right choice!!!"; } } getch(); } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 12
  13. 13. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR Program 5 a) /* Convertion of infix expression into postfix expression */ #include <iostream.h> #include <conio.h> #include <ctype.h> #include <string.h> class intopost { char stack[30],infix[30],suffix[30]; int top; public: void push(char); char pop(); int prior(char); void postfix(); intopost(){ top=-1; } }; void intopost :: push(char ch) { stack[++top]=ch; } char intopost :: pop() { return stack[top--]; } int intopost :: prior(char ch) { if(ch=='('||ch=='#') return 1; if(ch=='+'||ch=='-') return 2; if(ch=='*'||ch=='/') return 3; if(ch=='^'||ch=='$') return 4; } void intopost :: postfix(){ int j=0; push('#'); cout<<"n Enter valid infix expression :"; cin>>infix; for(int i=0;infix[i]!='0';i++) { if(isalnum(infix[i])) suffix[j++]=infix[i]; else if(infix[i]=='(') COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 13
  14. 14. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR push(infix[i]); else if(infix[i]==')') { while(stack[top]!='(') suffix[j++]=pop(); pop(); } else { while(prior(stack[top])>=prior(infix[i])) suffix[j++]=pop(); push(infix[i]); } } while(stack[top]!='#') suffix[j++]=pop(); suffix[j]='0'; cout<<"n The corresponding postfix expression is"; cout<<suffix; } void main() { intopost p; clrscr(); p.postfix(); getch(); } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 14
  15. 15. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR Program 5b) /* Convertion of infix expression into prefix expression */ #include <iostream.h> #include <conio.h> #include <ctype.h> #include <string.h> class intoprefix { char stack[30],infix[30],suffix[30]; int top; public: void push(char); char pop(); int prior(char); void prefix(); intoprefix() { top=-1; } }; void intoprefix :: push(char ch){ stack[++top]=ch; } char intoprefix :: pop(){ return stack[top--]; } int intoprefix :: prior(char ch) { if(ch==')'||ch=='#') return 1; if(ch=='+'||ch=='-') return 2; if(ch=='*'||ch=='/') return 3; if(ch=='^'||ch=='$') return 4; } void intoprefix :: prefix() { int j=0; push('#'); cout<<"n Enter the valid infix expression:"; cin>>infix; strrev(infix); for(int i=0;infix[i]!='0';i++) { if(isalnum(infix[i])) COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 15
  16. 16. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR suffix[j++]=infix[i]; else if(infix[i]==')') push(infix[i]); else if(infix[i]=='(') { while(stack[top]!=')') suffix[j++]=pop(); pop(); } else { while((prior(stack[top])>prior(infix[i]))&&(stack[top]!=')')) suffix[j++]=pop(); push(infix[i]); } } while(stack[top]!='#') suffix[j++]=pop(); suffix[j]='0'; strrev(suffix); cout<<"n The corresponding prefix expression is:"; cout<<suffix; } void main() { intoprefix p; clrscr(); p.prefix(); getch(); } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 16
  17. 17. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR Program 5c) /* evaluation of posffix expression */ #include <iostream.h> #include <conio.h> #include <ctype.h> #include <math.h> #define MAX 50 class eval { int s[MAX],top; char p[20]; double res; public : eval() { top=-1; } void push(double); double pop(); double result(char, double, double); void suffixeval(); }; void eval :: push(double e) { s[++top]=e; } double eval :: pop() { return s[top--]; } double eval :: result(char p,double op1,double op2) { switch(p) { case '+': return (op2+op1); case '-': return (op2-op1); case '*': return (op2*op1); case '/': return (op2/op1); case '^': return pow(op2,op1); } } void eval :: suffixeval() { cout<<"n Enter a valid postfix expression :"; cin>>p; for(int i=0;p[i]!='0';i++) { COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 17
  18. 18. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR if(isdigit(p[i])) push((double)(p[i]-'0')); else { double op1,op2; op1=pop(); op2=pop(); double val=result(p[i],op1,op2); push(val); } } res=s[top]; cout<<"n After Evaluating result is: "<<res; } void main() { eval e; clrscr(); e.suffixeval(); getch(); } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 18
  19. 19. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR Program 6) /* implementation of deque using doubly linked list */ #include <iostream.h> #include <conio.h> template <class t> class dll { private : struct node { t data; struct node *next; struct node *prev; }*head; public : dll(){ head=NULL; } void create(); void print(); void insert_front(); void insert_rear(); void del_front(); void del_rear(); }; template <class t> void dll <t> :: create() { node *n1,*last,*temp; char ans='y'; do { n1=new node; cout<<"nEnter the data:"; cin>>n1->data; n1->next=NULL; n1->prev=NULL; if(head==NULL) { head=n1; last=n1; } else { last->next=n1; n1->prev=last; last=n1; } cout<<"n nEnter more ?"; ans=getche(); }while(ans=='y'||ans=='Y'); COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 19
  20. 20. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR cout<<"n The list is createdn"; getch(); } template <class t> void dll <t> ::print() { node *temp; temp=head; if(temp==NULL) { cout<<"n The list is emptyn"; getch(); return; } else { cout<<"n The list is :"; while(temp!=NULL) { cout<<temp->data<<" "; temp=temp->next; } } getch(); } template <class t> void dll <t> ::insert_rear() { node *temp,*n1; int val,flag=0; cout<<"n Enter the data of the new node to insert"; cin>>val; temp=head; if(temp==NULL) flag=1; else { while(temp->next!=NULL) temp=temp->next; } n1=new node; if(n1==NULL) cout<<"n Unable to allocate memoryn"; n1->data=val; n1->next=NULL; n1->prev=NULL; if(flag==0) { temp->next=n1; n1->prev=temp; } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 20
  21. 21. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR else head=n1; cout<<"n Node inserted "; } template <class t> void dll <t> :: insert_front() { node *temp,*n1; int data; cout<<"n Enter the data of the new node to insert"; cin>>data; n1=new node; if(n1==NULL) cout<<"n Unable to allocate memoryn"; n1->data=data; n1->next=NULL; n1->prev=NULL; if(head) { n1->next=head; head->prev=n1; } head=n1; cout<<"n Node inserted "; } template <class t> void dll <t> :: del_front() { node *curr, *temp; curr=head; if(curr==NULL) cout<<"n Node not found"; else { if(head->next==NULL && head->prev==NULL) head=NULL; else { head=curr->next; head->prev=NULL; } } cout<<"n The item deleted"; delete curr; } template <class t> void dll <t> :: del_rear() { node *curr,*temp; curr=head; while(curr->next!=NULL) COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 21
  22. 22. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR curr=curr->next; temp=curr->prev; temp->next=NULL; delete curr; cout<<" n The item is deletedn"; } void main() { char ans='y'; int ch; dll <int> d; dll <char> c; do{ cout<<"n" <<"MENU"; cout<<"n n1.Create"; cout<<"n n2.Display"; cout<<"n n3.Insertion by front"; cout<<"n n4.Insertion by rear"; cout<<"n n5.Deletion by front"; cout<<"n n6.Deletion by rear"; cout<<"n Enter your choice:"; cin>>ch; switch(ch) { case 1:d.create(); break; case 2:d.print(); break; case 3:d.print(); d.insert_front(); d.print(); break; case 4:d.insert_rear(); d.print(); break; case 5:d.print(); d.del_front(); d.print(); break; case 6:d.print(); d.del_rear(); d.print(); break; default: cout<<"n Invalid choice"; } cout<<"n Do you want to continue?"; ans=getch(); } while(ans=='y'||ans=='Y'); cout<<"n n Enter the characters in a Queue"<<endl; c.create(); COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 22
  23. 23. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR c.print(); getch(); } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 23
  24. 24. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR Program 7) /* Implementation of Binary search tree for the following operations a) Inserting an element into a binary search tree b) Deleting an element from a binary search tree c) Searching for a key element in a binary search tree */ #include<conio.h> #include<iostream.h> #include<stdlib.h> struct node { int element; node *left,*right; }; typedef struct node *nodeptr; template <class t> class BSTree { public: void insert(t,nodeptr &); void del(t, nodeptr &); int delet(nodeptr &); void search(t,nodeptr &); void display(nodeptr &, int); }; template <class t> void BSTree <t> ::insert( t x,nodeptr &p) { if(p==NULL) { p=new node; p->left=NULL; p->right=NULL; p->element=x; } else { if(x<p->element) insert(x,p->left); else if(x>p->element) insert(x,p->right); else cout<<"n Eelement already exist!"; } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 24
  25. 25. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR } template <class t> void BSTree <t> ::del(t x,nodeptr &p) { nodeptr d; if(p==NULL) cout<<"n Element not found"; else if(x<p->element) del(x,p->left); else if(x>p->element) del(x,p->right); else if((p->left==NULL)&&(p->right==NULL)) { d=p; delete d; p=NULL; cout<<"n Element deleted"; } else if(p->left==NULL) { d=p; delete d; p=p->right; cout<<"Element deleted"; } else if(p->right==NULL) { d=p; p=p->left; delete d; cout<<"n Element deleted"; } else p->element=delet(p->right); } template <class t> int BSTree <t>:: delet(nodeptr &p) { int c; if(p->left==NULL) { c=p->element; p=p->right; return c; } else c=delet(p->left); return c; } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 25
  26. 26. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR template <class t> void BSTree<t> :: search(t x, nodeptr &p) { if(p==NULL) cout<<"n Element not found"; else { if(x<p->element) search(x,p->left); else if(x>p->element) search(x,p->right); else cout<<"n Element found"; } } template <class t> void BSTree <t>:: display(nodeptr &x,int level) { int i; if(x) { display(x->right,level+1); cout<<"n"; for(i=0;i<level;i++) cout<<" "; cout<<x->element; display(x->left,level+1); } } void main() { BSTree <int>t; clrscr(); nodeptr root=NULL; int item; int ch; do { cout<<"nn MENUn"; cout<<"n 1.Create 2.Display 3.Search 4.Delete 5.Exitn"; cin>>ch; switch(ch) { case 1:while(1) { cout<<"Enter value:Enter -1 to stop:"; cin>>item; if(item==-1) break; COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 26
  27. 27. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR t.insert(item,root); } break; case 2: t.display(root,1); break; case 3:cout<<"n Enter element to be inserted:"; cin>>item; t.search(item,root); break; case 4:cout<<"n Enter the element to be deleted:"; cin>>item; t.del(item,root); break; case 5: exit(0); default: cout<<"n Invalid choice"; } getch(); } while (1); } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 27
  28. 28. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR Program 8) //implementation of circular queue ADT using Array #include<iostream.h> #include<conio.h> #define MAX 5 template <class T> class Cirqueue { T *Cqueue; int front,rear; public: Cirqueue(); void Insertitem(T val); T deleteitem(); void print(); ~Cirqueue(); }; template <class T> Cirqueue<T>::Cirqueue() { Cqueue=new T[MAX]; front=rear=-1; } template <class T> void Cirqueue<T>::Insertitem(T val) { if(rear==-1) { front=rear=0; Cqueue[rear]=val; } else { if(((rear+1)%MAX)!=front) { rear=(rear+1)%MAX; Cqueue[rear]=val; } else cout<<"Queue is FULL!!!"; } } template <class T> T Cirqueue<T>::deleteitem() { if(front==-1) { cout<<"Queue is EMPTY!!!"; return(0); } else COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 28
  29. 29. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR { T val=Cqueue[front]; if(front==rear) front=rear=-1; else front=(front+1)%MAX; return val; } } template <class T> void Cirqueue<T>::print() { if(front==-1) { cout<<"Queue is EMPTY!!!"; return; } else { for(int i=front;i<=rear;i++) cout<<Cqueue[i]<<" "; } if(front>rear) { for(int m=front;m<MAX;m++) cout<<Cqueue[m]<<" "; for(int n=0;n<=rear;n++) cout<<Cqueue[n]<<" "; } } template <class T> Cirqueue<T>::~Cirqueue() { delete[]Cqueue; } int main() { clrscr(); Cirqueue <int>obj; int ch,flag=1; while(flag==1) { cout<<"nMENU"; cout<<"n1.Insert"; cout<<"n2.Delete"; cout<<"n3.Print"; cout<<"n4.Exit"; cout<<"nEnter your choice:"; cin>>ch; switch(ch) COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 29
  30. 30. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR { case 1: cout<<"nEnter the element to be inserted:"; int val; cin>>val; obj.Insertitem(val); cout<<"Do you want to continue?(Yes=1 or No=0):"; cin>>flag; break; case 2: cout<<"nDeleted item is:"; cout<<obj.deleteitem(); cout<<"nDo you want to continue?(Yes=1 or No=0):"; cin>>flag; break; case 3: cout<<"nElements in the queue are:"; obj.print(); cout<<"nDo you want to continue?(Yes=1 or No=0):"; cin>>flag; break; case 4: flag=0; break; default: cout<<"Enter the right choice!!!"; } } return 0; getch(); } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 30
  31. 31. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR Program 9) /*Using non-recursive functions to traversing the given binary tree in a) Preorder b) Inorder c) Postorder */ #include<iostream.h> #include<conio.h> #include<stdlib.h> int top=-1,top1=-1,ch; template<class t> class bst { struct node /* definig structure for node */ { public: t data; node *left,*right; }*root,*a[20],*b[20]; public: bst() { root=NULL; } struct node *insert(node *r,t val) { if(r==NULL) /* insertion for first element */ { r=new node; r->data=val; r->left=NULL; r->right=NULL; } else { if(r->data<val) r->right=insert(r->right,val); else r->left=insert(r->left,val); } return(r); } struct node *deletion(node *r,t val) { node *data,*d,*x,*p,*i; int f=0; x=r; p=NULL; while(x!=NULL) { if(x->data==val) /* search for element to delete */ { d=x; f=1; COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 31
  32. 32. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR break; } else if(val<x->data) { p=x; x=x->left; } else { p=x; x=x->right; } } if(f==0) cout<<"n element not found"; else /* deletion of element */ { if(d->left!=NULL && d->right!=NULL) { p=d; i=d->left; while(i->right!=NULL) { p=i; i=i->right; } d->data=i->data; d=i; } if(d->left!=NULL && d->right==NULL) { if(p==NULL) r=d->left; else if(d==p->left) p->left=d->left; else p->right=d->right; } if(d->left==NULL && d->right!=NULL) { if(p==NULL) r=NULL; else if(d==p->left) p->left==NULL; else p->right=NULL; } cout<<"n elements deleted "; return(r); } } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 32
  33. 33. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR void inorder_non_rec(node *r) /* inorder traversal */ { node *l; l=r; do { while(l!=NULL) { push(l); l=l->left; } while(top>-1) { l=pop(); cout<<" "<<l->data; if(l->right!=NULL) { l=l->right; break; } else l=NULL; } }while(l!=NULL); } void preorder_non_rec(node *r) /* for pre order traversal */ { node *l; l=r; do { cout<<" "<<l->data; if(l->right!=NULL) push(l->right); l=l->left; if(l==NULL && top>-1) l=pop(); }while(l!=NULL); } void postorder_non_rec(node *r) /* for post order traversal */ { node *l; l=r; do { while(l!=NULL) { push(l); if(l->right!=NULL) { push(l->right); COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 33
  34. 34. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR b[++top1]=l->right; } l=l->left; } do { l=pop(); if(l!=b[top1]) cout<<" "<<l->data; else { top1=top1-1; break; } }while(top>-1); }while(l!=NULL && top>-1); } void push(node *r) /* function for pushing */ { top=top+1; a[top]=r; } struct node *pop() /* function for popping */ { return a[top--]; } int function() /* function for calling operations */ { t element; cout<<"nmenu n 1 insert 2 inorder 3 preorder 4 post order 5 delete 6 exitn"; do { cout<<"n enter ur choice "; cin>>ch; switch(ch) { case 1:cout<<"n enter element to be inserted:"; cin>>element; root=insert(root,element); break; case 2:cout<<"n rec inorder traversal:"; inorder_non_rec(root); break; case 3:cout<<"n rec preorder traversal :"; preorder_non_rec(root); break; case 4:cout<<"n rec post order traversal:"; postorder_non_rec(root); break; case 5:cout<<"n enter element to be deleted :"; cin>>element; COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 34
  35. 35. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR deletion(root,element); break; case 6:return(0); } }while(ch<6); } }; void main() { bst<int>b1; bst<float>b2; bst<char>b3; clrscr(); while(1) { cout<<"n data type n 1 int 2 float 3 char 4 exit n"; cout<<"enter data type n"; cin>>ch; switch(ch) { case 1:b1.function(); break; case 2:b2.function(); break; case 3:b3.function(); break; case 4:exit(1); } } getch(); } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 35
  36. 36. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR Program 10 a) // Program for the implementation of Breadth First Search of graph #include <iostream.h> #include <conio.h> #include <stdlib.h> #define max 10 class que { private : int arr[max]; int rear,front; public: void insert(int); int del(); int isqempty(); int isqful(); que() { front=rear=-1; } }; void que::insert(int item) { if(isqful()) cout<<"n Queue is full"; else { rear++; arr[rear]=item; if(front==-1) front=0; } } int que::del() { int item; if(isqempty()) { cout<<"nqueue is empty"; return NULL; } else { item=arr[front]; if(front==rear) front=rear=-1; else front++; return item; COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 36
  37. 37. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR } } int que:: isqempty() { if(front==-1) return 1; else return 0; } int que::isqful() { if(rear==max-1) return 1; else return 0; } que q; class graph { private : int adj[max][max]; int vst[max]; int n; public : graph() { n=0; } void buildadjm(); void bfs(int x); void menu(); }; void graph::buildadjm() { int i,j; cout<<"n Enter the graph in the matrix form:n"; for(i=1;i<=n;i++) { cout<<"nEnter "<<i<<"row"; for(j=1;j<=n;j++) cin>>adj[i][j]; } } void graph::bfs(int x) { int j,k; if(vst[x]==0) { COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 37
  38. 38. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR vst[x]=1; cout<<" "<<x; } for(;;) { for (j=1;j<=n ;j++ ) { if((adj[x][j]==1)&&(vst[j]==0)) { q.insert(j); vst[j]=1; } if(q.isqempty()) return; else { k=q.del(); cout<<" "<<k; } } } } void graph::menu() { int i; cout<<"nn Enter number of nodes:"; cin>>n; buildadjm(); for(i=1;i<=n;i++) vst[i]=0; cout<<"n The bfs traversal is as follows:n"; for(i=1;i<=n;i++) if(vst[i]==0) bfs(i); getch(); } void main() { clrscr(); graph g; g.menu(); getch(); } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 38
  39. 39. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR Program 10 b) // Program for the implementation of Depth First Search of graph #include <iostream.h> #include <conio.h> #include <stdlib.h> #define max 10 class graph { private: int adj[max][max]; int vst[max]; int n; public : graph() { n=0; } void buildadjm(); void dfs(int x); void menu(); }; void graph::buildadjm() { int i,j; cout<<"n Enter the graph in the matrix form:n"; for(i=1;i<=n;i++) { cout<<"nEnter "<<i<<"Row :"; for(j=1;j<=n;j++) cin>>adj[i][j]; } } void graph::dfs(int x) { int j; vst[x]=1; cout<<" "<<x; for(j=1;j<=n;j++) { if((adj[x][j]==1)&&(vst[j]==0)) dfs(j); } } void graph::menu() { int i; cout<<"nn Enter number of nodes:"; cin>>n; buildadjm(); for(i=1;i<=n;i++) COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 39
  40. 40. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR vst[i]=0; cout<<"n The dfs traversal is as follows:n"; for(i=1;i<=n;i++) if(vst[i]==0) dfs(i); getch(); } void main() { clrscr(); graph g; g.menu(); getch(); } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 40
  41. 41. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR Program 11 a) // Program for the implementation of Quick sort #include<iostream.h> #include<stdlib.h> #include<conio.h> void quick(int,int); int a[100]; void main() { int i,n,lo,hi; clrscr(); cout<<"enter no.of elements"; cin>>n; cout<<"enter elements"; for(i=0;i<n;i++) cin>>a[i]; /* reading elements */ lo=0; hi=n-1; quick(lo,hi); cout<<"sorted elements are:n"; for(i=0;i<n;i++) cout<<a[i]<<"t"; getch(); } void quick(int l,int h) /* using quick sort */ { int i,j,pivot,pin,t; i=l+1; j=h; pivot=a[l]; pin=l; if(l<h) { do { while(a[i]<pivot&&i<=h) i++; while(a[j]>pivot&&j>=l) j--; if(i<j) { /* swapping */ t=a[j]; a[j]=a[i]; a[i]=t; } }while(i<j); t=a[pin]; a[pin]=a[j]; a[j]=t; quick(l,j-1); quick(j+1,h); COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 41
  42. 42. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR } } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 42
  43. 43. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR Program 11 b) // Program for the implementation of Merge sort #include<iostream.h> #include<conio.h> void mergesort(int,int); void merge(int,int,int); int a[10],b[10]; void main() { int i,n,lo,hl; clrscr(); cout<<"enetr no.of elemnets :"; cin>>n; cout<<"enetr elements into array"; for(i=0;i<n;i++) cin>>a[i]; /*reading elements */ lo=0; hl=n-1; mergesort(lo,hl); cout<<"sorted elements are:n"; for(i=0;i<n;i++) cout<<"t"<<a[i]; getch(); } void mergesort(int l,int h) { int mid; if(l<h) { mid=(l+h)/2; /* breaking array into two parts */ mergesort(l,mid); mergesort(mid+1,h); merge(l,mid,h); } } void merge(int l,int mid,int h) { int i,j,k,hl; i=l; j=mid+1; k=l; while(i<=mid&&j<=h) { if(a[i]<a[j]) { b[k]=a[i]; i++; } else { b[k]=a[j]; COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 43
  44. 44. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR j++; } k++; } if(i>mid) /* finding largest element from two parts */ { for(hl=j;hl<=h;hl++) b[k++]=a[hl]; } else if(j>h) { for(hl=i;hl<=mid;hl++) b[k++]=a[hl]; } for(k=l;k<=h;k++) a[k]=b[k]; } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 44
  45. 45. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR Program 11 c) // Program for the implementation of Heap sort #include<iostream.h> #include<conio.h> int x[10],i,n; void heap(int); void maxheap(int); void main() { clrscr(); cout<<"enter no of elements"; cin>>n; cout<<"enetr the elements"; for(i=1;i<=n;i++) cin>>x[i]; /* reading elements */ heap(n); cout<<"sorted elements are:"; for(i=1;i<=n;i++) cout<<x[i]<<"t"; } void heap(int n) { int t; while(n>1) { maxheap(n); /* calling max heap */ t=x[1]; x[1]=x[n]; x[n]=t; n=n-1; } } void maxheap(int n) { int i,t,j; for(i=2;i<=n;i++) { t=x[i]; j=i; while(x[j/2]<t&&j>1) { x[j]=x[j/2]; j=j/2; } x[j]=t; } } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 45
  46. 46. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR Program 12 a) // Program to implement linear search in both recursive and non-recursive #include <iostream.h> #include <conio.h> #include <stdlib.h> template <class t> class search { t a[20],key; int n; void getdata(); int linsearch(t); public: void menu(); }; template <class t> void search<t>::getdata() { cout<<"n Enter the size of array:"; cin>>n; cout<<"n Enter array Elementsn"; for(int i=1;i<=n;i++) cin>>a[i]; } template <class t> int search<t>::linsearch(t key) { for(int i=1;i<=n;i++) { if(a[i]==key) return i; } return -1; } template <class t> void search<t> :: menu() { int pos,ch; getdata(); cout<<"n Enter the key value:"; cin>>key; pos=linsearch(key); if(pos!=-1) cout<<"n The key"<< key <<" is found at postion:"<<pos; else cout<<"n Serach is unsuccessful"; getch(); COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 46
  47. 47. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR } void main() { clrscr(); search <int> s1; search <char> s2; do { char ch; cout<<"n MENU n"; cout<<"n 1.Integer 2.Character 3.Exit"; cout<<"n Enter your choice:"; cin>>ch; switch(ch) { case '1':s1.menu(); break; case '2': s2.menu(); break; case '3': exit(0); default: cout<<"n Invalid choice"; } getch(); } while (1); } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 47
  48. 48. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR Program 12 b) // Program to implement Binary search in both recursive and non-recursive #include <iostream.h> #include <conio.h> #include <stdlib.h> template <class t> class search { t a[20],key; int n; void getdata(); void showdata(); void sort(); int binsearch(t); public: void menu(); }; template <class t> void search <t> ::getdata() { cout<<"n Enter size of array:"; cin>>n; cout<<"n Enter array elementsn"; for(int i=0;i<n;i++) cin>>a[i]; } template <class t> void search <t> ::showdata() { for(int i=0;i<n;i++) cout<<" "<<a[i]; } template <class t> void search <t> ::sort() { for (int i=0;i<n ;i++ ) { for(int j=i+1;j<n;j++) { if(a[i]>a[j]) { t temp=a[i]; a[i]=a[j]; a[j]=temp; } } } } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 48
  49. 49. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR template <class t> int search <t> ::binsearch(t key) { int low,high,mid; low=0; high=n-1; while(low<=high) { mid=(low+high)/2; if(a[mid]==key) return mid; else if(key>a[mid]) low=mid+1; else high=mid-1; } return -1; } template <class t> void search <t> ::menu() { int pos,ch; getdata(); cout<<"n Before sorting"; showdata(); sort(); cout<<"n After sorting"; showdata(); cout<<"n Enter key value:"; cin>>key; pos=binsearch(key); if(pos!=-1) cout<<"The key"<<key<<" is found at position "<< pos; else cout<<"n Search is unsuccessful"; } void main() { clrscr(); search <int> s1; search <char> s2; do { char ch; cout<<"n MENUn"; cout<<" 1.Integer 2.Character 3.Exit"; cout<<"n Enter your choice:"; cin>>ch; switch(ch) { COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 49
  50. 50. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR case '1':s1.menu(); break; case '2':s2.menu(); break; case '3':exit(0); default: cout<<"n Invalid choice!"; getch(); } }while(1); } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 50
  51. 51. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR Program 13) // Program to implement AVL tree to for the following operations a) Insertion into AVL tree b) Deletion from an AVL tree #include <iostream.h> #include <conio.h> #define FALSE 0 #define TRUE 0 struct node { int data; node *left; node *right; int height; }; typedef node *nodeptr; template <class t> class avl { public : void insert(t,nodeptr &); void delet(t,nodeptr &); void show(nodeptr &,int); int avlheight(nodeptr); int deletmax(nodeptr &); nodeptr sinrotleft(nodeptr &); nodeptr sinrotright(nodeptr &); nodeptr dourotleft(nodeptr &); nodeptr dourotright(nodeptr &); int max(t,t); }; template <class t> void avl <t> :: insert (t x, nodeptr &p) { if(p== NULL) { p=new node; p->data=x; p->left=NULL; p->right=NULL; p->height=0; } else { if(x<p->data) { insert(x,p->left); if(avlheight(p->left)-avlheight(p->right) ==2) { if(x<p->left->data) COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 51
  52. 52. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR p=sinrotleft(p); else p=dourotleft(p); } } else { if(x>p->data) { insert(x,p->right); if((avlheight(p->right)-avlheight(p->left) == 2) { if(x<p->right->data) p=sinrotleft(p); else p=dourotleft(p); } } else { cout<<"n Element already exist"; return; } } int m,n,d; m=avlheight(p->left); n=avlheight(p->right); d=max(m,n); p->height=d+1; } template <class t> void avl <t> :: show(nodeptr &x,t level) { int i; if(x) { show(x->right,level+1); cout<<"n"; for(i=0;i<level;i++) cout<<" "; cout<<" "<<x->data; show(x->left,level+1); } } template <class t> nodeptr avl <t> :: dourotleft(nodeptr &p1) COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 52
  53. 53. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR { p1->left=sinrotright(p1->left); return sinrotleft(p1); } template <class t> nodeptr avl <t> :: dourotright(nodeptr &p1) { p1->right=sinrotright(p1->right); return sinrotright(p1); } template <class t> nodeptr avl <t> :: sinrotright(nodeptr &p1) { nodeptr p2; p2=p1->right; p1->right=p2->left; p2->left=p1; p1->height=max(avlheight(p1->left),avlheight(p1->right)); p2->height=max(p1->height,avlheight(p2->right)+1); return p2; } template <class t> nodeptr avl <t> :: sinrotleft(nodeptr &p1) { nodeptr p2; p2=p1->left; p1->left=p2->right; p2->right=p1; p1->height=max(avlheight(p1->left),avlheight(p1->right)); p2->height=max(avlheight(p2->left),p1->height+1); return p2; } template <class t> void avl <t> :: delet(t x,nodeptr &p) { nodeptr d; if(p==NULL) cout<<"n Element not found!"; else if(x<p->data) { delet(x,p->left); if((avlheight(p->right)-avlheight(p->left))==2) { int u,pu,gu; gu=p->data; pu=p->right->data; if(p->right->right==NULL) u=p->right->left->data; else u=p->right->right->data; COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 53
  54. 54. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR if(gu<pu && pu<u) p=sinrotright(p); else p=dourotright(p); } } else if(x>p->data) { delet(x,p->right); if((avlheight(p->left)-avlheight(p->right))==2) { int u,pu,gu; gu=p->data; pu=p->left->data; if(p->right->right==NULL) u=p->left->right->data; else u=p->left->left->data; if(gu>pu && pu>u) p=sinrotright(p); else p=dourotright(p); } } else if((p->left==NULL) && (p->right==NULL)) { d=p; delete d; p=NULL; cout<<"n Element deleted!"; return; } else if(p->left==NULL) { d=p; delete d; p=p->right; cout<<"n Element deleted"; return; } else if(p->right==NULL) { d=p; delete d; p=p->left; cout<<"n Element deleted"; return; } else { COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 54
  55. 55. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR p->data=deletmax(p->left); int m,n,d1; m=avlheight(p->left); n=avlheight(p->right); d1=max(m,n); p->height=d1+1; } } template <class t> int avl <t> :: avlheight(nodeptr p) { int t; if(p==NULL) return 0; else { t=p->height; return t; } } template <class t> int avl <t> :: deletmax(nodeptr &p) { int c; if(p->right==NULL) { c=p->data; p=p->left; return c; } else { c=deletmax(p->right); return c; } } template <class t> int avl <t> :: max(t v1,t v2) { return ((v1>v2)?v1:v2); } void main() { clrscr(); nodeptr root=NULL; int element; avl <int> a1; while(1) COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 55
  56. 56. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR { cout<<"nEnter elements to insert(Enter -1 to exit) :"; cin>>element; if(element==-1) break; a1.insert(element,root); } cout<<"n The tree after insertion:"; a1.show(root,1); cout<<"n Enter the element to be deleted:"; cin>>element; cout<<"n the tree after deletion :n"; a1.show(root,1); cout<<"n"; getch(); } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 56
  57. 57. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR Program 14) // Program to implement Kruskal’s algorithm to generate a minimum cost spanning tree #include <iostream.h> #include <conio.h> #define INFINITY 999 template <class t> class kruskal { private: typedef struct Graph { int v1; int v2; t cost; }GR; GR G[20]; public : int tot_edges,tot_nodes; void create(); void spanning_tree(); void get_input(); int minimum(int); }; int Find(int v2,int parent[]) { while(parent[v2]!=v2) { v2=parent[v2]; } return v2; } void Union(int i,int j,int parent[]) { if(i<j) parent[j]=i; else parent[i]=j; } template <class t> void kruskal <t>::get_input() { cout<<"n Enter Total number of nodes: "; cin>>tot_nodes; cout<<"n Enter Total number of edges: "; cin>>tot_edges; } template <class t> COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 57
  58. 58. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR void kruskal <t>::create() { for(int k=0;k<tot_edges;k++) { cout<<"n Enter Edge in (v1, v2) from"; cin>>G[k].v1>>G[k].v2; cout<<"n Enter Corresponding cost "; cin>>G[k].cost; } } template <class t> int kruskal <t>::minimum(int n) { int i,small,pos; small=INFINITY; pos=-1; for(i=0;i<n;i++) { if(G[i].cost<small) { small=G[i].cost; pos=i; } } return pos; } template <class t> void kruskal <t>::spanning_tree() { int count,k,v1,v2,i,j,tree[10][10],pos,parent[10]; t sum; count=0; k=0; sum=0; for(i=0;i<tot_nodes;i++) parent[i]=i; while(count!=tot_nodes-1) { pos=minimum(tot_edges); if(pos==-1) break; v1=G[pos].v1; v2=G[pos].v2; i=Find(v1,parent); j=Find(v2,parent); if(i!=j) { tree[k][0]=v1; tree[k][1]=v2; k++; count++; COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 58
  59. 59. Y.S.R ENGINEERING COLLEGE OF YOGIVEMANA UNIVERSITY::PRODDATUR sum+=G[pos].cost; Union(i,j,parent); } G[pos].cost=INFINITY; } if(count==tot_nodes-1) { cout<<"n Spanning tree is..."<<endl; cout<<"n _____________"<<endl; for(i=0;i<tot_nodes-1;i++) { cout<<"["<<tree[i][0]; cout<<" - "; cout<<tree[i][1]<<"]"<<endl; } cout<<"n ___________"<<endl; cout<<"Cost of spanning tree is = "<<sum<<endl; } else { cout<<"There is no spanning Tree"<<endl; } } void main() { kruskal <int> obj; clrscr(); cout<<"n t Graph creation "; obj.get_input(); obj.create(); obj.spanning_tree(); getch(); } COMPUTER SCIENCE AND ENGINEERING(2012-13) Page 59

×