Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk menguruskan baris gilir pekeliling lengkap acara dalam C++?
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.
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.
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).
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.
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; }
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
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!