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

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


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

เริ่มแรกกำหนดขั้นต่ำด้วยอินฟินิตี้บวกและสูงสุดถูกกำหนดด้วยอินฟินิตี้เชิงลบ ตอนนี้สำรวจรายการจากซ้ายไปขวา หากองค์ประกอบปัจจุบันน้อยกว่าองค์ประกอบขั้นต่ำ ให้อัปเดตขั้นต่ำ หากองค์ประกอบปัจจุบันมีขนาดใหญ่กว่าองค์ประกอบสูงสุด ให้อัปเดตรายการสูงสุด ดังนั้นเราจึงสามารถรับค่าต่ำสุดและสูงสุดได้

ตัวอย่าง

#include<iostream>
using namespace std;
class Node{
   public:
   int data;
   Node *next;
};
Node* getNode(int key){
   Node *newNode = new Node();
   newNode->data = key;
   newNode->next = NULL;
   return newNode;
}
void insert(Node **start, int data){
   Node *current = *start;
   Node *newNode = getNode(data);
   if(*start == NULL){
      newNode->next = newNode;
      *start = newNode;
      return;
   }
   while (current->next != *start) {
      current = current->next;
   }
   newNode->next = *start;
   current->next = newNode;
}
void displayList(Node *start){
   Node* current = start;
   if (start == NULL) {
      cout << "Display List is empty";
      return;
   } else {
      do {
         cout << current->data << " ";
         current = current->next;
      }
       while (current != start);
   }
   cout << endl;
}
void getMinMax(Node **start){
   if(*start == NULL){
      return;
   }
   Node* current;
   current = *start;
   int min = INT_MAX, max = INT_MIN;
   while (current->next != *start) {
      if (current->data < min) {
         min = current->data;
      }
      if (current->data > max) {
         max = current->data;
      }
      current = current->next;
   }
   cout << "Minimum: " << min << ", Maximum: " << max;
}
int main() {
   int data[] = {99, 11, 22, 10, 44, 55, 66};
   int n = sizeof(data)/sizeof(data[0]);
   Node *start = NULL;
   for(int i = 0; i<n; i++){
      insert(&start, data[i]);
   }
   displayList(start);
   getMinMax(&start);
}

ผลลัพธ์

99 11 22 10 44 55 66
Minimum: 10, Maximum: 99