Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ค้นหาองค์ประกอบในรายการเชื่อมโยงที่กำหนดโดยใช้ C++


ให้เชื่อมโยงรายการเดียว ภารกิจคือการค้นหาองค์ประกอบเฉพาะในรายการที่เชื่อมโยง หากพบองค์ประกอบ ให้พิมพ์ "ปัจจุบัน" มิฉะนั้น "ไม่มี" ตัวอย่างเช่น

อินพุต-1

1→ 2→ 3→ 4→ 5→ 6

กำลังค้นหา '7'

ผลผลิต

Not Present

คำอธิบาย − ในรายการเชื่อมโยงเดี่ยวที่กำหนด ไม่มีองค์ประกอบ '7' ดังนั้น เราจะส่งคืนผลลัพธ์เป็น "ไม่แสดง"

อินพุต-2

1→ 2→ 3→ 4→ 5

กำลังค้นหา '2'

ผลผลิต

Present

คำอธิบาย − เนื่องจากในรายการเชื่อมโยงแบบเดี่ยวที่กำหนดองค์ประกอบ '2' จึงมีอยู่ ดังนั้นเราจะส่งคืนผลลัพธ์เป็น "ปัจจุบัน"

แนวทางการแก้ปัญหานี้

มีสองวิธีในการค้นหาองค์ประกอบเฉพาะในรายการเชื่อมโยงที่กำหนด เราต้องตรวจสอบซ้ำ ๆ ว่ามีองค์ประกอบหนึ่งอยู่ในรายการที่เชื่อมโยงหรือไม่

หากรายการที่เชื่อมโยงว่างเปล่า เราจะคืนค่าเท็จ มิฉะนั้น หากโหนดปัจจุบันมีค่าข้อมูลเท่ากับองค์ประกอบอินพุต เราจะคืนค่าเป็นจริง ในอีกแนวทางหนึ่ง เราจะตรวจสอบองค์ประกอบซ้ำๆ ว่าองค์ประกอบนั้นเท่ากับตัวชี้ส่วนหัวปัจจุบันหรือไม่ และคืนค่าเป็นจริงหรือเท็จตามลำดับ

  • รับอินพุตและเริ่มต้นรายการที่เชื่อมโยงเพียงรายการเดียวโดยแทรกโหนดเข้าไป

  • ฟังก์ชันเรียกซ้ำแบบบูลีน searhRecursive(โหนด*ส่วนหัว องค์ประกอบ int) รับตัวชี้ส่วนหัวของรายการที่เชื่อมโยงและองค์ประกอบหลักเป็นพารามิเตอร์

  • เริ่มแรกหากส่วนหัวเป็น NULL หรือหากรายการที่เชื่อมโยงว่างเปล่า ให้คืนค่าเท็จ

  • หากองค์ประกอบที่จะค้นหาเท่ากับส่วนหัวปัจจุบันของรายการที่เชื่อมโยง ให้คืนค่า จริง

ตัวอย่าง

#include<iostream>
using namespace std;
#include<iostream>
using namespace std;
class node{
public:
   int data;
   node*next;
   node(int d){
      data=d;
      node*next= NULL;
   }
};
void insertAt(node*&head, int data){
   node*n= new node(data);
   n->next= head;
   head= n;
}
bool searchRecursive(node*head,int key){
   if(head==NULL){
      return false;
   }
   if(head->data==key){
      return true;
   }
   else{
      return searchRecursive(head->next, key);
   }
}
void printNode(node*head){
   while(head!=NULL){
      cout<<head->data<<"->";
      head=head->next;
   }
   cout<<endl;
}
int main(){
   node*head= NULL;
   insertAt(head,5);
   insertAt(head,4);
   insertAt(head,3);
   insertAt(head,2);
   insertAt(head,1);
   printNode(head);
   if(searchRecursive(head,7)){
      cout<<"present"<<endl;
   }
   else{
      cout<<"Not Present"<<endl;
   }
}

ผลลัพธ์

การเรียกใช้โค้ดด้านบนจะสร้างผลลัพธ์เป็น

Not Present

เนื่องจากในรายการเชื่อมโยงที่กำหนด 1→2→3→4→5 ไม่มีองค์ประกอบ '7' ดังนั้นเราจึงส่งคืน "ไม่แสดง"