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

องค์ประกอบสูงสุดและต่ำสุดของรายการที่เชื่อมโยงซึ่งหารด้วยตัวเลขที่กำหนด k ใน C++


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

องค์ประกอบสูงสุดและต่ำสุดของรายการที่เชื่อมโยงซึ่งหารด้วยตัวเลขที่กำหนด k ใน C++

เราได้รับรายการที่เชื่อมโยงโดยลำพังซึ่งมีส่วนข้อมูลและลิงก์ไปยังองค์ประกอบถัดไป อินพุตอื่นคือตัวเลข 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 ซึ่งมีส่วนข้อมูลและตัวชี้ถัดไป

  • สร้างรายการที่เชื่อมโยง ที่นี่เราได้สร้างคลาส SLList ด้วยวัตถุ SLLnode ในฐานะที่เป็นสมาชิก ดังนั้น SLList จึงประกอบด้วย SLLnodes

  • ฟังก์ชัน addtohead(int) กำลังเพิ่มโหนดในรายการนี้

  • ในการเพิ่มองค์ประกอบใน SLList เราเรียก addtohead(int) โดยใช้วัตถุ SLList ชื่อ LIST

  • เมื่อสร้าง SLList แล้ว เราจะเรียกใช้ฟังก์ชัน Divisible(SLLnode,int) ซึ่งรับพารามิเตอร์อินพุตสองตัวของรายการและจำนวนเต็ม K

  • ตอนนี้อยู่ใน Divisible เราใช้ตัวแปร maxD และ minD สองตัวเพื่อเก็บองค์ประกอบสูงสุดและต่ำสุดของรายการที่เชื่อมโยงซึ่งหารด้วยตัวเลขที่กำหนด K.

  • maxD เริ่มต้นด้วย -1 และ minD เริ่มต้น 9999 ซึ่งควรจะเป็นช่วงที่อินพุตอยู่

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

  • เปรียบเทียบส่วนข้อมูลของแต่ละโหนดด้วย 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