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

C ++のリンクリストに子音と母音のノードを配置しますか?


この手法では、母音をキーとして持つノードを最初に転送し、子音を最後に転送します。この場合、順序も維持します。例を以下に示します-

Input: A-M-A-Z-O-N
Output: A-A-O-M-Z-N
Code (Complexity: O(N), Space O(1))

#include<iostream>
using namespace std;
class Node1{
   public:
   char var1;
   Node1 *next1;
   Node1(char v,Node1 *next1=NULL):var1(v),next1(next1){}
};
Node1 *make_list(char array1[],int size1){
   if(size1 ==0)
   return NULL;
   else {
      Node1 *head = new Node1('o');
      Node1 *temp = head;
      for(int i=0;i<size;++i) {
         temp->next1 = new Node1(array1[i]);
         temp=temp->next1;
      }
      temp=head;
      head = head->next1;
      delete temp;
      return head;
   }
}
void print_list(Node1 *head){
   while(head){
      cout<<head->var1<<"--";
      head = head->next1;
   }
   cout<<"END"<<endl;
}
void insertAfter(Node1** temp,Node1 *n){
   n->next1 = (*temp)->next1;
   (*temp)->next1 = n;
}
bool isVowel(char v){
   switch(v){
      case 'A':
      case 'E':
      case 'I':
      case 'O':
      case 'U':
      return true;
      default:
      return false;
   }
}
Node1 *groupByVowels(Node1 *head){
   Node1 *vowel=NULL,*consonant=NULL;
   vowel = new Node1('L');
   consonant = new Node1('C');
   Node1 *tv = vowel,*tc=consonant;
   for(Node1 *temp=head;temp;){
      Node1 *tt = temp->next1;
      if(isVowel(temp->var1)){
         insertAfter(&tv,temp);
         tv = tv->next1;
      }
   Else {
         insertAfter(∓tc,temp);
         tc=tc->next1;
      }
   temp = tt;
   }
   tv->next1 = consonant->next1;
   tv = vowel;
   vowel=vowel->next1;
   delete tv;
   return vowel;
}
int main(){
   char array1[] = {'A','M','A','Z','O','N'};
   Node1 *head = make_list(array1,sizeof(array1)/sizeof(array1[0]));
   print_list(head);
   head = groupByVowels(head);
   print_list(head);
}

出力

A--M--A--Z--O--N--END
A--A--O--M--Z--N--END

  1. C++の循環リンクリストでノードをカウントします

    ノードを含む循環リンクリストが与えられ、タスクは循環リンクリストに存在するノードの数を計算することです。 循環リンクリストは、最初の要素が最後の要素を指し、最後の要素が最初の要素を指すリンクリストのバリエーションです。単一リンクリストと二重リンクリストの両方を循環リンクリストにすることができます。 以下のプログラムでは、単一リンクリストを循環リンクリストとして実装し、その中のノード数を計算しています。 例 Input − nodes-: 20, 1, 2, 3, 4, 5 Output − count of nodes are-: 6 Input &minus

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

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