Sie sind auf Seite 1von 54

MERGE SORT:

#include<iostream>

using namespace std;

void mergeSort(int,int);

void mergeTwoSortedArrays(int half1[],int size1,int half2[],int size2,int output[])

int i=0,j=0,k=0;

while(i<size1 && j<size2)

if(half1[i]<half2[j])

{ output[k]=half1[i];

i++;

k++; }

else

{ output[k]=half2[j];

j++;

k++; }

while(i<size1)

{ output[k]=half1[i];

k++;

i++; }

while(j<size2)

{ output[k]=half2[j];

k++; j++; } }

void mergeSort(int input[],int size)


{

int a;

if(size<=1)

return;

a=size/2;

int half1[1000],half2[1000],i=0,j=0;

for(;i<a;i++)

half1[i]=input[i];

int size1=i;

for(i=a;i<size;i++,j++)

half2[j]=input[i];

int size2=j;

mergeSort(half1,size1);

mergeSort(half2,size2);

mergeTwoSortedArrays(half1,size1,half2,size2,input);

int main()

int arr[1000],n;

cout<<"Enter n: ";

cin>>n;

for(int i=0;i<n;i++)

cin>>arr[i];
mergeSort(arr,n);

for(int i=0;i<n;i++)

cout<<arr[i]<<" ";

return 0;

Output:

QUICK SORT:
#include<iostream>
using namespace std;

int partitionarray(int input[],int start,int ed)

int pivot=input[start];

int cnt=0;

for(int i=start+1;i<=ed;i++)

if(pivot>=input[i])

cnt++;

input[start]=input[cnt+start];

input[cnt+start]=pivot;

int j=ed;

int k;

for(int i=start;i<=start+cnt-1;i++)

if(input[i]>pivot)

int temp=input[i];

for(j;j>=cnt+start+1;j--)

if(input[j]<=pivot)

k=j;

input[i]=input[j];

input[j]=temp;

j=cnt;
}

j=k-1;

return start+cnt;

void quicksort(int input[],int start,int ed)

if(start>=ed)

return;

int pivotindex=partitionarray(input,start,ed);

quicksort(input,start,pivotindex-1);

quicksort(input,pivotindex+1,ed);

int main()

int input[100],n;

cout<<"Enter n:";

cin>>n;

for(int i=0;i<n;i++)

cin>>input[i];

int start=0,ed=n-1;

quicksort(input,start,ed);
cout<<endl<<"After Sorting: "<<endl;

for(int i=0;i<n;i++)

cout<<input[i]<<" ";

return 0;

Output:

PARENTHESIS BALANCING IN AN EXPRESSION:

#include<iostream>

#include<conio.h>

using namespace std;


class stack

char stk[100];

public:

int top;

stack()

top=-1;

void push(char x)

if(top>99)

cout <<"stack over flow";

return;

stk[++top]=x;

char pop()

if(top<0)

cout <<"stack under flow";

return '$';

return stk[top--];

void display()
{

if(top<0)

cout <<" stack empty";

return;

for(int i=top;i>=0;i--)

cout <<stk[i] <<" ";

};

int ParanthesisCounter(stack *st);

int main()

int res;

stack st;

char ch;

cout<<"Enter Expression: ";

do{

cin.get(ch);

st.push(ch);

}while(ch!='\n');

res=ParanthesisCounter(&st);

if(res>0)

cout<<"Left Parenthesis is more";

else
if(res==0)

cout<<"Parenthesis Balanced";

else

if(res<0)

cout<<"\nRight Parenthesis is more";

return 0;

int ParanthesisCounter(stack *st)

char ch;

int count=0;

while(st->top!=-1)

ch=st->pop();

if(ch=='(')

count++;

if(ch==')')

count--;

}
return count;

Output:

INFIX TO POSTFIX CONVERSION:

#include<iostream>

#include<cstring>

#include<stack>

using namespace std;

int Precedence(char ch)

switch (ch)
{

case '^': return 3;

case '/': return 2;

case '*': return 2;

case '+': return 1;

case '-': return 1;

default : return 0;

void infix2postfix(char infix[],char postfix[],int size)

stack<char> s;

int weight;

int i=0;

int k=0;

char ch;

/** iterate over the infix expression **/

while(i<size)

ch = infix[i];

if (ch == '(')

s.push(ch);

i++;

continue;
}

if (ch == ')')

while(!s.empty()&&s.top()!='(')

postfix[k++] = s.top();

s.pop();

if (!s.empty())

s.pop();

i++;

continue;

weight = Precedence(ch);

if (weight==0)

postfix[k++] = ch;

else /**Operator arrives :-| */

if (s.empty())

s.push(ch);

else

{
while(!s.empty()&&s.top()!='('&&weight <=Precedence(s.top()))

postfix[k++] = s.top();

s.pop();

s.push(ch);

i++;

while(!s.empty())

postfix[k++]=s.top();

s.pop();

postfix[k]='\0';

int main()

char infix[] = "A*(B+C)/D";

int size = strlen(infix);

char postfix[size];

infix2postfix(infix,postfix,size);

cout<<"\nInfix Expression :: "<<infix;

cout<<"\nPostfix Expression :: "<<postfix;

cout<<endl;

return 0;
}

Output:

TOWER OF HANOI:

using namespace std;

#include<iostream>

#include<stdio.h>

void move(int num,char a,char b,char c)

if(num==1)

cout<<a<<"->"<<c<<"\n";

else

move(num-1,a,c,b);
cout<<a<<"->"<<c<<"\n";

move(num-1,b,a,c);

int main()

int number;

char source='a',temp='b',destination='c';

cout<<"enter the number of disks: ";

cin>>number;

move(number,source,temp,destination);

return 0; }

Output:
CIRCULAR QUEUE USING ARRAYS:
#include<iostream>

#include<stdio.h>

#include<stdlib.h>

using namespace std;

#define maxqueue 10

int queue[maxqueue];

int front=-1;

int rear=-1;

int isempty()

if(front==-1)

return 1;

else

return 0;

}
int isfull()

if((front==0 && rear==maxqueue-1)||(front==rear+1))

return 1;

else

return 0;

void insert(int item)

if(isfull())

cout<<"QUEUE OVERFLOW";

return;

if(front==-1)

front=0;

if(rear==maxqueue-1)

rear=0;

else

rear=rear+1;

queue[rear]=item;

int del()

int item;

if(isempty())

cout<<"QUEUE UNDERFLOW";
exit(1);

item=queue[front];

if(front==rear)

front=-1;

rear=-1;

else if(front==maxqueue-1)

front=0;

else

front=front+1;

return item;

void display()

int i;

if(isempty())

cout<<"queue is empty";

return;

cout<<"Queue elements: \n";

i=front;

if(front<=rear)

while(i<=rear)

cout<<queue[i++]<<" ";
}

else

while(i<=maxqueue-1)

cout<<queue[i++]<<" ";

i=0;

while(i<=rear)

cout<<queue[i++]<<" ";

cout<<"\n";

int main()

int item;

cout<<"Enter the Element: ";

cin>>item;

insert(item);

cout<<"Enter the Element: ";

cin>>item;

insert(item);

cout<<"Enter the Element: ";

cin>>item;

insert(item);

cout<<"Enter the Element: ";

cin>>item;

insert(item);

display();

return 0;
}

Output:
SPARSE MATRIX USING TRANSPOSE:

#include<iostream>

using namespace std;

class Matrix

int A[10][10],B[10][3],C[10][3],row,col;

public:

void InputMatrix();

void DisplayMatrix();

void Matrix2Sparse();

void DisplaySparse(int X[][3]);

void DisplayS2M();

void Transpose();

void ftrans();

};

int main()

Matrix A;

A.InputMatrix();

A.DisplayMatrix(); /**Displaying the matrix*/


A.Matrix2Sparse();

A.ftrans();

return 0;

