简体   繁体   中英

This code doesn't return output. I need help please

I write a code that will ask for 10 integer input and search a number using binary search in linked list but my code didn't return value. The code shown bellow:

#include<stdio.h>
#include<stdlib.h>

//Node of a Linked List
struct Node{
int data;
struct Node *next;
};

//function to create a new node
struct Node* newNode(int key){
struct Node* temp = (struct Node*)malloc(sizeof(struct Node));
temp->data = key;
temp->next = NULL;
return temp;
}

//function to insert a node at the beginning of the Linked List
void insertAtBeginning(struct Node **head, int key){
struct Node* temp = newNode(key);
temp->next = *head;
*head = temp;
}

//function to search an element in a Linked List using Binary Search
int binarySearch(struct Node* head, int key){
if(head == NULL) 

return 0;

int l = 0, r = 0;

//find the length of the Linked List
struct Node* temp = head;
while(temp != NULL){
    r++;
    temp = temp->next;
}

//perform binary search on the Linked List
while(l<=r){
    int mid = l + (r-l)/2;
    temp = head;
    for(int i=0;i<mid;i++){
        temp = temp->next;
    }
    if(temp->data == key) return 1;
    else if(temp->data > key) r = mid - 1;
    else l = mid + 1;
}
return l;
}

int main(){
struct Node* head = NULL;

int key;
printf("Enter 10 integers: \n");
for(int i=0;i<10;i++){
    scanf("%d", &key);
    insertAtBeginning(&head, key);
}

printf("Enter the element to be searched: ");
scanf("%d", &key);

if(binarySearch(head, key)) 
printf("Element Found\n");
else printf("Element not Found\n");

return 0;
}

My code should return "Element found" or "Element not Found"

In binary searching fonction, r should be the max index; in the code it is the length of the list, which is the max+1 since indexing start at 0.

Also, the function should return 0 when nothing is found: here it returns the min index l .

//function to search an element in a Linked List using Binary Search
int binarySearch(struct Node* head, int key){
    if(head == NULL) 
        return 0;

    int l = 0, r = 0;

    //find the length of the Linked List
    struct Node* temp = head;
    while(temp != NULL){
        r++;
        temp = temp->next;
    }
    r--; // the index of the last element is length - 1

    //perform binary search on the Linked List
    while(l<=r){
        int mid = l + (r-l)/2
        temp = head;
        for(int i=0;i<mid;i++){
            temp = temp->next;
        }
        if(temp->data == key) return 1;
        else if(temp->data > key) r = mid - 1;
        else l = mid + 1;
    }
    return 0; // returns false when nothing found
}

Note that to perform a binary search, the data searched have to be sorted. This is not the case here except if the 10 numbers are already sorted on input.

About performance, binary searching in a linked list is a waste of time/cpu/energy: the list will be scanned many times since there's no direct access to an element.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM