A รายการที่เชื่อมโยงเพียงรายการเดียว เป็นรายการที่เชื่อมโยง (โครงสร้างข้อมูลที่จัดเก็บค่าของโหนดและตำแหน่งหน่วยความจำของโหนดถัดไป) ซึ่งสามารถไปได้ทางเดียวเท่านั้น
การค้นหาแบบไบนารี เป็นอัลกอริธึมการค้นหาตามการแบ่งและกฎ ที่ค้นหาองค์ประกอบตรงกลางของโครงสร้างและเปรียบเทียบและใช้การเรียกซ้ำกับอัลกอริทึมเดียวกันสำหรับความไม่เท่าเทียมกัน
ในที่นี้ เราได้รับรายการที่เชื่อมโยงโดยลำพังและองค์ประกอบที่จะพบโดยใช้การค้นหาแบบไบนารี
เนื่องจากรายการที่เชื่อมโยงโดยลำพังเป็นโครงสร้างข้อมูลที่ใช้ตัวชี้เพียงตัวเดียว การค้นหาองค์ประกอบตรงกลางจึงไม่ใช่เรื่องง่าย เราใช้ตัวชี้ 2 วิธีในการอยู่ตรงกลางของรายการลิงก์เดียว
อัลกอริทึม
Step 1 : Initialize, start_node (head of list) and last_node (will have last value) , mid_node (middle node of the structure). Step 2 : Compare mid_node to element Step 2.1 : if mid_node = element, return value “found”. Step 2.2 : if mid_node > element, call binary search on lower_Half. Step 2.3 : if mid_node < element, call binary search on upper_Half. Step 3 : if entire list is traversed, return “Not found”.
ตัวอย่าง
#include<stdio.h> #include<stdlib.h> struct Node{ int data; struct Node* next; }; Node *newNode(int x){ struct Node* temp = new Node; temp->data = x; temp->next = NULL; return temp; } struct Node* mid_node(Node* start, Node* last){ if (start == NULL) return NULL; struct Node* slow = start; struct Node* fast = start -> next; while (fast != last){ fast = fast -> next; if (fast != last){ slow = slow -> next; fast = fast -> next; } } return slow; } struct Node* binarySearch(Node *head, int value){ struct Node* start = head; struct Node* last = NULL; do{ Node* mid = mid_node(start, last); if (mid == NULL) return NULL; if (mid -> data == value) return mid; else if (mid -> data < value) start = mid -> next; else last = mid; } while (last == NULL || last != start); return NULL; } int main(){ Node *head = newNode(54); head->next = newNode(12); head->next->next = newNode(18); head->next->next->next = newNode(23); head->next->next->next->next = newNode(52); head->next->next->next->next->next = newNode(76); int value = 52; if (binarySearch(head, value) == NULL) printf("Value is not present in linked list\n"); else printf("The value is present in linked list\n"); return 0; }
ผลลัพธ์
The value is present in linked list