void Matrix::InputMatrix()

cout<<"Enter the no of row and columns : "<<endl;

cin>>row>>col;

for(int i=0;i<row;i++) /** Assigning the value of matrix*/

for(int j=0;j<col;j++)

cout<<"A["<<i<<"]["<<j<<"]= ";

cin>>A[i][j];

cout<<endl;

void Matrix::DisplayMatrix()

cout<<"The matrix is :"<<endl<<endl;

for(int i=0;i<row;i++)

for(int j=0;j<col;j++)

cout<<A[i][j]<<" ";
}

cout<<endl;

void Matrix::Matrix2Sparse()

int t=0; /**t Keeps track of no of non zero element*/

for(int i=0;i<row;i++)

for(int j=0;j<col;j++)

if(A[i][j]!=0) /** Accepting only non zero value(creating Sparse matrix)*/

t++;

B[t][0] = i+1;

B[t][1] = j+1;

B[t][2] = A[i][j];

B[0][0]=row;

B[0][1]=col;

B[0][2]=t;

cout<<"\nThe non zero value matrix are :"<<endl;

DisplaySparse(B);

}
void Matrix::DisplaySparse(int X[][3])

for(int i=0;i<=X[0][2];i++)

cout<<endl<<X[i][0]<<" "<<X[i][1]<<" "<<X[i][2];

cout<<endl<<endl;

void Matrix::DisplayS2M()

cout<<"Transposed matrix: "<<endl<<endl;

int k=1;

for(int i=1;i<=C[0][0];i++)

for(int j=1;j<=C[0][1];j++)

if(C[k][0]==i&&C[k][1]==j)

cout<<C[k][2]<<" ";

k++;

else

cout<<"0"<<" ";

}
cout<<endl;

void Matrix::Transpose()

int NoOfColoumn = B[0][1];

int NoOfRow = B[0][0];

int NonZeroEle = B[0][2];

if(B[0][2]==0)

return;

int q=1;

for(int i=1;i<=NoOfColoumn;i++)

for(int j=1;j<=NonZeroEle;j++)

if(B[j][1]==i) /**Column index*/

C[q][0]=B[j][1]; /**Putting column index in row place*/

C[q][1]=B[j][0]; /**Putting row index in column place*/

C[q][2]=B[j][2]; /**Copying element value*/

q++;

C[0][0]=NoOfColoumn;
C[0][1]=NoOfRow;

C[0][2]=NonZeroEle;

cout<<"Transposed sparse matrix"<<endl;

DisplaySparse(C);

DisplayS2M();

void Matrix::ftrans() /**Fast transpose*/

int S[B[0][1]],T[B[0][1]],j;

int m=B[0][0];

int n=B[0][1];

int t=B[0][2];

C[0][0]=n;

C[0][1]=m;

C[0][2]=t;

if(t==0) /**t*/

return;

for(int i=0;i<n;i++) /**n*/

S[i]=0;

for(int i=1;i<=t;i++) /**t*/

S[B[i][1]-1]++;

}
T[0]=1;

for(int i=1;i<n;i++) /**n*/

T[i]=T[i-1]+S[i-1];

for(int i=1;i<=t;i++)

j=B[i][1];

C[T[j-1]][0]=B[i][1];

C[T[j-1]][1]=B[i][0];

C[T[j-1]][2]=B[i][2];

T[j-1]=T[j-1]+1;

cout<<"Fast Transposed sparse matrix"<<endl;

DisplaySparse(C);

DisplayS2M();

Output:
RADIX SORT:
#include<iostream>

using namespace std;

int largenum(int arr[], int n)

int max = arr[0];

for (int i = 1; i < n; i++)

if (arr[i] > max)

max = arr[i];

return max;

void countSort(int arr[], int n, int exp)

int output[n];

int i, count[10] = {0};

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

count[ (arr[i]/exp)%10 ]++;

for (i = 1; i < 10; i++)

count[i] += count[i - 1];

for (i = n - 1; i >= 0; i--)

