Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 주어진 수 k로 나눌 수 있는 연결 리스트의 최대 및 최소 요소

<시간/>

연결 목록은 요소가 포인터를 통해 연결된 선형 데이터 구조입니다. 연결 목록의 각 요소 또는 노드에는 데이터 부분과 연결이 있거나 순서대로 다음 요소에 대한 포인터라고 할 수 있습니다. 요소는 메모리에서 인접하지 않은 위치를 사용할 수 있습니다.

C++에서 주어진 수 k로 나눌 수 있는 연결 리스트의 최대 및 최소 요소

데이터 부분과 다음 요소에 대한 링크가 있는 단일 연결 목록이 제공됩니다. 다른 입력은 숫자 K입니다. 작업은 숫자 K로 나눌 수 있는 연결 목록의 최대 및 최소 요소를 찾는 것입니다. 선형 연결 목록은 한 방향으로만 이동할 수 있습니다. 각 노드에서 데이터 부분의 분할 가능성을 K로 확인합니다. 해당 숫자가 지금까지 발견된 최대값 또는 최소값이면 MaxD 및 MinD 값을 업데이트합니다.

입력

SList : 5-->2-->10-->12-->3-->20-->7, K=5

출력

Maximum element which is divisible by K : 20
Maximum element which is divisible by K : 5

설명 − Head 노드에서 순회하면서 데이터 부분을 K로 계속 나누어 완전히 나누어지는지, 즉 나머지가 0인지 확인합니다.

5, 10, 20만 5로 나눌 수 있으며 그 중 5는 최소값이고 20은 최대값입니다.

입력

SList : 12-->2-->5-->18-->3-->144-->7, K=4

출력

Maximum element which is divisible by K : 144
Maximum element which is divisible by K : 12

설명 − Head 노드에서 순회하면서 데이터 부분을 K로 계속 나누어 완전히 나누어지는지, 즉 나머지가 0인지 확인합니다.

12와 144만 4로 나눌 수 있으며 그 중 12는 최소값이고 144는 최대값입니다.

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

  • 연결 목록 노드를 만듭니다. 여기에서 정보 부분과 다음 포인터가 있는 클래스 SLLnode를 만들었습니다.

  • 연결 목록을 만듭니다. 여기에서 SLLnode 객체를 멤버로 사용하여 SLList 클래스를 만들었습니다. 따라서 SLList는 SLLnode로 구성됩니다.

  • addtohead(int) 함수가 이 목록에 노드를 추가하고 있습니다.

  • SLList에 요소를 추가하기 위해 LIST라는 SLList 객체를 사용하여 addtohead(int)를 호출합니다.

  • SLList가 생성되면 목록의 head와 정수 K의 두 입력 매개변수를 취하는 Divisible(SLLnode,int) 함수를 호출합니다.

  • 이제 Divisible 내에서 주어진 숫자 K로 나눌 수 있는 연결 목록의 최대 및 최소 요소를 저장하기 위해 두 개의 변수 maxD와 minD를 사용합니다.

  • maxD는 -1로 초기화되고 minD는 9999로 초기화됩니다. 이것은 입력이 있는 범위로 가정합니다.

  • for 루프 내부에서 헤드에서 시작하여 연결 목록을 탐색합니다. 이 변수의 경우 시작은 머리를 가리키고 있습니다.

  • 각 노드의 정보 부분을 maxD, minD와 비교하여 K로 나눗셈성입니다. 현재 노드의 정보가 나눌 수 있고 minD보다 작으면 minD를 현재 정보 부분으로 업데이트합니다.

  • 현재 노드의 정보가 K로 나눌 수 있고 maxD보다 크면 현재 정보 부분으로 maxD를 업데이트합니다.

  • minD 및 maxD에서 얻은 결과를 인쇄하십시오.

예시

#include<iostream.h>
#include<process.h>
#include<conio.h>
class SLLnode{
   public:
   int info;
   SLLnode *next;
   SLLnode(int e1,SLLnode *ptr=0){
      info=e1;
      next=ptr;
   }
};
class SLList{
   public:
   SLLnode *head;
   SLList()
   { head=0; }
   void addtohead(int); };
   void SLList::addtohead(int el)
   { head=new SLLnode(el,head); }
   void Divisible(SLLnode* head, int K){
      int minD=9999;
      int maxD=-1;
      SLLnode* start=head;
      for(start;start->next!=NULL;start=start->next){
         if ((start->info < minD) && (start->info % K == 0))
            minD = start->info;
         if ((start->info > maxD) && (start->info % K == 0))
            maxD = start->info;
      }
      cout << "Max Element divisible by K: " << maxD << endl;
      cout << "Min Element divisible by K: " << minD;
}
// Driver Code
int main(){
   clrscr();
   // Start with empty list
   SLList LIST;
   LIST.addtohead(50);
   LIST.addtohead(21);
   LIST.addtohead(32);
   LIST.addtohead(45);
   LIST.addtohead(11);
   LIST.addtohead(23);
   LIST.addtohead(90);
   LIST.addtohead(56);
   int K = 5;
   Divisible(LIST.head, K);
   getch();
   return 0;
}

출력

위의 코드를 실행하면 다음 출력이 생성됩니다 -

Max Element divisible by K: 90
Min Element divisible by K: 45