├── BreadthFirstSearch.c ├── BreadthFirstSearchGeneric.c ├── DATA sTRUCTURE.docx ├── DepthFirstSearch.c ├── Dynamic Programming ├── ExtendedShortestPath.c ├── FinateStateAutomata.c ├── FloydWarshell.c ├── GCDImp.c ├── GraphInput.c ├── HeapSort.c ├── KMPStringMatching.c ├── KruskalAlgorithm.c ├── LinkedList.c ├── LinkedlistClass.c ├── LongestCommonSubsequence.c ├── MatrixMultiplication.c ├── MergeSort.c ├── NaiveStringMatching.c ├── PrimsAlgorithm.c ├── QuickSort.c ├── RobinKarpStringMatching.c ├── StackImplementation.c ├── StronglyConnectedComponents.c ├── TOH.c ├── UnionFindAlgorithms.c ├── bigmod.c ├── countingSort.c ├── factorial.c ├── gcd.c ├── insertionsort.c ├── kahnsAlgorithmTopologicalSort.c └── mst.c /BreadthFirstSearch.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int distance[100]; 4 | int predecessor[100]; 5 | int graph[100][100]; 6 | 7 | void PrintPath(int s, int v) 8 | { 9 | if(v==s) 10 | { 11 | printf("%d ",s); 12 | } 13 | else if(predecessor[v]==1000) 14 | { 15 | printf("No path from %d to %d exists.",s,v); 16 | } 17 | else 18 | { 19 | PrintPath(s,predecessor[v]); 20 | printf("%d ",v); 21 | } 22 | 23 | } 24 | int main() 25 | { 26 | int vertex, edge; 27 | int source,destination; 28 | int i,j; 29 | int start,end; 30 | int count; 31 | 32 | int color[100]; 33 | int Queue[100]; 34 | int head=1,tail=1; 35 | 36 | 37 | freopen("bfs.txt","r",stdin); 38 | 39 | scanf("%d %d",&source,&destination); 40 | scanf("%d %d",&vertex,&edge); 41 | 42 | for(i=1; i<=edge; i++) 43 | { 44 | for(j=1; j<=edge; j++) 45 | { 46 | scanf("%d %d",&start,&end); 47 | graph[start][end]=1; 48 | graph[end][start]=1; 49 | } 50 | } 51 | 52 | for(i=1; i<=vertex; i++) 53 | { 54 | color[i]=1; 55 | distance[i]=1000; 56 | predecessor[i]=-1; 57 | } 58 | 59 | color[source]=2; 60 | distance[source]=0; 61 | predecessor[source]=1000; 62 | 63 | Queue[head++]=source; 64 | 65 | int u; 66 | 67 | while(head!=tail) 68 | { 69 | u=Queue[tail]; 70 | tail++; 71 | printf("%d \n",u); 72 | for(i=1; i<=vertex; i++) 73 | { 74 | if(graph[u][i]==1 && color[i]==1) 75 | { 76 | printf("White with edge.%d %d\n",u,i); 77 | color[i]=2; 78 | distance[i]=distance[u]+1; 79 | predecessor[i]=u; 80 | //printf("Queue: %d ",Queue[head]); 81 | Queue[head++]=i; 82 | } 83 | } 84 | color[u]=3; 85 | } 86 | printf("\nColor:\n"); 87 | for(i=1; i<=vertex; i++) 88 | { 89 | printf("%d ",color[i]); 90 | } 91 | 92 | printf("\nDistance:\n"); 93 | for(i=1; i<=vertex; i++) 94 | { 95 | printf("%d ",distance[i]); 96 | } 97 | 98 | printf("\npredecessor:\n"); 99 | for(i=1; i<=vertex; i++) 100 | { 101 | printf("%d ",predecessor[i]); 102 | } 103 | printf("\n"); 104 | 105 | 106 | PrintPath(source,destination); 107 | } 108 | -------------------------------------------------------------------------------- /BreadthFirstSearchGeneric.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int distance[100]; 4 | int predecessor[100]; 5 | int graph[100][100]; 6 | 7 | void PrintPath(int s, int v) 8 | { 9 | if(v==s) 10 | { 11 | printf("%d ",s); 12 | } 13 | else if(predecessor[v]==1000) 14 | { 15 | printf("No path from %d to %d exists.",s,v); 16 | } 17 | else 18 | { 19 | PrintPath(s,predecessor[v]); 20 | printf("%d ",v); 21 | } 22 | 23 | } 24 | int main() 25 | { 26 | int vertex, edge; 27 | int source,destination; 28 | int count,ttl; 29 | int i,j; 30 | int start,end; 31 | int color[100]; 32 | int Queue[100]; 33 | int head=1,tail=1; 34 | 35 | freopen("bfsgeneric.txt","r",stdin); 36 | 37 | scanf("%d %d",&source,&destination); 38 | scanf("%d",&ttl); 39 | scanf("%d %d",&vertex,&edge); 40 | 41 | for(i=1; i<=edge; i++) 42 | { 43 | for(j=1; j<=edge; j++) 44 | { 45 | scanf("%d %d",&start,&end); 46 | graph[start][end]=1; 47 | graph[end][start]=1; 48 | } 49 | } 50 | 51 | for(i=1; i<=vertex; i++) 52 | { 53 | color[i]=1; 54 | distance[i]=1000; 55 | predecessor[i]=-1; 56 | } 57 | color[source]=2; 58 | distance[source]=0; 59 | predecessor[source]=1000; 60 | 61 | Queue[head++]=source; 62 | 63 | int u; 64 | while(head!=tail) 65 | { 66 | u=Queue[tail]; 67 | tail++; 68 | //printf("%d \n",u); 69 | for(i=1; i<=vertex; i++) 70 | { 71 | if(graph[u][i]==1 && color[i]==1) 72 | { 73 | //printf("White with edge.%d %d\n",u,i); 74 | color[i]=2; 75 | distance[i]=distance[u]+1; 76 | predecessor[i]=u; 77 | Queue[head++]=i; 78 | } 79 | } 80 | color[u]=3; 81 | } 82 | printf("Color:\n"); 83 | for(i=1; i<=vertex; i++) 84 | { 85 | printf("%d ",color[i]); 86 | } 87 | 88 | printf("\nDistance:\n"); 89 | for(i=1; i<=vertex; i++) 90 | { 91 | printf("%d ",distance[i]); 92 | } 93 | 94 | printf("\npredecessor:\n"); 95 | for(i=1; i<=vertex; i++) 96 | { 97 | printf("%d ",predecessor[i]); 98 | } 99 | printf("\n"); 100 | 101 | printf("\nUva Problem:339:\n"); 102 | count=0; 103 | for(i=1; i<=vertex; i++) 104 | { 105 | if(distance[i]<=ttl) 106 | { 107 | count++; 108 | } 109 | } 110 | printf("\nUndiscovered vertexes are: %d\n",(vertex-count)); 111 | printf("\nPath from Source: %d to Destination: %d is:---\n",source,destination); 112 | PrintPath(source,destination); 113 | } 114 | -------------------------------------------------------------------------------- /DATA sTRUCTURE.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/buerfan/DataStructures/7b85984447f3fa99ce9a2b16adcc5b87f5d75d88/DATA sTRUCTURE.docx -------------------------------------------------------------------------------- /DepthFirstSearch.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int graph[100][100]; 4 | int discovered[100],finished[100]; 5 | int color[100],predecessor[100]; 6 | int vertex,edge; 7 | 8 | int time; 9 | 10 | void DFSVisit(int u) 11 | { 12 | time=time+1; 13 | discovered[u]=time; 14 | color[u]=2; 15 | int i; 16 | 17 | for(i=1;i<=vertex;i++) 18 | { 19 | if(graph[u][i]==1 && color[i]==1) 20 | { 21 | predecessor[i]=u; 22 | DFSVisit(i); 23 | } 24 | } 25 | color[u]=3; 26 | time=time+1; 27 | finished[u]=time; 28 | } 29 | int main() 30 | { 31 | int i,j; 32 | 33 | int start,end; 34 | 35 | 36 | int time; 37 | 38 | freopen("scc.txt","r",stdin); 39 | scanf("%d %d",&vertex,&edge); 40 | 41 | for(i=1;i<=edge;i++) 42 | { 43 | scanf("%d %d",&start,&end); 44 | graph[start][end]=1; 45 | } 46 | 47 | for(i=1;i<=vertex;i++) 48 | { 49 | color[i]=1; 50 | predecessor[i]=1000; 51 | } 52 | 53 | for(i=1;i<=vertex;i++) 54 | { 55 | printf("%d ",color[i]); 56 | 57 | } 58 | 59 | time=0; 60 | 61 | for(i=1;i<=vertex;i++) 62 | { 63 | if(color[i]==1) 64 | { 65 | DFSVisit(i); 66 | } 67 | 68 | } 69 | 70 | printf("\nColor:\n"); 71 | for(i=1; i<=vertex; i++) 72 | { 73 | printf("%d ",color[i]); 74 | } 75 | 76 | printf("\nDiscovered:\n"); 77 | for(i=1; i<=vertex; i++) 78 | { 79 | printf("%d ",discovered[i]); 80 | } 81 | 82 | printf("\npredecessor:\n"); 83 | for(i=1; i<=vertex; i++) 84 | { 85 | printf("%d ",predecessor[i]); 86 | } 87 | printf("\n"); 88 | 89 | printf("\nfinished:\n"); 90 | for(i=1; i<=vertex; i++) 91 | { 92 | printf("%d ",finished[i]); 93 | } 94 | printf("\n"); 95 | 96 | for(i=1;i<=vertex;i++) 97 | { 98 | for(j=1;j<=vertex;j++) 99 | { 100 | printf("%d ",graph[i][j]); 101 | } 102 | printf("\n"); 103 | } 104 | } 105 | 106 | 107 | -------------------------------------------------------------------------------- /Dynamic Programming: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /ExtendedShortestPath.c: -------------------------------------------------------------------------------- 1 | #include 2 | int findMinimum(int a,int b); 3 | int main() 4 | { 5 | int i,j,k; 6 | int min,min_a; 7 | int s[100],w[100],d[100]; 8 | int W[100][100],L[100][100],R[100][100],S[100][100]; 9 | int T[100][100],U[100][100]; 10 | 11 | freopen("esp1.txt","r",stdin); 12 | 13 | for(i=1; i<=5; i++) 14 | { 15 | for(j=1; j<=5; j++) 16 | { 17 | if(i!=j) 18 | { 19 | W[i][j]=100; 20 | } 21 | } 22 | } 23 | for(i=1; i<=9; i++) 24 | { 25 | scanf("%d %d %d",&s[i],&d[i],&w[i]); 26 | W[s[i]][d[i]]=w[i]; 27 | } 28 | 29 | for(i=1; i<=5; i++) 30 | { 31 | for(j=1; j<=5; j++) 32 | { 33 | scanf("%d",&L[i][j]); 34 | } 35 | } 36 | 37 | for(i=1; i<=5; i++) 38 | { 39 | for(j=1; j<=5; j++) 40 | { 41 | printf("%d",L[i][j]); 42 | } 43 | printf("\n"); 44 | } 45 | /* 46 | for(i=1; i<=5; i++) 47 | { 48 | for(j=1; j<=5; j++) 49 | { 50 | printf("%d ",W[i][j]); 51 | } 52 | printf("\n"); 53 | } 54 | 55 | printf("\n\n"); 56 | for(i=1; i<=5; i++) 57 | { 58 | for(j=1; j<=5; j++) 59 | { 60 | printf("%d ",L[i][j]); 61 | } 62 | printf("\n"); 63 | } 64 | */ 65 | for(i=1;i<=5;i++) 66 | { 67 | for(j=1;j<=5;j++) 68 | { 69 | min=100; 70 | for(k=1;k<=5;k++) 71 | { 72 | min_a=L[i][k]+W[k][j]; 73 | min=findMinimum(min,min_a); 74 | } 75 | R[i][j]=min; 76 | } 77 | } 78 | 79 | for(i=1;i<=5;i++) 80 | { 81 | for(j=1;j<=5;j++) 82 | { 83 | min=100; 84 | for(k=1;k<=5;k++) 85 | { 86 | min_a=R[i][k]+W[k][j]; 87 | min=findMinimum(min,min_a); 88 | } 89 | S[i][j]=min; 90 | } 91 | } 92 | 93 | for(i=1;i<=5;i++) 94 | { 95 | for(j=1;j<=5;j++) 96 | { 97 | min=100; 98 | for(k=1;k<=5;k++) 99 | { 100 | min_a=S[i][k]+W[k][j]; 101 | min=findMinimum(min,min_a); 102 | } 103 | T[i][j]=min; 104 | } 105 | } 106 | 107 | for(i=1;i<=5;i++) 108 | { 109 | for(j=1;j<=5;j++) 110 | { 111 | min=100; 112 | for(k=1;k<=5;k++) 113 | { 114 | min_a=T[i][k]+W[k][j]; 115 | min=findMinimum(min,min_a); 116 | } 117 | U[i][j]=min; 118 | } 119 | } 120 | printf("\n\n"); 121 | for(i=1; i<=5; i++) 122 | { 123 | for(j=1; j<=5; j++) 124 | { 125 | printf("%d ",U[i][j]); 126 | } 127 | printf("\n"); 128 | } 129 | 130 | } 131 | 132 | int findMinimum(int a,int b) 133 | { 134 | if(a 2 | #include 3 | 4 | int TransitionTable() 5 | { 6 | return 0; 7 | } 8 | int main() 9 | { 10 | char Text[100]="abcdefab"; 11 | char Pattern[30]="ab"; 12 | int i,j,shift,counter; 13 | int textLength, patternLength; 14 | int shiftLength,s; 15 | int q; 16 | 17 | textLength=strlen(Text); 18 | patternLength=strlen(Pattern); 19 | 20 | q=0; 21 | for(i=1;i<=textLength;i++) 22 | { 23 | q=TransitionTable(); 24 | q=TransitionTable(q,Text[i]); 25 | 26 | } 27 | 28 | 29 | } 30 | -------------------------------------------------------------------------------- /FloydWarshell.c: -------------------------------------------------------------------------------- 1 | #include 2 | int findMinimum(int a,int b); 3 | int main() 4 | { 5 | int i,j,k; 6 | int s[100],w[100],d[100],W[100][100],D[100][100]; 7 | int min,min_a; 8 | 9 | freopen("esp1.txt","r",stdin); 10 | 11 | for(i=1; i<=5; i++) 12 | { 13 | for(j=1; j<=5; j++) 14 | { 15 | if(i!=j) 16 | { 17 | W[i][j]=100; 18 | } 19 | 20 | } 21 | } 22 | 23 | for(i=1; i<=5; i++) 24 | { 25 | for(j=1; j<=5; j++) 26 | { 27 | if(i!=j) 28 | { 29 | D[i][j]=100; 30 | } 31 | 32 | } 33 | } 34 | 35 | for(i=1; i<=9; i++) 36 | { 37 | scanf("%d %d %d",&s[i],&d[i],&w[i]); 38 | W[s[i]][d[i]]=w[i]; 39 | } 40 | 41 | for(i=1; i<=5; i++) 42 | { 43 | for(j=1; j<=5; j++) 44 | { 45 | //printf("%d ",W[i][j]); 46 | } 47 | // printf("\n"); 48 | } 49 | printf("\n\n"); 50 | for(k=1;k<=5;k++) 51 | { 52 | for(i=1;i<=5;i++) 53 | { 54 | 55 | for(j=1;j<=5;j++) 56 | { 57 | min=W[i][j]; 58 | min_a=(W[i][k]+W[k][j]); 59 | min=findMinimum(min,min_a); 60 | D[i][j]=min; 61 | } 62 | 63 | } 64 | 65 | for(i=1;i<=5;i++) 66 | { 67 | for(j=1;j<=5;j++) 68 | { 69 | printf("%d ",D[i][j]); 70 | } 71 | printf("\n"); 72 | } 73 | 74 | printf("\n"); 75 | } 76 | 77 | 78 | printf("\n\n"); 79 | for(i=1; i<=5; i++) 80 | { 81 | for(j=1; j<=5; j++) 82 | { 83 | //printf("%d ",D[i][j]); 84 | } 85 | //printf("\n"); 86 | } 87 | } 88 | 89 | int findMinimum(int a,int b) 90 | { 91 | if(a<=b) return a; 92 | else return b; 93 | } 94 | -------------------------------------------------------------------------------- /GCDImp.c: -------------------------------------------------------------------------------- 1 | #include 2 | int GreatestCommonDivisor(int a,int b){ 3 | if(b!=0){ 4 | return GreatestCommonDivisor(b,a%b); 5 | } 6 | else return a; 7 | } 8 | int main() 9 | { 10 | int a,b,c; 11 | int gcd; 12 | freopen("gcd.txt","r",stdin); 13 | scanf("%d %d %d",&a,&b,&c); 14 | gcd=GreatestCommonDivisor(a,GreatestCommonDivisor(b,c)); 15 | printf("%d",gcd); 16 | } 17 | 18 | -------------------------------------------------------------------------------- /GraphInput.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | char Node[100][100]; 5 | int N=1; 6 | int addNode(char node[]); 7 | 8 | int main() 9 | { 10 | int i; 11 | char source[100],des[100]; 12 | int in1,in2; 13 | int graph[100][100]; 14 | freopen("gr.txt","r",stdin); 15 | 16 | for(i=1;i<=14;i++) 17 | { 18 | scanf("%s %s",&source,&des); 19 | 20 | in1=addNode(source); 21 | in2=addNode(des); 22 | 23 | printf("%d %d\n",in1,in2); 24 | printf("%s %s\n",Node[in1],Node[in2]); 25 | } 26 | 27 | } 28 | 29 | int addNode(char node[]) 30 | { 31 | int i; 32 | for(i=1;i<=N;i++) 33 | { 34 | if(strcmp(Node[i],node)==0) 35 | { 36 | return i; 37 | } 38 | 39 | } 40 | strcpy(Node[N++],node); 41 | return N-1; 42 | } 43 | -------------------------------------------------------------------------------- /HeapSort.c: -------------------------------------------------------------------------------- 1 | #include 2 | int A[100]; 3 | int heapsize=10; 4 | int left(int i){ 5 | return 2*i; 6 | } 7 | 8 | int right(int i){ 9 | return (2*i)+1; 10 | } 11 | 12 | int maxHeapify(int A[],int i){ 13 | int l,r,largest; 14 | int temp; 15 | 16 | l=left(i); 17 | r=right(i); 18 | 19 | if(l<=heapsize && A[l]>A[i]){ 20 | largest=l; 21 | } 22 | else{ 23 | largest=i; 24 | } 25 | if(r<=heapsize && A[r]>=A[largest]){ 26 | largest=r; 27 | } 28 | 29 | if(largest!=i){ 30 | 31 | temp=A[i]; 32 | A[i]=A[largest]; 33 | A[largest]=temp; 34 | 35 | maxHeapify(A,largest); 36 | } 37 | } 38 | int buildMaxHeap(int A[]){ 39 | int i; 40 | for(i=(heapsize/2);i>=1;i--){ 41 | maxHeapify(A,i); 42 | } 43 | 44 | } 45 | int heapSort(int A[]){ 46 | int temp,i; 47 | int length; 48 | buildMaxHeap(A); 49 | length=heapsize; 50 | for(i=length;i>=2;i--){ 51 | temp=A[1]; 52 | A[1]=A[i]; 53 | A[i]=temp; 54 | 55 | heapsize=heapsize-1; 56 | maxHeapify(A,1); 57 | } 58 | } 59 | 60 | int main() 61 | { 62 | int i; 63 | 64 | freopen("heapSort.txt","r",stdin); 65 | 66 | for(i=1;i<=10;i++) 67 | { 68 | scanf("%d",&A[i]); 69 | } 70 | 71 | heapSort(A); 72 | printf("\n"); 73 | for(i=1;i<=10;i++) 74 | { 75 | printf("%d ",A[i]); 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /KMPStringMatching.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | int main() 4 | { 5 | int i,j,m,k,q,n; 6 | while(scanf("%d %d",&n,&m)!=EOF) 7 | { 8 | char text[100];//="AAAAABAAABA"; 9 | char pattern[100];//="AABA"; 10 | 11 | scanf("%s",text); 12 | scanf("%s",pattern); 13 | 14 | int prefixFunc[100]; 15 | n=strlen(text); 16 | m=strlen(pattern); 17 | 18 | prefixFunc[0]=0; 19 | k=0; 20 | for(q=1; q0 && pattern[k]!=pattern[q]) 23 | { 24 | k=prefixFunc[k-1]; 25 | } 26 | if(pattern[k]==pattern[q]) 27 | { 28 | k=k+1; 29 | } 30 | 31 | prefixFunc[q]=k; 32 | } 33 | printf("Prefix Function Value is: "); 34 | for(i=0; i0 && pattern[j]!=text[i]) 44 | { 45 | j=prefixFunc[j-1]; 46 | } 47 | if(pattern[j]==text[i]) 48 | { 49 | j=j+1; 50 | } 51 | if(j==m) 52 | { 53 | printf("Match occures with shift %d\n",(i-m+1)); 54 | j=prefixFunc[j-1]; 55 | } 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /KruskalAlgorithm.c: -------------------------------------------------------------------------------- 1 | #include 2 | int graph[10000][10000]; 3 | int parent[10000]; 4 | 5 | int Find(int i) 6 | { 7 | while(parent[i]) 8 | i=parent[i]; 9 | return i; 10 | } 11 | 12 | int Union(int i, int j) 13 | { 14 | if(i!=j) 15 | { 16 | parent[j]=i; 17 | return 1; 18 | } 19 | return 0; 20 | } 21 | int main() 22 | { 23 | int vertex,edge; 24 | int start,end,weight; 25 | int i,j; 26 | 27 | freopen("kruskal1.txt","r",stdin); 28 | scanf("%d %d",&vertex,&edge); 29 | 30 | for(i=1; i<=edge; i++) 31 | { 32 | for(j=1; j<=edge; j++) 33 | { 34 | graph[i][j]=1000001; 35 | } 36 | } 37 | 38 | for(i=1; i<=edge; i++) 39 | { 40 | for(j=1; j<=edge; j++) 41 | { 42 | scanf("%d %d %d",&start,&end,&weight); 43 | graph[start][end]=graph[end][start]=weight; 44 | } 45 | } 46 | 47 | for(i=1; i<=edge; i++) 48 | { 49 | for(j=1; j<=edge; j++) 50 | { 51 | //printf("%d ",graph[i][j]); 52 | } 53 | //printf("\n"); 54 | } 55 | 56 | int ne=1; 57 | int a,b; 58 | int u,v; 59 | int minCost=0; 60 | int min; 61 | 62 | while(ne 2 | 3 | struct node 4 | { 5 | int data; 6 | struct node *next; 7 | } ; 8 | 9 | struct node *head,*newnode,*temp,*temp1; 10 | void printNode(){ 11 | temp1=head; 12 | while(temp1!=0){ 13 | printf("%d ",temp1->data); 14 | temp1=temp1->next; 15 | } 16 | } 17 | void insertNode() 18 | { 19 | //printf("Value of New node : %d \n",newnode); 20 | //printf("Value of New node : %d \n",newnode->data); 21 | //printf("Value of New node : %d \n",newnode->next); 22 | //printf("Value of head : %d\n",head); 23 | if(head==0) 24 | { 25 | head=temp=newnode; 26 | //printf("Value of head : %d ",head); 27 | } 28 | else 29 | { 30 | temp->next=newnode; 31 | temp=newnode; 32 | } 33 | 34 | } 35 | int main() 36 | { 37 | int choice; 38 | head=0; 39 | freopen("linkedlist.txt","r",stdin); 40 | while(choice) 41 | { 42 | newnode=(struct node*)malloc(sizeof(struct node)); 43 | //printf("Enter the value of New Node:\n"); 44 | scanf("%d",&newnode->data); 45 | newnode->next=0; 46 | insertNode(); 47 | //printf("Do you want to continue:(0,1):\n"); 48 | scanf("%d",&choice); 49 | } 50 | printf("Values in the linked list are: \n"); 51 | printNode(); 52 | } 53 | -------------------------------------------------------------------------------- /LinkedlistClass.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | struct node{ 4 | int data; 5 | struct node *next; 6 | }; 7 | 8 | struct node *newnode,*head,*temp,*temp1; 9 | 10 | void printNode(){ 11 | 12 | temp1=head; 13 | while(temp1!=0){ 14 | printf("%d\n",temp1->data); 15 | temp1=temp1->next; 16 | } 17 | 18 | } 19 | 20 | void insertNode(int value){ 21 | newnode=(struct node*)malloc(sizeof(struct node)); 22 | 23 | newnode->data=value; 24 | newnode->next=0; 25 | 26 | if(head==0){ 27 | temp=head=newnode; 28 | } 29 | else{ 30 | temp->next=newnode; 31 | temp=newnode; 32 | } 33 | } 34 | int main() 35 | { 36 | int i,input; 37 | head=0; 38 | for(i=1;i<=5;i++){ 39 | scanf("%d",&input); 40 | insertNode(input); 41 | } 42 | printNode(); 43 | } 44 | -------------------------------------------------------------------------------- /LongestCommonSubsequence.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | int pathTable[100][100]; 4 | 5 | int LCS(char *x,char *y,int m,int n) 6 | { 7 | int i,j; 8 | int table[m+1][n+1]; 9 | 10 | 11 | for(i=0; i<=m; i++) 12 | { 13 | table[i][0]=0; 14 | } 15 | for(j=0; i<=n; j++) 16 | { 17 | table[0][j]=0; 18 | } 19 | 20 | for(i=1; i<=m; i++) 21 | { 22 | for(j=1; j<=n; j++) 23 | { 24 | if(x[i-1]==y[j-1]) 25 | { 26 | table[i][j]=table[i-1][j-1]+1; 27 | //pathTable[i][j]=3; 28 | } 29 | else if(table[i-1][j]>=table[i][j-1]) 30 | { 31 | table[i][j]=table[i-1][j]; 32 | //pathTable[i][j]=1; 33 | } 34 | else 35 | { 36 | table[i][j]=table[i][j-1]; 37 | //pathTable[i][j]=2; 38 | } 39 | } 40 | } 41 | for(i=0; i<=m; i++) 42 | { 43 | for(j=0; j<=n; j++) 44 | { 45 | printf("%d ",table[i][j]); 46 | } 47 | printf("\n"); 48 | } 49 | printf("\n\n"); 50 | for(i=0; i<=m; i++) 51 | { 52 | for(j=0; j<=n; j++) 53 | { 54 | //printf("%d ",pathTable[i][j]); 55 | } 56 | //printf("\n"); 57 | } 58 | return table[m][n]; 59 | } 60 | 61 | 62 | void PrintLCS(char *x,int i,int j) 63 | { 64 | if(i==0 || j==0) 65 | { 66 | return; 67 | } 68 | if(pathTable[i][j]==3) 69 | { 70 | PrintLCS(x,i-1,j-1); 71 | printf("%c ",x[i-1]); 72 | } 73 | else if(pathTable[i][j]==1) 74 | { 75 | PrintLCS(x,i-1,j); 76 | } 77 | else 78 | PrintLCS(x,i,j-1); 79 | } 80 | 81 | int main() 82 | { 83 | char x[1000];//="bcacbcabbaccbab";//="abcbdab"; 84 | char y[1000];//="bccabccbbabacbc";//="bdcaba"; 85 | 86 | 87 | int m,n; 88 | int lengthLCS; 89 | int table[100][100]; 90 | int pathTable[100][100]; 91 | int i,j; 92 | 93 | while(1) 94 | { 95 | gets(x); 96 | gets(y); 97 | m=strlen(x); 98 | n=strlen(y); 99 | 100 | lengthLCS=LCS(x,y,m,n); 101 | printf("%d\n",lengthLCS); 102 | //PrintLCS(x,m,n); 103 | //printf("\n"); 104 | } 105 | 106 | 107 | 108 | 109 | 110 | 111 | /* 112 | for(i=0; i=table[i][j-1]) 130 | { 131 | table[i][j]=table[i-1][j]; 132 | pathTable[i][j]=1; 133 | } 134 | else 135 | { 136 | table[i][j]=table[i][j-1]; 137 | pathTable[i][j]=2; 138 | } 139 | } 140 | } 141 | 142 | for(i=1; i 2 | int C[10][10]; 3 | void SquareMatrixMultiply(int A[10][10],int B[10][10]); 4 | 5 | int main() 6 | { 7 | int i,j,k; 8 | int A[10][10],B[10][10];//,C[10][10]; 9 | 10 | freopen("mat.txt","r",stdin); 11 | 12 | for(i=1;i<=3;i++) 13 | { 14 | for(j=1;j<=3;j++) 15 | { 16 | scanf("%d",&A[i][j]); 17 | } 18 | } 19 | for(i=1;i<=3;i++) 20 | { 21 | for(j=1;j<=3;j++) 22 | { 23 | scanf("%d",&B[i][j]); 24 | } 25 | } 26 | for(i=1;i<=3;i++) 27 | { 28 | for(j=1;j<=3;j++) 29 | { 30 | printf("%d ",A[i][j]); 31 | } 32 | printf("\n"); 33 | } 34 | printf("\n\n"); 35 | for(i=1;i<=3;i++) 36 | { 37 | for(j=1;j<=3;j++) 38 | { 39 | printf("%d ",B[i][j]); 40 | } 41 | printf("\n"); 42 | } 43 | SquareMatrixMultiply(A,B); 44 | /* 45 | for(i=1;i<=3;i++) 46 | { 47 | for(j=1;j<=3;j++) 48 | { 49 | sum=0; 50 | for(k=1;k<=3;k++) 51 | { 52 | sum=sum+(A[i][k]*B[k][j]); 53 | } 54 | C[i][j]=sum; 55 | } 56 | } 57 | */ 58 | printf("\n\n"); 59 | 60 | for(i=1;i<=3;i++) 61 | { 62 | for(j=1;j<=3;j++) 63 | { 64 | printf("%d ",C[i][j]); 65 | } 66 | printf("\n"); 67 | } 68 | } 69 | 70 | 71 | void SquareMatrixMultiply(int A[10][10],int B[10][10]) 72 | { 73 | int i,j,k; 74 | int sum; 75 | for(i=1;i<=3;i++) 76 | { 77 | for(j=1;j<=3;j++) 78 | { 79 | sum=0; 80 | for(k=1;k<=3;k++) 81 | { 82 | sum=sum+(A[i][k]*B[k][j]); 83 | } 84 | C[i][j]=sum; 85 | } 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /MergeSort.c: -------------------------------------------------------------------------------- 1 | #include 2 | int main() 3 | { 4 | int left[100]={2,4,5,7,100000}; 5 | int right[100]={1,2,3,6,100000}; 6 | int outputResult[100]; 7 | int i,j,k; 8 | 9 | i=0; 10 | j=0; 11 | for(k=0;k<=7;k++) 12 | { 13 | if(left[i]<=right[j]) 14 | { 15 | outputResult[k]=left[i]; 16 | i++; 17 | } 18 | else 19 | { 20 | outputResult[k]=right[j]; 21 | j++; 22 | } 23 | } 24 | 25 | for(i=0;i<=7;i++) 26 | { 27 | printf("%d ",outputResult[i]); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /NaiveStringMatching.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | int main() 4 | { 5 | char Text[100]="abcdefab"; 6 | char Pattern[30]="ab"; 7 | int i,j,shift,counter; 8 | int textLength, patternLength; 9 | int shiftLength,s; 10 | 11 | textLength=strlen(Text); 12 | patternLength=strlen(Pattern); 13 | shiftLength=textLength-patternLength; 14 | 15 | 16 | for(s=0;s<=shiftLength;s++) 17 | { 18 | counter=0; 19 | for(i=0;i 2 | int graph[100][100]; 3 | int key[100]; 4 | int predecessor[100]; 5 | int visited[100]; 6 | int ne=1,a,b,min,minCost=0; 7 | 8 | int main() 9 | { 10 | int vertex,edge; 11 | int start,end,weight; 12 | int i,j; 13 | 14 | freopen("prims.txt","r",stdin); 15 | scanf("%d %d",&vertex,&edge); 16 | 17 | for(i=1; i<=edge; i++) 18 | { 19 | for(j=1; j<=edge; j++) 20 | { 21 | graph[i][j]=1000; 22 | } 23 | } 24 | 25 | for(i=1; i<=edge; i++) 26 | { 27 | for(j=1; j<=edge; j++) 28 | { 29 | scanf("%d %d %d",&start,&end,&weight); 30 | graph[start][end]=graph[end][start]=weight; 31 | } 32 | } 33 | 34 | for(i=1; i<=vertex; i++) 35 | { 36 | for(j=1; j<=vertex; j++) 37 | { 38 | printf("%d ",graph[i][j]); 39 | } 40 | printf("\n"); 41 | } 42 | 43 | for(i=1; i<=vertex; i++) 44 | { 45 | visited[i]=0; 46 | } 47 | 48 | visited[1]=1; 49 | 50 | for(i=1; i<=vertex; i++) 51 | { 52 | printf("%d ",visited[i]); 53 | } 54 | 55 | int u,v; 56 | 57 | 58 | while(ne 2 | int inputSize; 3 | int A[100]; 4 | int QuickSort(int A[],int p,int r) 5 | { 6 | int q; 7 | if(p 2 | #include 3 | int main() 4 | { 5 | int h,p,t,d,n,m,q; 6 | int i,j; 7 | 8 | d=256; 9 | p=0; 10 | t=0; 11 | q=101; 12 | char text[100]="Sanfoundry Linux Training";//="AAAAABAAABA"; 13 | char pattern[100]="nux"; 14 | 15 | n=strlen(text); 16 | m=strlen(pattern); 17 | 18 | for(i=0;i 2 | int top; 3 | int S[100]; 4 | int pop(int S[]){ 5 | if(stackEmpty(S)){ 6 | printf("Under Flow...\n"); 7 | } 8 | else if(top>0){ 9 | top=top-1; 10 | return S[top+1]; 11 | } 12 | } 13 | int stackEmpty(S){ 14 | if(top==0){ 15 | return 1; 16 | } 17 | else 18 | return 0; 19 | } 20 | void printStack(){ 21 | int i; 22 | for(i=1;i<=top;i++){ 23 | printf("%d ",S[i]); 24 | } 25 | } 26 | int push(int S[],int x) 27 | { 28 | top=top+1; 29 | S[top]=x; 30 | } 31 | int main() 32 | { 33 | //push(S,15); 34 | //printf("%d ",stackEmpty(S)); 35 | push(S,15); 36 | push(S,6); 37 | push(S,2); 38 | push(S,9); 39 | 40 | printStack(); 41 | printf("\n"); 42 | 43 | printf("After pop, Pop element is: %d\n",pop(S)); 44 | 45 | printf("After pop, Pop element is: %d\n",pop(S)); 46 | printf("After pop, Pop element is: %d\n",pop(S)); 47 | 48 | printf("After pop, Pop element is: %d\n",pop(S)); 49 | printf("After pop, Pop element is: %d\n",pop(S)); 50 | printf("\n"); 51 | 52 | printStack(); 53 | } 54 | -------------------------------------------------------------------------------- /StronglyConnectedComponents.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int graph[100][100]; 4 | int discovered[100],finished[100]; 5 | int color[100],predecessor[100]; 6 | int vertex,edge; 7 | int transPoseGraph[100][100]; 8 | int stack[100]; 9 | int front=1; 10 | int finishedJob[100]; 11 | int tranposeColor[100]; 12 | int time; 13 | 14 | int trans_time=0;; 15 | int transFinished[100]; 16 | int transDiscovered[100]; 17 | 18 | void DFSVisit(int u) 19 | { 20 | time=time+1; 21 | discovered[u]=time; 22 | color[u]=2; 23 | int i; 24 | 25 | for(i=1; i<=vertex; i++) 26 | { 27 | if(graph[u][i]==1 && color[i]==1) 28 | { 29 | predecessor[i]=u; 30 | DFSVisit(i); 31 | } 32 | } 33 | 34 | color[u]=3; 35 | time=time+1; 36 | finished[u]=time; 37 | 38 | stack[front]=u; 39 | finishedJob[front]=time; 40 | front++; 41 | } 42 | 43 | 44 | void TransposeDFS(int u) 45 | { 46 | trans_time=0; 47 | trans_time=trans_time+1; 48 | tranposeColor[u]=2; 49 | transDiscovered[u]=trans_time; 50 | 51 | int i; 52 | //printf("%d ",u); 53 | for(i=1; i<=vertex; i++) 54 | { 55 | if(transPoseGraph[u][i]==1 && tranposeColor[i]==1) 56 | { 57 | printf("%d --> %d\n",u,i); 58 | TransposeDFS(i); 59 | } 60 | } 61 | trans_time=trans_time+1; 62 | transFinished[u]=trans_time; 63 | tranposeColor[u]=3; 64 | for(i=1; i<=vertex; i++) 65 | { 66 | printf("%d ",tranposeColor[i]); 67 | } 68 | 69 | printf("\n"); 70 | 71 | } 72 | int main() 73 | { 74 | 75 | int i,j; 76 | 77 | int start,end; 78 | 79 | int time; 80 | 81 | freopen("scc.txt","r",stdin); 82 | scanf("%d %d",&vertex,&edge); 83 | 84 | for(i=1; i<=edge; i++) 85 | { 86 | scanf("%d %d",&start,&end); 87 | graph[start][end]=1; 88 | transPoseGraph[end][start]=1; 89 | } 90 | 91 | for(i=1; i<=vertex; i++) 92 | { 93 | color[i]=1; 94 | predecessor[i]=1000; 95 | } 96 | 97 | for(i=1; i<=vertex; i++) 98 | { 99 | printf("%d ",color[i]); 100 | } 101 | 102 | time=0; 103 | 104 | for(i=1; i<=vertex; i++) 105 | { 106 | if(color[i]==1) 107 | { 108 | DFSVisit(i); 109 | } 110 | 111 | } 112 | 113 | printf("\nColor:\n"); 114 | for(i=1; i<=vertex; i++) 115 | { 116 | printf("%d ",color[i]); 117 | } 118 | 119 | printf("\nDiscovered:\n"); 120 | for(i=1; i<=vertex; i++) 121 | { 122 | printf("%d ",discovered[i]); 123 | } 124 | 125 | printf("\npredecessor:\n"); 126 | for(i=1; i<=vertex; i++) 127 | { 128 | printf("%d ",predecessor[i]); 129 | } 130 | printf("\n"); 131 | 132 | printf("\nfinished:\n"); 133 | for(i=1; i<=vertex; i++) 134 | { 135 | printf("%d ",finished[i]); 136 | } 137 | printf("\n"); 138 | /* 139 | for(i=1; i<=vertex; i++) 140 | { 141 | for(j=1; j<=vertex; j++) 142 | { 143 | printf("%d ",transPoseGraph[i][j]); 144 | } 145 | printf("\n"); 146 | } 147 | */ 148 | printf("\n"); 149 | printf("\n"); 150 | 151 | printf("Stack Value:\n"); 152 | for(i=1; i=1; i--) 164 | { 165 | //printf("%d ",stack[i]); 166 | TransposeDFS(stack[i]); 167 | 168 | } 169 | printf("Transpose color:\n"); 170 | for(i=1; i<=vertex; i++) 171 | { 172 | printf("%d ",tranposeColor[i]); 173 | } 174 | 175 | 176 | for(i=1; i<=vertex; i++) 177 | { 178 | printf("%d ",transFinished[i]); 179 | } 180 | 181 | } 182 | 183 | 184 | 185 | -------------------------------------------------------------------------------- /TOH.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int TOH(int disks, char source, char auxilary, char destination){ 4 | if(disks>0){ 5 | TOH(disks-1,source,destination,auxilary); 6 | printf("Move disks # %d from %c -->%c\n",disks,source,destination); 7 | TOH(disks-1,auxilary,source,destination); 8 | } 9 | } 10 | int main(){ 11 | char source, auxilary,destination; 12 | source='A'; 13 | auxilary='B'; 14 | destination='C'; 15 | TOH(4,source,auxilary, destination); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /UnionFindAlgorithms.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int parent[100]; 4 | int n=6; 5 | int i; 6 | 7 | void Initialization() 8 | { 9 | int i; 10 | for(i=0;i 2 | int BigMod(int a,int p,int q){ 3 | int x; 4 | if(p==1) return; 5 | if(p%2==0){ 6 | x=BigMod(a,p/2,q)%q; 7 | return (x*x)%q; 8 | } 9 | else if(p%2==1){ 10 | return ((a%q)*(BigMod(a,p-1,q)%q))%q; 11 | } 12 | } 13 | 14 | int main() 15 | { 16 | int a, p, q; 17 | int mod; 18 | freopen("bigmod.txt","r",stdin); 19 | scanf("%d %d %d",&a,&p,&q); 20 | mod=BigMod(a,p,q); 21 | 22 | printf("%d",mod); 23 | } 24 | -------------------------------------------------------------------------------- /countingSort.c: -------------------------------------------------------------------------------- 1 | #include 2 | int inputSize; 3 | 4 | int countingSort(int A[],int B[], int k) 5 | { 6 | int i,j, C[100]; 7 | for(i=0; i<=k; i++) 8 | { 9 | C[i]=0; 10 | } 11 | 12 | for(j=1; j<=inputSize; j++) 13 | { 14 | C[A[j]]= C[A[j]]+1; 15 | } 16 | /*for(i=0; i<=k; i++) 17 | { 18 | printf("%d ", C[i]); 19 | 20 | printf("\n");*/ 21 | for(i=1;i<=k;i++) 22 | { 23 | C[i] = C[i] + C[i-1]; 24 | } 25 | for(j=inputSize;j>=1;j--) 26 | { 27 | B[C[A[j]]] = A[j]; 28 | C[A[j]] = C[A[j]] - 1; 29 | } 30 | for(i=1; i<=inputSize;i++) 31 | { 32 | printf("%d ", B[i]); 33 | 34 | } 35 | printf("\n"); 36 | } 37 | 38 | int maximum(int A[]){ 39 | int max; 40 | max=A[1]; 41 | for(i=2;i<=inputSize;i++){ 42 | if(A[i]>max){ 43 | max=A[i]; 44 | } 45 | } 46 | return max; 47 | 48 | } 49 | int main() 50 | { 51 | int i, A[100]; 52 | int B[100]; 53 | 54 | 55 | freopen("countingSort.txt","r",stdin); 56 | scanf("%d",&inputSize); 57 | k=maximum(A); 58 | for(i=1; i<=inputSize; i++) 59 | { 60 | scanf("%d", &A[i]); 61 | } 62 | 63 | countingSort(A,B,k); 64 | 65 | 66 | /*for(i=1; i<=8; i++) 67 | { 68 | printf("%d ", A[i]); 69 | }*/ 70 | 71 | 72 | return 0; 73 | } 74 | -------------------------------------------------------------------------------- /factorial.c: -------------------------------------------------------------------------------- 1 | #include 2 | int factorialByRecurrsion(int fac){ 3 | if(fac!=0){ 4 | return fac*factorialByRecurrsion(fac-1); 5 | } 6 | else{ 7 | return 1; 8 | } 9 | } 10 | 11 | int factorial(int fac){ 12 | 13 | int product=1; 14 | int i; 15 | for(i=fac; i>=1; i--) 16 | { 17 | product=product*i; 18 | } 19 | return product; 20 | } 21 | int main() 22 | { 23 | int fac; 24 | fac=factorialByRecurrsion(5); 25 | printf("%d",fac); 26 | 27 | } 28 | -------------------------------------------------------------------------------- /gcd.c: -------------------------------------------------------------------------------- 1 | #include 2 | int gcd(int a,int b) 3 | { 4 | if(a>b) 5 | { 6 | if(b!=0) 7 | { 8 | gcd(b,a%b); 9 | } 10 | else return a; 11 | } 12 | else 13 | { 14 | if(a!=0) 15 | { 16 | gcd(a,b%a); 17 | } 18 | else return b; 19 | } 20 | 21 | } 22 | int main() 23 | { 24 | int g; 25 | g=gcd(5,7); 26 | 27 | printf("%d",g); 28 | } 29 | -------------------------------------------------------------------------------- /insertionsort.c: -------------------------------------------------------------------------------- 1 | #include 2 | int inputSize; 3 | int insertionSort(int A[]) 4 | { 5 | int i,j,key; 6 | 7 | 8 | for(j=2; j<=inputSize; j++) 9 | { 10 | key=A[j]; 11 | i=j-1; 12 | while(i>0 && A[i]>key) 13 | { 14 | A[i+1]=A[i]; 15 | i=i-1; 16 | } 17 | 18 | A[i+1]=key; 19 | } 20 | 21 | for(i=1; i<=inputSize; i++) 22 | { 23 | printf("%d ",A[i]); 24 | } 25 | } 26 | int main() 27 | { 28 | int i,inputArray[100]; 29 | int t=2; 30 | int testCase; 31 | 32 | freopen("insertionsort.txt","r",stdin); 33 | //freopen("insertionsortoutput.txt","w",stdout); 34 | scanf("%d",&testCase); 35 | for(t=1; t<=testCase; t++) 36 | { 37 | scanf("%d",&inputSize); 38 | for(i=1; i<=inputSize; i++) 39 | { 40 | scanf("%d",&inputArray[i]); 41 | } 42 | printf("\n"); 43 | 44 | 45 | insertionSort(inputArray); 46 | } 47 | 48 | 49 | 50 | } 51 | -------------------------------------------------------------------------------- /kahnsAlgorithmTopologicalSort.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int graph[100][100]; 4 | 5 | int main() 6 | { 7 | int vertex,edge; 8 | int i,j; 9 | int start,end; 10 | int inDegree[100]; 11 | int Queue[100]; 12 | 13 | freopen("kahn.txt","r",stdin); 14 | scanf("%d %d",&vertex,&edge); 15 | 16 | for(i=0; i 2 | 3 | int main() 4 | { 5 | struct books 6 | { 7 | int source; 8 | int des; 9 | int weight; 10 | } book; 11 | 12 | book.source=100; 13 | printf("%d",book.source); 14 | } 15 | --------------------------------------------------------------------------------