C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++を使用して、指定された単一リンクリスト内の要素を検索します


単一リンクリストが与えられた場合、タスクはリンクリスト内の特定の要素を検索することです。要素が見つかった場合は「存在する」と出力し、そうでない場合は「存在しない」と出力します。たとえば、

入力-1

1→ 2→ 3→ 4→ 5→ 6

「7」を検索

出力

Not Present

説明 −指定された単一リンクリストには要素「7」が存在しないため、出力は「存在しない」として返されます。

入力-2

1→ 2→ 3→ 4→ 5

「2」を検索

出力

Present

説明 −指定された単一リンクリストには要素「2」が存在するため、出力を「現在」として返します。

この問題を解決するためのアプローチ

特定の単一リンクリスト内の特定の要素を検索するには、2つのアプローチがあります。リンクリストに1つの要素が存在するかどうかを再帰的にチェックする必要があります。

リンクリストが空の場合はfalseを返し、そうでない場合はデータ値を持つ現在のノードが入力要素と等しい場合はtrueを返します。もう1つのアプローチでは、要素が現在のヘッドポインターと等しいかどうかを繰り返しチェックし、それに応じてtrueまたはfalseを返します。

  • 入力を取得し、ノードを挿入して単一リンクリストを初期化します。

  • ブール再帰関数searhRecursive(node * head、int element)は、リンクリストのヘッドポインターとキー要素をパラメーターとして受け取ります。

  • 最初にヘッドがNULLの場合、またはリンクリストが空の場合は、falseを返します。

  • 検索する要素がリンクリストの現在の先頭と等しい場合は、trueを返します。

#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」が存在しないため、「存在しない」を返します。


  1. C++のリンクリストの代替ノードの合計

    この問題では、リンクリストが表示されます。私たちのタスクは、リンクリストの代替ノードの合計を出力することです。 リンクリストは、リンクを介して相互に接続された一連のデータ構造です。 では、問題に戻りましょう。ここでは、リンクリストの代替ノードを追加します。これは、ノードが位置0、2、4、6、…であることを追加することを意味します 問題を理解するために例を見てみましょう。 入力 4 → 12 → 10 → 76 → 9 → 26 → 1 出力 24 説明 considering alternate strings

  2. C ++で再帰を使用して、リンクリストの代替ノードを出力します

    リンクリストは、要素を連続していないメモリ位置に格納する線形データ構造です。すべての要素には、リンクリストの次の要素へのポインタが含まれています。 例 − この問題では、リンクリストが与えられ、このリンクリストの要素を印刷する必要がありますが、代替要素のみが印刷されます。問題をよりよく理解するために例を見てみましょう。 Input : 2 -> 4 -> 1 -> 67 -> 48 -> 90 Output : 2 -> 1 -> 48 説明 −リンクリストに代替要素を出力します。したがって、1番目、3番目、5番目の要素が印刷されます。