Try the following code....
Code:
#include<stdio.h>
#include<malloc.h>
typedef struct node
{
int data;
struct node *next;
}NODE;
NODE *CreateList()
{
int total,num,flag=0,i;
NODE *start,*new,*last;
printf("\nHow many Nodes? : ");
scanf("%d",&total);
start = NULL;
for (i=0; i<total; i++)
{
printf("\nEnter Data : ");
scanf("%d",&num);
new = (NODE *)malloc(sizeof(NODE));
new->data = num;
new->next = NULL;
if(flag == 0)
{
start = new;
last = start;
flag = 1;
}
else
{
last->next = new;
last = new;
}
}
return start;
}
Show(NODE *head)
{
NODE *temp;
temp = head;
printf("\n");
if(temp==NULL)
{
printf("\nThe list is empty");
return;
}
while(temp != NULL)
{
printf(" %d ",temp->data);
temp = temp->next;
}
printf("\n");
}
int Lookup(NODE *start,NODE *end,int num)
{
NODE *head1,*head2,*mid,*b4mid;
int found = 0;
head1 = start;
head2 = start;
while( (head2 != end) && (head2->next != end) )
{
head2 = head2->next->next;
b4mid = head1;
head1 = head1->next;
}
mid = head1;
printf("\nStart = %d, Mid = %d,End = %d, Data = %d",start->data,mid->data,end->data,num);
if(mid->data < num)
{
if(end->data < num || num < start->data) /*Num is beyond range*/
found = 0;
else
found += Lookup(mid->next,end,num);
}
else if(mid->data > num)
{
if(start->data > num)
found = 0;
else
found += Lookup(start,b4mid,num);
}
else if(mid->data == num)
found += 1;
else
found = 0;
return found;
}
int BinarySearch(NODE *head,int num)
{
NODE *start,*mid,*b4mid,*end,*head1,*head2;
int found = 0;
head1 = head;
head2 = head;
start = head;
while( (head2!=NULL) && (head2->next != NULL) )
{
head2 = head2->next->next;
b4mid = head;
head = head->next;
}
mid = head;
end = head2;
printf("\nStart = %d, Mid = %d,End = %d, Data = %d",start->data,mid->data,end->data,num);
if(mid->data < num)
{
if(end->data < num) /*Num is beyond range*/
found = 0;
else
found += Lookup(mid->next,end,num);
}
else if(mid->data > num)
{
if(start->data > num)
found = 0;
else
found += Lookup(start,b4mid,num);
}
else if(mid->data == num)
found += 1;
else
found = 0;
return found;
}
main()
{
int val;
NODE *head;
head = CreateList();
Show(head);
printf("\nTo be searched? ");
scanf("%d",&val);
val = BinarySearch(head,val);
if(val == 1)
{
printf("\nData found in a given list\n");
}
else
{
printf("\nData does not exist in a given list\n");
}
}