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

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