output[count[ (arr[i]/exp)%10 ] - 1] = arr[i];

count[ (arr[i]/exp)%10 ]--;

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

arr[i] = output[i];

void radixsort(int arr[], int n)


{

int m = largenum(arr, n);

for (int exp = 1; m/exp > 0; exp *= 10)

countSort(arr, n, exp);

void display(int arr[], int n)

for (int i = 0; i < n; i++)

cout << arr[i] << " ";

int main()

int arr[50],n;

cout<<"Enter n: ";

cin>>n;

for(int i=0;i<n;i++)

cin>>arr[i];

cout<<endl<<"After sorting: ";

radixsort(arr, n);

display(arr, n);

return 0; }

Output:
POLYNOMIAL ADDITION:
#include<iostream>

using namespace std;

class Polynomial

int size;

public:

int *ptr;

Polynomial();

void Display();

Polynomial(int x);

void PolyAttach(int coef,int exp);

void PolyRemove(int coef,int exp);

Polynomial operator+(Polynomial &B);

};

int main()

cout<<"Enter Polynomial A"<<endl;

Polynomial A;

cout<<"\nEnter Polynomial B"<<endl;

Polynomial B;

cout<<"\nPolynomial A: ";

A.Display();

cout<<"\nPolynomial B: ";

B.Display();

Polynomial C(0);

C=A+B;

cout<<"\nAfter sum: ";


C.Display();

return 0;

Polynomial::Polynomial()

cout<<"Enter no of Terms: ";

cin>>size;

ptr = new int[2*size+1];

ptr[0]=size;

cout<<"INPUT FORMAT: coefficient exponent"<<endl;

int index=1;

for(int i=1;i<2*ptr[0];i+=2)

cout<<"Enter Term "<<index++<<": ";

cin>>ptr[i]>>ptr[i+1];

Polynomial::Polynomial(const int x=0)

ptr = new int[1];

ptr[0] = 0;

void Polynomial::Display()

for(int i=1;i<=2*ptr[0]-1;i=i+2)
{

cout<<ptr[i]<<"x^"<<ptr[i+1]<<" + ";

cout<<endl;

void Polynomial::PolyAttach(int coef,int exp)

int *temp= new int [2*size+3];

temp[0]=ptr[0]+1;

for(int i=1;i<=2*size-1;i+=2)

temp[i]=ptr[i];

temp[i+1]=ptr[i+1];

temp[2*size+1]=coef;

temp[2*size+2]=exp;

size++;

delete [] ptr;

ptr=temp;

void Polynomial::PolyRemove(int coef,int exp)

int pos;

int *temp=new int [2*size-1];

temp[0]=ptr[0]-1;

for(int i=2;i<2*size;i+=2)

{
if(ptr[i]==exp)

pos=i-1;

int j=1;

for(int i=1;i<=2*size-3;i+=2)

if(i!=pos)

temp[j++]=ptr[i];

temp[j++]=ptr[i+1];

else

continue;

size--;

delete [] ptr;

ptr=temp;

Polynomial Polynomial::operator+(Polynomial &B)

Polynomial C(0);

int p=1,q=1,r=1;

C.ptr = new int[2*(this->ptr[0]+B.ptr[0])+1];


while(p<=(2*this->ptr[0]-1)&&q<=(2*B.ptr[0]-1))

if(this->ptr[p+1]==B.ptr[q+1])

C.ptr[r]=this->ptr[p]+B.ptr[q];

if(C.ptr[r]!=0)

C.ptr[r+1]=this->ptr[p+1];

p=p+2;

r=r+2;

q=q+2;

else if(this->ptr[p+1]<B.ptr[q+1])

C.ptr[r]=this->ptr[p];

C.ptr[r+1]=this->ptr[p+1];

p=p+2;

r=r+2;

else

C.ptr[r] = B.ptr[q];

C.ptr[r+1] = B.ptr[q+1];

q=q+2;

r=r+2;

}
/**Copying remaining terms*/

while(p<=2*this->ptr[0]-1) /**Copying rest of this-> polynomial*/

C.ptr[r]=this->ptr[p];

C.ptr[r+1]=this->ptr[p+1];

r=r+2;

p=p+2;

while(q<=2*B.ptr[0]-1) /**Copying rest of B*/

C.ptr[r]=B.ptr[q];

C.ptr[r+1]=B.ptr[q+1];

r=r+2;

q=q+2;

r=r-2;

C.ptr[0]=(r+1)/2;

int *temp=new int[2*C.ptr[0]+1];

for(int i=0;i<2*C.ptr[0]+1;i++)

temp[i]=C.ptr[i];

delete []C.ptr;

C.ptr=temp;

return C;

Output:
INSERTION SORTING:
#include<iostream>

using namespace std;

void ins_sort(int a[],int n)

int value,pos;

for(int i=1;i<n;i++)

{
value=a[i];

pos=i;

while(pos>0 && a[pos-1]>value)

a[pos]=a[pos-1];

pos=pos-1;

a[pos]=value;

int main()

int arr[50],n;

cout<<"Enter n: ";

cin>>n;

cout<<endl;

for(int i=0;i<n;i++)

cin>>arr[i];

ins_sort(arr,n);

cout<<endl<<"Sorted Array is: "<<endl;

for(int j=0;j<n;j++)

cout<<arr[j]<<" ";

}
cout<<endl;

return 0;

Output:

BINARY SEARCH USING ARRAY:


#include<iostream>

using namespace std;

int BinarySearch(int arr[], int n, int val)

int mid,start=0,end;

end=n-1;

while(start<=end)

mid=(start+end)/2;
if(val==arr[mid])

return mid;

else if(val>arr[mid])

start=mid+1;

else if(val<arr[mid])

end=mid-1;

} }

