Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk menguruskan baris gilir pekeliling lengkap acara dalam C++?

Bagaimana untuk menguruskan baris gilir pekeliling lengkap acara dalam C++?

WBOY
WBOYke hadapan
2023-09-04 18:41:031162semak imbas

Pengenalan

Baris Gilir Pekeliling ialah penambahbaikan pada baris gilir linear, yang diperkenalkan untuk menyelesaikan masalah sisa ingatan dalam baris gilir linear. Baris gilir pekeliling menggunakan prinsip FIFO untuk memasukkan dan memadam elemen daripadanya. Dalam tutorial ini, kami akan membincangkan pengendalian baris gilir bulat dan cara mengurusnya.

Apakah itu giliran bulat?

Baris gilir bulat ialah satu lagi jenis baris gilir dalam struktur data di mana hujung hadapan dan hujung belakang disambungkan antara satu sama lain. Ia juga dikenali sebagai penampan bulat. Ia beroperasi sama seperti baris gilir linear, jadi mengapa kita perlu memperkenalkan baris gilir baharu dalam struktur data?

Apabila menggunakan baris gilir linear, apabila baris gilir mencapai had maksimumnya, mungkin terdapat sedikit ruang memori sebelum penuding ekor. Ini mengakibatkan kehilangan ingatan, dan algoritma yang baik seharusnya dapat menggunakan sumber sepenuhnya.

Untuk menyelesaikan masalah sisa ingatan, pembangun memperkenalkan konsep baris gilir bulat, yang mempunyai keupayaan untuk memaut secara bulat ke bahagian belakang dan bahagian hadapan, dan boleh memasukkan lebih banyak elemen.

Bagaimana untuk menguruskan baris gilir pekeliling lengkap acara dalam C++?

Fungsi asas baris gilir bulat

  • Pos − Ia mengembalikan nilai pos baris gilir.

  • Depan − Ia mengembalikan nilai hadapan baris gilir.

  • deQueue − Kaedah terbina dalam ini digunakan untuk mengalih keluar elemen daripada baris gilir sambil menyemak sama ada baris gilir kosong.

  • enQueue − Kaedah ini digunakan untuk memasukkan elemen baharu semasa menyemak saiz baris gilir.

Dalam baris gilir bulat, elemen ditambah dari bahagian belakang dan dialih keluar dari bahagian hadapan. deQueue dan enQueue ialah fungsi bebas saiz baris gilir dan dilaksanakan menggunakan pengendali modulo. Kerumitan masa mereka ialah O(1).

Urus giliran pekeliling

Kami menguruskan baris gilir bulat dengan menggunakan operasi enQueue dan deQueue. Pada mulanya, nilai hadapan baris gilir bulat ialah 0, nilai belakang ialah -1, dan semua elemen dalam baris gilir bulat adalah NULL.

Contoh

Kod C++, menggunakan tatasusunan untuk melaksanakan baris gilir bulat

#include <bits/stdc++.h>
using namespace std;
 
class Queue {
   //Initializing front and rear of the queue
   int rear, front;
   int sz;
   int* arr;
 
   public:
   Queue(int s) {
      front = rear = -1;
      sz = s;
      arr = new int[s];
   }
   
   void enQueue(int v);
   int deQueue();
   void displayQueue();
};
 
//Circular queue function
void Queue::enQueue(int v) {
   if ((front == 0 && rear == sz - 1)
      || (rear == (front - 1) % (sz - 1))) {
         printf("\nNo Space Queue is Full");
         return;
      }
   
      //Inserting the front element
      else if (front == -1) {
         front = rear = 0;
         arr[rear] = v;
      }
   
      else if (rear == sz - 1 && front != 0) {
         rear = 0;
         arr[rear] = v;
      }
   
      else {
         rear++;
         arr[rear] = v;
      }
}
 
//Function for deleting queue elements
int Queue::deQueue() {
   if (front == -1) {
      printf("\nQueue needs data it is empty");
      return INT_MIN;
   }
   
   int ele = arr[front];
   arr[front] = -1;
   if (front == rear) {
      front = -1;
      rear = -1;
   }
   else if (front == sz - 1)
      front = 0;
   else
      front++;
   return ele;
}
 
//Printing Circular queue elements
void Queue::displayQueue() {
   if (front == -1) {
      printf("\nQueue Empty");
      return;
   }
   printf("\nCircular Queue elements are: \n");
   if (rear >= front) {
      for (int i = front; i <= rear; i++)
      printf("%d ", arr[i]);
   } else {
      for (int i = front; i < sz; i++)
      printf("%d ", arr[i]);
   
      for (int i = 0; i <= rear; i++)
      printf("%d ", arr[i]);
   }
}
 
int main() {
   Queue q(5);
   //Pushing data in circular queue
   q.enQueue(10);
   q.enQueue(20);
   q.enQueue(3);
   q.enQueue(5);
   //Printing circular queue elements
   q.displayQueue();
   
   //Deleting front elements of circular queue
   printf("\nDeleted element = %d\n", q.deQueue());
   printf("\nDeleted element = %d", q.deQueue());
   q.displayQueue();
   q.enQueue(13);
   q.enQueue(27);
   q.enQueue(50);
   q.displayQueue();
   q.enQueue(22);
   
   return 0;
}

Output

Circular Queue elements are: 
10 20 3 5 
Deleted element = 10

Deleted element = 20
Circular Queue elements are: 
3 5 
Circular Queue elements are: 
3 5 13 27 50 
No Space Queue is Full

Kesimpulan

Baris gilir bulat digunakan dalam pengurusan memori dan penjadualan CPU. Ia menggunakan fungsi displayQueue() untuk memaparkan elemen baris gilir.

Kami telah sampai ke penghujung tutorial ini. Saya harap tutorial ini membantu anda memahami cara melaksanakan baris gilir bulat.

Atas ialah kandungan terperinci Bagaimana untuk menguruskan baris gilir pekeliling lengkap acara dalam C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam