Documente Academic
Documente Profesional
Documente Cultură
(KMIT)
LAB MANUAL
Course Objectives:
It covers various concepts of C programming language
It introduces searching and sorting algorithms
It provides an understanding of data structures such as stacks and queues.
Course Outcomes:
AbilitytodevelopCprogramsforcomputingandreal-lifeapplicationsusingbasicelementslike
control statements, arrays, functions, pointers and strings, and data structures like stacks,
queues and linkedlists.
Ability to Implement searching and sortingalgorithms
LIST OF EXPERIMENTS
1. Write a program that uses functions to perform the following operations on singly
linked list.:
i) Creation ii)Insertion iii)Deletion iv)Traversal
2. Write a program that uses functions to perform the following operations on doubly
linked list.:
i) Creation ii)Insertion iii)Deletion iv)Traversal
3. Write a program that uses functions to perform the following operations on circular
linked list.:
i) Creation ii)Insertion iii)Deletion iv)Traversal
4. Write a program that implement stack (its operations)using
i) Arrays ii)Pointers
5. Write a program that implement Queue (its operations)using
i) Arrays ii)Pointers
6. Write a program that implements the following sorting methods to sort a given list of
integers in ascending order
i) Bubble sort ii)Selection sort iii) Insertion sort
7. Write a program that use both recursive and non recursive functions to perform the
following searching operations for a Key value in a given list of integers:
i) Linear search ii) Binary search
8. Write a program to implement the tree traversal methods.
TEXTBOOKS:
1. Fundamentals of Data Structures in C, 2ndEdition, E. Horowitz, S. Sahni and Susan
Anderson Freed, UniversitiesPress.
2. Data Structures using C – A. S. Tanenbaum, Y. Langsam, and M. J. Augenstein,
PHI/Pearson Education.
REFERENCE:
1. Data Structures: A Pseudocode Approach with C, 2ndEdition, R. F. Gilberg and B. A.
Forouzan, Cengage Learning.
1. Write a C Program to perform following operations on Singly Linked List ADT :
i. Create
ii. Insert
iii. Delete
iv. Display
v. Exit
PROGRAM:
#include<stdio.h>
#include<string.h>
#include<alloc.h>
#include<conio.h>
struct student
{
int sno;
char sname[25];
int m1,m2,m3;
int tot;
float per;
struct student *next;
};
void main()
{
char cont='y',choice;
char sear[20];
int ch,i,nsno;
struct student *pp,*fp,*p,*p1,*np;
clrscr();
do
{
printf("\n 1.Creation");
printf("\n 2.Traversing the Linked List");
printf("\n 3.Locating the particular element");
printf("\n 4.Inssertion");
printf("\n 5.Deletion");
printf("\n 6.Quit");
printf("\n Enter your choice:");
scanf("%d",&ch);
switch(ch)
{
case 1: fp=p=p1=(struct student *)malloc(sizeof(struct student));
while(cont=='y')
{
printf("enter student no");
scanf("%d", &p->sno);
printf("enter student name");
scanf("%s", &p->sname);
printf("enter student mark1");
scanf("%d", &p->m1);
printf("enter student mark2");
scanf("%d", &p->m2);
printf("enter student mark3");
scanf("%d", &p->m3);
(*p).tot=(*p).m1+(*p).m2+(*p).m3;
(*p).per=(float)(*p).tot/3.0;
printf("do you want to continue");
fflush(stdin);
cont=getchar();
if(cont=='y')
p->next=(struct student *)malloc(sizeof(struct student));
else
p->next=(struct student *)0;
p=p->next;
}
break;
case 2:p1=fp;
printf("traversing the linked list");
while(p1!=(struct student *)0)
{
printf("student no:%d\n",p1->sno);
printf("student name:%s\n",p1->sname);
printf("marks1:%d\n",p1->m1);
printf("marks2:%d\n",p1->m2);
printf("marks3:%d\n",p1->m3);
printf("total:%d\n",p1->tot);
printf("average:%f\n",p1->per);
getch();
p1=p1->next;
}
break;
case 3:p1=fp;
printf("enter name of the student that you want to find out:");
scanf("%s",sear);
while(p1!=(struct student *)0)
{
i=strcmp(p1->sname,sear);
if(i==0)
{
printf("student no:%d\n",p1->sno);
printf("student name:%s\n",p1->sname);
printf("marks1:%d\n",p1->m1);
printf("marks2:%d\n",p1->m2);
printf("marks3:%d\n",p1->m3);
printf("total:%d\n",p1->tot);
printf("average:%f\n",p1->per);
break;
}
p1=p1->next;
}
if(p1==0&&i!=0)
printf("\n name not found");
break;
PROGRAM:
#include <stdio.h>
#include <malloc.h>
#include<process.h>
void main()
{
node *left=NULL,*right;
int item,pos,ch;
switch(ch)
{
case 1:
left = DLcreation(&right);
break;
case 2:
printf("\nEnter data :");
scanf("%d",&item);
do
{
printf("\nEnter position of insertion :");
scanf("%d",&pos);
}while(pos < 1);
DLinsertion(&left,&right,item,pos);
break;
case 3:
DLdeletion(&left,&right);
break;
case 4:
printf("\n\t**** Doubly linked list *****\n");
DLdisplay(left,right);
break;
case 5:
exit(0);
default:
printf("\n Wrong Choice");
}
}while(ch!=5);
printf("\n");
}
/********** Creating of double linked list MENU **********/
/********** Function Definition begins **********/
node *DLcreation( node **right )
{
node *left, *new_node;
int item,ch;
*right = left = NULL;
do
{
printf("\n\t\tMenu");
printf("\n\t\t1.Add node");
printf("\n\t\t2.Quit");
printf("\n\t\tEnter choice : ");
scanf("%d",&ch);
switch(ch)
{
case 1:
printf("\n Enter data:");
scanf("%d",&item);
new_node = (node *)malloc(sizeof(node));
new_node->data = item;
new_node->rlink = NULL;
if(left == NULL)
{
new_node->llink = NULL;
}
else
{ left = new_node;
}
new_node->llink = (*right);
(*right)->rlink = new_node;
(*right) = new_node;
if(left != NULL)
(*right) = new_node;
break;
case 2:
break;
default:
printf("\n Wrong Choice");
}
}while(ch!=2);
return left;
}
/********** Function Definition ends **********/
if(*start != NULL)
{
if((*start)->data == item)
{
if((*start)->rlink == NULL)
*start = *right = NULL;
else
{
*start = (*start)->rlink;
(*start)->llink = NULL;
}
}
else
{
temp = *start;
prec = NULL;
while((temp->rlink != NULL) && (temp->data != item))
{
prec = temp;
temp = temp->rlink;
}
if(temp->data != item)
printf("\n Data in the list not found\n");
else
{
if(temp == *right)
else
*right = prec; temp->rlink->llink = temp->llink;
prec->rlink = temp->rlink;
}
}
}
else
printf("\n!!! Empty list !!!\n");
return;
}
/********** Function Definition ends **********/
PROGRAM:
#include <stdio.h>
#include <malloc.h>
#include<process.h>
void main()
{
node *START=NULL,*last;
int item,pos,ch;
switch(ch)
{
case 1 :
START = CLcreation(&last);
break;
case 2:
printf("\nEnter the element to be inserted :");
scanf("%d",&item);
do
{
printf("\nEnter the position of insertion :");
scanf("%d",&pos);
}while(pos < 1);
CLinsertion(&START,&last,item,pos);
break;
case 3:
do
{
printf("\nEnter the position of deletion :");
scanf("%d",&pos);
}while(pos < 1);
if (!CLdeletion(&START,&last,pos))
printf("Cannot delete element at position %d",pos);
break;
case 4:
printf("\n\t***** Single Circular linked list *****\n");
CLdisplay(START,last);
break;
case 5:
exit(0);
default:
printf("\n Wrong Choice:");
}
}while (ch!=5);
printf("\n");
}
*la
} st =
else *st
{ art;
else
temp = *start;
i = 2;
while((i < pos) && (temp->link != (*start)))
{
temp = temp->link;
++i;
}
if(temp->link == (*start))
*last = new_node;
new_node->link = temp->link;
temp->link = new_node;
}
}
/********** Function Definition ends **********/
if(*start != NULL)
if(pos == 1)
{
if((*start)->link != *start)
{
*start = (*start)->link;
(*last)->link = *start;
}
else
*start = *last = NULL;
}
else
{
temp = *start;
i = 2;
while((temp->link != (*start)) && (i<pos))
{
temp = temp->link;
++i;
}
if(temp->link != *start)
{
if(temp->link == *last)
*last = temp;
temp->link = temp->link->link;
}
else
flag = 0;
}
else
flag = 0;
return flag;
}
/********** Function Definition ends **********/
#include<stdio.h>
#include<conio.h>
void main()
{
int j,stack[5]={0};
int p=0;
clrscr();
printf("stack of five elements \n");
printf("put zero to exit \n");
while(1)
{
printf(" enter elements: ");
scanf("%d", &stack[p]);
if(stack[p]!=0)
printf("element %d is %d on top of the stack \n\n ",p+1,stack[p]);
else
{
printf(" \n By choice terminated : ");
printf(" \n The stack is filled with %d elements", p);
break;
}
p++;
if(p>4)
{
printf(" the stack is full");
break;
}
}
printf("\n elements of stack are: ");
for (j=0;j<p;j++)
printf("%d",stack[j]);
}
ii)Program to demonstrate the operation of Stacks using Linked Lists.
#include <stdio.h>
#include <malloc.h>
#include<process.h>
typedef struct link_tag
{
int data;
struct link_tag *link;
}node;
void main()
{
node *start=NULL;
int ch;
do
{
printf("\n\t\tMenu");
printf("\n\t\t1.Push");
printf("\n\t\t2.Pop");
printf("\n\t\t3.Display");
printf("\n\t\t4.Exit");
printf("\n\t\tEnter choice : ");
scanf("%d",&ch);
switch(ch)
{
case 1:
start = push(start);
break;
case 2:
start = pop(start);
break;
case 3:
printf("\n\t**** Stack *****\n");
display(start);
break;
case 4:
exit(0);
default:
printf("\nwrong choice:");
}
}
while (ch!=4);
printf("\n");
}
if(p == NULL)
printf("\n***** Empty *****\n");
else
{
printf("Popped data = %d\n",p->data);
temp = p->link;
free(p);
p = temp;
if (p == NULL)
printf("\n***** Empty *****\n");
}
return(p);
}
/********** Function Definition ends **********/
#include<stdio.h>
#include<conio.h>
#define SIZE 20
void main()
{
int data,ch;
queue Q;
clrscr();
create(&Q);
printf("\n\t\t Program shows working of queue using array");
do
{
printf("\n\t\t Menu");
printf("\n\t\t 1: enqueue");
printf("\n\t\t 2: dequeue ");
printf("\n\t\t 3: exit. ");
printf("\n\t\t Enter choice :");
scanf("%d",&ch);
switch(ch)
{
case 1:
if (Q.rear >= SIZE)
{
printf("\n Queue is
full"); continue;
}
e
ls printf("\n Enter number to be added
e
queue"); { in a scanf("%d",&data);
enqueue(&Q,data);
printf("\n Elements in a queue are:"); display(&Q);
continue;
}
case 2: dequeue(&Q,data);
if (Q.front==0)
{
continue;
}
else
{
printf("\n Elements in a queue are :");
display(&Q);
continue;
}
case 3: printf("\n finish"); return;
}
}while(ch!=3);
getch();
}
}
/********** Function Definition ends **********/
#include <stdio.h>
#include <malloc.h>
#include<process.h>
void main()
{
node *front = NULL, *rear = NULL;
int ch,item;
do
{
printf("\n\t\tMenu");
printf("\n\t\t1.enqueue");
printf("\n\t\t2.dequeue");
printf("\n\t\t3.display");
printf("\n\t\t4.exit");
printf("\n\t\tEnter choice : ");
scanf("%d",&ch);
switch(ch)
{
case 1:
printf("Enter an data to be enqueueed : ");
scanf("%d",&item);
enqueue(&front,&rear,item);
break;
case 2:
dequeue(&front);
break;
case 3:
printf("\n\t**** Queue *****\n");
display(front);
case 4:
break; exit(0);
default:
printf("\n wrong choice:");
}
}
while (ch!=4);
printf("\n");
}
if ((*front) == NULL)
{
(*front) = new_node;
(*rear) = new_node;
}
else
{
(*rear)->link = new_node;
(*rear) = new_node;
}
return;
}
/********** Function Definition ends **********/
if((*front) != NULL)
{
temp = *front;
(*front) = (*front)->link;
free(temp);
}
return;
}
/********** Function Definition ends **********/
#include<stdio.h>
#include<conio.h>
void main()
{
int a[50],t,i;
int n,c=0;
clrscr();
printf("enter the total no. of elements ");
scanf("%d",&n);
printf("enter the numbers");
for(c=0;c<n;c++)
scanf("%d",&a[c]);
c=0;
while(c<n)
{
for(i=0;i<n-c;i++)
{
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
c=c+1;
}
printf("the sorted numbers are");
for(c=0;c<n;c++)
printf("%d",a[c]);
}
ii)Program on selection sort
#include<stdio.h>
void main()
{
int A[20], N, Temp, i, j;
clrscr();
printf("\n\n\t ENTER THE NUMBER OF TERMS...: ");
scanf("%d",&N);
printf("\n\t ENTER THE ELEMENTS OF THE ARRAY...:");
for(i=1; i<=N; i++)
{
gotoxy(25, 11+i);
scanf("\n\t\t%d", &A[i]);
}
for(i=1; i<=N-1; i++)
for(j=i+1; j<=N;j++)
if(A[i]>A[j])
{
Temp = A[i];
A[i] = A[j];
A[j] = Temp;
}
printf("\n\tTHE ASCENDING ORDER LIST IS...:\n");
for(i=1; i<=N; i++)
printf("\n\t\t\t%d",A[i]);
getch();
}
#include<stdio.h>
void main()
{
int A[20], N, Temp, i, j;
clrscr();
printf("\n\n\t ENTER THE NUMBER OF TERMS...: ");
scanf("%d", &N);
printf("\n\t ENTER THE ELEMENTS OF THE ARRAY...:");
for(i=1; i<=N; i++)
{
gotoxy(25,11+i);
scanf("\n\t\t%d", &A[i]);
}
for(i=2; i<=N; i++)
{
Temp = A[i];
j = i-1;
while(Temp<A[j] && j>=1)
{
A[j+1] = A[j];
j = j-1;
}
A[j+1] = Temp;
}
printf("\n\tTHE ASCENDING ORDER LIST IS...:\n");
for(i=1; i<=N; i++)
printf("\n\t\t\t%d", A[i]);
getch();
}
7.Write a program that use both recursive and non recursive functions to perform the following
searching operations for a Key value in a given list o integers:
i)Linearsearch
#include<stdio.h>
#include<conio.h>
void main()
{
int i, a[20], n, key, flag = 0;
clrscr();
printf(“Enter the size of an array \n”);
scanf(“%d”, &n);
printf(“Enter the array elements”);
for(i = 0; i < n; i++)
{
scanf(“%d”, &a[i]);
}
printf(“Enter the key elements”);
scanf(“%d”, &key);
for(i = 0; i < n; i++)
{
if(a[i] == key)
{
flag = 1;
break;
}
}
if(flag == 1)
printf(“The key elements is found at location %d”, i + 1);
else
printf(“The key element is not found in the array”);
getch();
}
ii) Binarysearch
#include<stdio.h>
#include<conio.h>
void main()
{
int a[20], i, n, key, low, high, mid;
clrscr();
printf(“Enter the array elements in ascending order”);
for(i = 0; i < n; i++)
{
scanf(“%d”, &a[i]);
}
printf(“Enter the key element\n”);
scanf(“%d”, &key);
low = 0;
high = n - 1;
while(high >= low)
{
mid = (low + high) / 2;
if(key == a[mid])
break;
else
{
if(key > a[mid])
low = mid + 1;
else
high = mid - 1;
}
}
if(key == a[mid])
printf(“The key element is found at location %d”, mid + 1);
else
printf(“the key element is not found”); getch();}
8.Write a program to implement the tree traversal methods.
#include<stdio.h>
# define NULL 0
struct node
{
int data;
struct node *left;
struct node *right;
}*head,*prev,*temp,*newnode,*p1;
void main()
{
int d;
do{
clrscr();
printf("\n Tree Operation");
printf("\n 1.Create");
printf("\n 2.Traverse");
printf("\n 3.Exit");
printf("\n Enter your choice");
scanf("%d",&d);
switch(d)
{
case 1: create();
break;
case 2: traverse();
break;
}
}while(d!=3);
}
create()
{
int n,i;
printf("Enter how many nodes you want to insert\n");
scanf("%d",&n);
head=NULL;
printf("Enter the data");
for(i=1;i<=n;i++)
{
newnode=(struct node *) malloc(sizeof(struct node));
temp=head;
scanf("%d",&newnode->data);
newnode->left=NULL;
newnode->right=NULL;
if(head==NULL)
head=newnode;
else
{
while(temp!=NULL)
{
prev=temp;
if(newnode->data<temp->data)
temp=temp->left;
else
temp=temp->right;
}
if(newnode->data<prev->data)
prev->left=newnode;
pre
} v-
} >rig
return; ht=
} new
else nod
e;
traverse()
{
int d;
do{
clrscr();
printf("\nTraversal Operations");
printf("\n1. In Order");
printf("\n2. PreOrder");
printf("\n3. PostOrder");
printf("\n4. Exit");
printf("\nEnter your chioce");
scanf("%d",&d);
switch(d)
{
case 1:
printf("The inorder is::\n");
inorder();
} getch();
break;
case 2 :
printf("The Preorder is::\n");
preorder();
getch();
break;
case 3 :
printf("The postorder is ::\n");
postorder();
getch();
break;
}while(d!=4);
return;
}
inorder()
{
int top=0;
int stack[100],pp;
struct node *p1;
stack[top]=NULL;
p1=head;
do{
while(p1!=NULL)
{
top=top+1; //PUSH OPERATION
stack[top]=p1;
p1=p1->left;
}
if(top!=0)
{
p1=stack[top]; //POP OPERATION
top--;
printf("%5d",p1->data);
p1=p1->right;
}
}while((p1!=NULL) || (top!=0));
return;
}
preorder()
{
int top=0;
int stack[100];
struct node *p1;
stack[top]=NULL;
p1=head;
do{
while(p1!=NULL) //PUSH OPERATION
{
printf("%5d",p1->data);
top++;
stack[top]=p1;
p1=p1->left;
}
p1=stack[top];
top--;
p1=p1->right;
}while((top!=0) || (p1!=NULL));
return;
}
postorder()
{
int top=0,c=0;
int stack[100],pp,temp[20],i,j;
struct node *p1;
stack[top]=NULL;
p1=head;
do{
while(p1!=NULL)
{
top++;
stack[top]=p1;
if(p1->right!=NULL)
{
stack[++top]=p1->right;
stack[top]=-stack[top];
}
p1=p1->left;
}
pp=stack[top];
top--;
while(pp>0)
{
p1=pp;
temp[c++]=p1->data;
pp=stack[top--];
}
if (pp<0) p1=-pp;
}while(top!=NULL);
for(i=0;i<c;i++)
{
for(j=0;j<c;j++)
{
if ((i!=j) && (temp[i]==temp[j]))
temp[j]=0;
}
}
for(i=0;i<c;i++)
{
if (temp[i]!=0)
printf("%5d",temp[i])
}
return;
}
9. Write C programs for implementing the following graph traversal
algorithm for Depth first traversal
It is like tree. Traversal can start from any vertex, say Vi . Vi is visited and then
all vertices adjacent to Vi are traversed recursively using DFS. Since, a graph can
have cycles. We must avoid revisiting a node. To do this, when we visit a vertex
V, we mark it visited. A node that has already been marked as visited should not
be selected for traversal. Marking of visited vertices can be done with the help of
a global array visited[ ]. Array visited[ ] is initialized to false (0).
3 for(i=0;i<n;i++)
4 visited[i] = 0;
7 {
8 visited[i]=1;
10 if(!visited[w])
11 DFS(w);
12 }
#include <stdio.h>
void dfs(int);
int g[10][10],visited[10],n,vertex[10]; void main()
{
int i,j;
printf("enter number of vertices:"); scanf("%d",&n);
printf("enter the val of vertex:"); for(i=0;i<n;i++)
scanf("%d",&vertex[i]);
printf("\n enter adjecency matrix of the graph:"); for(i=0;i<n;i++)
for(j=0;j<n;j++) scanf("%d",&g[i][j]);
for(i=0;i<n;i++) visited[i]=0; dfs(0);
}
void dfs(int i)
{
int j;
printf("%d",vertex[i]);
visited[i]=1;
for(j=0;j<n;j++)
if(!visited[j]&&g[i][j]==1)
dfs(j);
}
C program to implement Breadth First Search(BFS).
Breadth First Search is an algorithm used to search a Tree or Graph. BFS search
#include<stdio.h>
void bfs(int v) {
q[++r] = i;
if(f <= r) {
visited[q[f]] = 1;
bfs(q[f++]);
void main() {
int v;
scanf("%d", &n);
q[i] = 0;
visited[i] = 0;
}
printf("\n Enter graph data in matrix form:\n");
for(j=1;j<=n;j++) {
scanf("%d", &a[i][j]);
scanf("%d", &v);
bfs(v);
if(visited[i])
printf("%d\t", i);
else {
break;
}
Beyond the syllabus
The graph shown above is taken as input in both the programs mentioned below:
void DFS(int);
int G[10][10],visited[10],n; //n is no of vertices and graph is sorted in array G[10][10]
void main()
{
int i,j;
printf("Enter number of vertices:");
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&G[i][j]);
DFS(0);
}
void DFS(int i)
{
int j;
printf("\n%d",i);
visited[i]=1;
for(j=0;j<n;j++)
if(!visited[j]&&G[i][j]==1)
DFS(j);
Depth First Search (DFS) Program in C [Adjacency List]
#include<stdio.h>
#include<stdlib.h>
node *G[20];
//heads of linked list
int visited[20];
int n;
void read_graph();
//create adjacency list
void insert(int,int);
//insert an edge (vi,vj) in te adjacency list
void DFS(int);
void main()
{
int i;
read_graph();
//initialised visited to 0
for(i=0;i<n;i++)
visited[i]=0;
DFS(0);
}
void DFS(int i)
{
node *p;
printf("\n%d",i);
p=G[i];
visited[i]=1;
while(p!=NULL)
{
i=p->vertex;
if(!visited[i])
DFS(i);
p=p->next;
}
}
void read_graph()
{
int i,vi,vj,no_of_edges;
printf("Enter number of vertices:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
G[i]=NULL;
//read edges and insert them in G[]
for(i=0;i<no_of_edges;i++)
{
printf("Enter an edge(u,v):");
scanf("%d%d",&vi,&vj);
insert(vi,vj);
}
}
}
while(p->next!=NULL)
p=p->next;
p->next=q;
}
}
The vertex 0 is the starting vertex in our case. We start our traversal from the vertex 0. Then we
will visit all vertices adjacent to vertex 0 i.e., 1, 4, 3. Here, we can visit these three vertices in
any order. Suppose we visit the vertices in order 1,3,4.
The traversal would be: 0 1 3 4
Now, we shall visit all the vertices adjacent to 1, then all the vertices adjacent to 3 and then all
the vertices adjacent to 4. So first we shall visit 2 (since it is adjacent to 1), then 6 (since it is
adjacent to 3) and 5, 7 (since these are adjacent to 4).
Note: Vertex 4 is adjacent to vertices 1 and 3, but it has already been visited so we’ve ignored it.
The traversal would be: 0 1 3 4 2 6 5 7
Now, we shall visit all the vertices adjacent to 2, 6, 5, and 7 one by one. We can see that vertex 5
is adjacent to vertex 2. Since, it has already been traversed upon before, we have don’t need to
traverse through it again and move on to the next vertex. Now, the vertices 4 and 7 are adjacent
to the vertex 6. Since, they have been traversed upon before, we will not traverse on them again.
Vertex 5 does not have any adjacent vertices. Vertices 5 and 8 are adjacent to vertex 7. Since,
vertex 5 has been traversed upon before, we will not traverse it again. However, vertex 8 has not
yet been visited. So we will traverse on vertex 8.
The traversal would be: 0 1 3 4 2 6 5 7 8
Now, we need to visit vertices adjacent to vertex 8. However, there is no vertex adjacent to
vertex 8 and hence we will have to stop the traversal here.
Note: There’s no unique traversal and it can be different based on the order of the successors.
We shall look at a BFS program in C for directed Graph using a Queue. This program reaches only
those vertices that are reachable from the start vertex.
#include<stdio.h>
#include<stdlib.h>
#define initial 1
#define waiting 2
#define visited 3
int n;
int adj[MAX][MAX];
int state[MAX];
void create_graph();
void BF_Traversal();
void BFS(int v);
int main()
{
create_graph();
BF_Traversal();
return 0;
}
void BF_Traversal()
{
int v;
void BFS(int v)
{
int i;
insert_queue(v);
state[v] = waiting;
while(!isEmpty_queue())
{
v = delete_queue( );
printf("%d ",v);
state[v] = visited;
int isEmpty_queue()
{
if(front == -1 || front > rear)
return 1;
else
return 0;
}
int delete_queue()
{
int delete_item;
if(front == -1 || front > rear)
{
printf("Queue Underflow\n");
exit(1);
}
delete_item = queue[front];
front = front+1;
return delete_item;
}
void create_graph()
{
int count,max_edge,origin,destin;
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX 5
struct Vertex {
char label;
bool visited;
};
//queue variables
int queue[MAX];
int front = 0;
int queueItemCount = 0;
//graph variables
//array of vertices
//adjacency matrix
int adjMatrix[MAX][MAX];
//vertex count
int vertexCount = 0;
//queue functions
queue[++rear] = data;
queueItemCount++;
int removeData() {
queueItemCount--;
return queue[front++];
bool isQueueEmpty() {
return queueItemCount == 0;
//graph functions
vertex->visited = false;
lstVertices[vertexCount++] = vertex;
adjMatrix[start][end] = 1;
adjMatrix[end][start] = 1;
printf("%c ",lstVertices[vertexIndex]->label);
int i;
return i;
return -1;
void breadthFirstSearch() {
int i;
lstVertices[0]->visited = true;
displayVertex(0);
//insert vertex index in queue
insert(0);
int unvisitedVertex;
while(!isQueueEmpty()) {
lstVertices[unvisitedVertex]->visited = true;
displayVertex(unvisitedVertex);
insert(unvisitedVertex);
for(i = 0;i<vertexCount;i++) {
lstVertices[i]->visited = false;
int main() {
int i, j;
adjMatrix[i][j] = 0;
addVertex('S'); // 0
addVertex('A'); // 1
addVertex('B'); // 2
addVertex('C'); // 3
addVertex('D'); // 4
addEdge(0, 1); // S - A
addEdge(0, 2); // S - B
addEdge(0, 3); // S - C
addEdge(1, 4); // A - D
addEdge(2, 4); // B - D
addEdge(3, 4); // C - D
breadthFirstSearch();
return 0;
Kmp program
if (j == M) {
printf("Found pattern at index %d ", i - j);
j = lps[j - 1];
}
struct LinkedList
{
Node *head;
LinkedList()
{
head = NULL;
}
ll.reverse();
Output:
Given linked list
85 15 4 20
Reversed Linked list
20 4 15 85