return -1;

int main()

int arr[50],n,val,ans;

cin>>n;

for(int i=0;i<n;i++)

cin>>arr[i];

cin>>val;

ans=BinarySearch(arr,n,val);

cout<<ans;

return 0;

Output:
BINARY SEARCH TREE ->Insertion,Deletion,Inorder
Traversal :
#include<iostream>

#include<stdio.h>

using namespace std;

struct node

struct node *lchild;

int info;

struct node *rchild;

};

void inorder(struct node *ptr)

{
if(ptr==NULL)

return;

inorder(ptr->lchild);

cout<<ptr->info<<"\t";

inorder(ptr->rchild);

struct node *insert_rec(struct node *ptr,int ikey)

if(ptr==NULL)

ptr=new node;

ptr->info=ikey;

ptr->lchild=NULL;

ptr->rchild=NULL;

return ptr;

else if(ptr->info > ikey)

ptr->lchild=insert_rec(ptr->lchild,ikey);

else if(ptr->info < ikey)

ptr->rchild=insert_rec(ptr->rchild,ikey);

else

cout<<"duplicate key";

return ptr;

};

struct node *del(struct node *root,int dkey)

struct node *parent,*ptr,*child,*succ,*parsucc;

ptr=root;
parent=NULL;

while(ptr!=NULL)

if(dkey==ptr->info)

break;

parent=ptr;

if(dkey < ptr->info)

ptr=ptr->lchild;

else

ptr=ptr->rchild;

if(ptr==NULL)

cout<<"dkey is not present";

return root;

if(ptr->lchild!=NULL && ptr->rchild!=NULL)

parsucc=ptr;

succ=ptr->rchild;

while(succ->lchild!=NULL)

parsucc=succ;

succ=succ->lchild;

ptr->info=succ->info;

ptr=succ;

parent=parsucc;

if(ptr->lchild!=NULL)
child=ptr->lchild;

else

child=ptr->rchild;

if(parent==NULL)

root=child;

else if(ptr==parent->lchild)

parent->lchild=child;

else

parent->rchild=child;

delete ptr;

return root; } } }

int main()

struct node *root=NULL;

root=insert_rec(root,50);

root=insert_rec(root,30);

root=insert_rec(root,60);

root=insert_rec(root,38);

root=insert_rec(root,35);

root=insert_rec(root,55);

root=insert_rec(root,22);

root=insert_rec(root,59);

inorder(root);

return 0;

Output:
LEVEL ORDER TRAVERSAL:
#include <stdio.h>

#include <stdlib.h>

struct node

int data;

struct node* left, *right;

};

void printGivenLevel(struct node* root, int level);

int height(struct node* node);

struct node* newNode(int data);

void printLevelOrder(struct node* root)

int h = height(root);

int i;

for (i=1; i<=h; i++)


printGivenLevel(root, i);

void printGivenLevel(struct node* root, int level)

if (root == NULL)

return;

if (level == 1)

printf("%d ", root->data);

else if (level > 1)

printGivenLevel(root->left, level-1);

printGivenLevel(root->right, level-1);

int height(struct node* node)

if (node==NULL)

return 0;

else

int lheight = height(node->left);

int rheight = height(node->right);

if (lheight > rheight)

return(lheight+1);

else return(rheight+1);

struct node* newNode(int data)


{

struct node* node = (struct node*)

malloc(sizeof(struct node));

node->data = data;

node->left = NULL;

node->right = NULL;

return(node);

int main()

struct node *root = newNode(1);

root->left = newNode(2);

root->right = newNode(3);

root->left->left = newNode(4);

root->left->right = newNode(5);

printf("Level Order traversal of binary tree is \n");

printLevelOrder(root);

return 0;

Output:
NUMBER OF LEAF NODES:
#include <stdio.h>

#include <stdlib.h>

struct node

int data;

struct node* left;

struct node* right;

};

unsigned int getLeafCount(struct node* node)

if(node == NULL)
return 0;

if(node->left == NULL && node->right==NULL)

return 1;

else

return getLeafCount(node->left)+getLeafCount(node->right);

struct node* newNode(int data)

struct node* node = (struct node*)malloc(sizeof(struct node));

node->data = data;

node->left = NULL;

node->right = NULL;

return(node);

int main()

struct node *root = newNode(1);

root->left = newNode(2);

root->right = newNode(3);

root->left->left = newNode(4);

root->left->right = newNode(5);

printf("Leaf count of the tree is %d", getLeafCount(root));

getchar();

return 0;

Output:
ZIG ZAG TRAVERSAL:
#include<iostream>

#include<stdio.h>

#include<stack>

using namespace std;

struct node

struct node *lchild;

int info;

struct node *rchild;

};

struct node *insert(int data)


{

struct node *temp;

temp=new node;

temp->info=data;

temp->lchild=NULL;

temp->rchild=NULL;

return temp;

void zigzag(struct node *root)

if(root==NULL)

{ return; }

stack<struct node *>stack1;

stack<struct node *>stack2;

stack1.push(root);

while(!stack1.empty() || !stack2.empty())

while(!stack1.empty())

struct node *temp;

temp=stack1.top();

stack1.pop();

cout<<temp->info<<"\t";

if(temp->lchild!=NULL)

stack2.push(temp->lchild);

if(temp->rchild!=NULL)

stack2.push(temp->rchild);

}
while(!stack2.empty())

struct node *temp;

temp=stack2.top();

stack2.pop();

cout<<temp->info<<"\t";

if(temp->rchild!=NULL)

stack1.push(temp->rchild);

if(temp->lchild!=NULL)

stack1.push(temp->lchild);

} } }

int main()

struct node *root=NULL;

struct node *ptr,*q;

root=insert(1);

root->lchild=ptr=insert(2);

root->rchild=q=insert(3);

ptr->lchild=insert(4);

ptr->rchild=insert(5);

q->lchild=insert(6);

ptr->lchild->lchild=insert(7);

ptr->lchild->rchild=insert(8);

q->lchild->lchild=insert(9);

q->lchild->rchild=insert(10);

zigzag(root);

return 0;

}
Output:

Das könnte Ihnen auch gefallen