queue data structure c with illustration
Una breu introducció a la cua en C ++ amb il·lustració.
La cua és una estructura de dades bàsica com una pila. A diferència de la pila que utilitza l'enfocament LIFO, la cua utilitza l'enfocament FIFO (primer entrada, primer sortida). Amb aquest enfocament, el primer element que s’afegeix a la cua és el primer element que s’elimina de la cua. Igual que Stack, la cua també és una estructura de dades lineal.
el millor descarregador de cançons mp3 per a Android
En una analogia del món real, podem imaginar una cua d’autobusos on els passatgers esperen l’autobús en una cua o en una línia. El primer passatger de la línia entra primer a l’autobús, ja que és el que havia passat primer.
=> Llegiu aquí la popular sèrie de formació C ++.
Què aprendreu:
Cua a C ++
En termes de programari, la cua es pot veure com un conjunt o una col·lecció d’elements com es mostra a continuació. Els elements estan ordenats linealment.
Tenim dos extrems, és a dir, 'frontal' i 'posterior' de la cua. Quan la cua està buida, els dos indicadors es defineixen a -1.
El punter 'posterior' és el lloc des d'on s'insereixen els elements a la cua. L'operació d'afegir / inserir elements a la cua s'anomena 'enqueue'.
El punter final 'frontal' és el lloc des d'on s'eliminen els elements de la cua. L'operació d'eliminació / eliminació d'elements de la cua s'anomena 'dequeue'.
Quan el valor del punter posterior és de la mida 1, direm que la cua està plena. Quan el frontal és nul, la cua està buida.
Operacions bàsiques
L'estructura de dades de la cua inclou les operacions següents:
- EnQueue: Afegeix un element a la cua. L’addició d’un element a la cua sempre es fa a la part posterior de la cua.
- DeQueue: Elimina un element de la cua. Un element s’elimina o es posa en cua sempre des de la part frontal de la cua.
- està buit: Comprova si la cua està buida.
- està ple: Comprova si la cua està plena.
- ullada: Obté un element a la part frontal de la cua sense eliminar-lo.
Feu una cua
En aquest procés, es realitzen els passos següents:
- Comproveu si la cua està plena.
- Si està ple, produïu un error de desbordament i sortiu.
- Altrament, incrementeu ‘darrere’.
- Afegiu un element a la ubicació assenyalada per 'darrere'.
- Retorn de l'èxit.
Retireu la cua
L'operació de cola consisteix en els passos següents:
- Comproveu si la cua està buida.
- Si està buit, mostreu un error d'influència i sortiu.
- Altrament, l’element d’accés s’assenyala per ‘frontal’.
- Incrementeu el 'frontal' per assenyalar les dades accessibles següents.
- Retorn de l'èxit.
A continuació, veurem una il·lustració detallada de les operacions d’inserció i supressió a la cua.
Il·lustració
Aquesta és una cua buida i, per tant, tenim el valor posterior i buit a -1.
A continuació, afegim 1 a la cua i, com a resultat, el punter posterior avança per una ubicació.
A la següent figura, afegim l’element 2 a la cua movent el punter posterior per davant amb un altre increment.
A la figura següent, afegim l'element 3 i movem el punter posterior per 1.
En aquest punt, el punter posterior té el valor 2 mentre que el punter frontal està al 0thubicació.
A continuació, suprimim l'element que apunta el punter frontal. Com que el punter frontal és a 0, l'element que se suprimeix és 1.
Per tant, el primer element introduït a la cua, és a dir, 1 passa a ser el primer element eliminat de la cua. Com a resultat, després de la primera cola, el punter frontal ara es mourà cap endavant t0 la següent ubicació que és 1.
Implementació de matriu per a la cua
Implantem l'estructura de dades de la cua mitjançant C ++.
#include #define MAX_SIZE 5 using namespace std; class Queue { private: int myqueue(MAX_SIZE), front, rear; public: Queue(){ front = -1; rear = -1; } boolisFull(){ if(front == 0 && rear == MAX_SIZE - 1){ return true; } return false; } boolisEmpty(){ if(front == -1) return true; else return false; } void enQueue(int value){ if(isFull()){ cout << endl<< 'Queue is full!!'; } else { if(front == -1) front = 0; rear++; myqueue(rear) = value; cout << value << ' '; } } int deQueue(){ int value; if(isEmpty()){ cout << 'Queue is empty!!' <= rear){ //only one element in queue front = -1; rear = -1; } else { front++; } cout << endl < ' << value << ' from myqueue'; return(value); } } /* Function to display elements of Queue */ void displayQueue() { int i; if(isEmpty()) { cout << endl << 'Queue is Empty!!' << endl; } else { cout << endl << 'Front = ' << front; cout << endl << 'Queue elements : '; for(i=front; i<=rear; i++) cout << myqueue(i) << ' '; cout << endl << 'Rear = ' << rear << endl; } } }; int main() { Queue myq; myq.deQueue(); //deQueue cout<<'Queue created:'< queue is full myq.enQueue(60); myq.displayQueue(); //deQueue =>removes 10 myq.deQueue(); //queue after dequeue myq.displayQueue(); return 0; }
Sortida:
La cua està buida !!
Cua creada:
10 20 30 40 50
La cua està plena !!
Frontal = 0
Elements de la cua: 10 20 30 40 50
Posterior = 4
Suprimit => 10 de la cua
Frontal = 1
Elements de la cua: 20 30 40 50
Posterior = 4
La implementació anterior mostra la cua representada com una matriu. Especifiquem la mida màxima de la matriu. També definim les operacions de cola i cola, així com les operacions isFull i isEmpty.
A continuació es mostra la implementació de Java de l’estructura de dades de la cua.
// A class representing a queue class Queue { int front, rear, size; int max_size; int myqueue(); public Queue(int max_size) { this.max_size = max_size; front = this.size = 0; rear = max_size - 1; myqueue = new int(this.max_size); } //if size = max_size , queue is full boolean isFull(Queue queue) { return (queue.size == queue.max_size); } // size = 0, queue is empty boolean isEmpty(Queue queue) { return (queue.size == 0); } // enqueue - add an element to the queue void enqueue( int item) { if (isFull(this)) return; this.rear = (this.rear + 1)%this.max_size; this.myqueue(this.rear) = item; this.size = this.size + 1; System.out.print(item + ' ' ); } // dequeue - remove an elment from the queue int dequeue() { if (isEmpty(this)) return Integer.MIN_VALUE; int item = this.myqueue(this.front); this.front = (this.front + 1)%this.max_size; this.size = this.size - 1; return item; } // move to front of the queue int front() { if (isEmpty(this)) return Integer.MIN_VALUE; return this.myqueue(this.front); } // move to the rear of the queue int rear() { if (isEmpty(this)) return Integer.MIN_VALUE; return this.myqueue(this.rear); } } // main class class Main { public static void main(String() args) { Queue queue = new Queue(1000); System.out.println('Queue created as:'); queue.enqueue(10); queue.enqueue(20); queue.enqueue(30); queue.enqueue(40); System.out.println('
Element ' + queue.dequeue() + ' dequeued from queue
'); System.out.println('Front item is ' + queue.front()); System.out.println('Rear item is ' + queue.rear()); } }
Sortida:
Cua creada com:
10 20 30 40
L'element 10 ha quedat a la cua
L’element frontal és 20
L’element posterior és de 40
La implementació anterior és similar a la implementació C ++.
A continuació, implementem la cua a C ++ mitjançant una llista enllaçada.
Implementació de la llista enllaçada per a la cua:
#include using namespace std; struct node { int data; struct node *next; }; struct node* front = NULL; struct node* rear = NULL; struct node* temp; void Insert(int val) { if (rear == NULL) { rear = new node; rear->next = NULL; rear->data = val; front = rear; } else { temp=new node; rear->next = temp; temp->data = val; temp->next = NULL; rear = temp; } } void Delete() { temp = front; if (front == NULL) { cout<<'Queue is empty!!'next; cout<<'Element deleted from queue is : ' Sortida:
Cua creada:
10 20 30 40 50
L'element suprimit de la cua és: 10
Cua després d'una supressió:
20 30 40 50
Preguntes d’entrevistes c i c ++
Pila vs. Cua
Les piles i les cues són estructures de dades secundàries que es poden utilitzar per emmagatzemar dades. Es poden programar mitjançant les estructures de dades primàries, com ara matrius i llistes enllaçades. Després d’haver discutit amb detall les dues estructures de dades, és hora de discutir les principals diferències entre aquestes dues estructures de dades.
Piles Cues Utilitza l'enfocament LIFO (Last in, First out). Utilitza l'enfocament FIFO (First in, First out). Els elements s’afegeixen o s’eliminen només d’un extrem anomenat “Part superior” de la pila. Els elements s’afegeixen des de l’extrem “posterior” de la cua i s’eliminen de la part frontal de la cua. Les operacions bàsiques per a la pila són 'push' i 'Pop'. Les operacions bàsiques per a una cua són 'enqueue' i 'dequeue'. Podem fer totes les operacions a la pila mantenint només un punter per accedir a la part superior de la pila. A les cues, hem de mantenir dos indicadors, un per accedir a la part frontal de la cua i el segon per accedir a la part posterior de la cua. La pila s'utilitza principalment per resoldre problemes recursius. Les cues s’utilitzen per resoldre problemes relacionats amb el processament ordenat.
Aplicacions de la cua
Analitzem les diferents aplicacions de l'estructura de dades de la cua a continuació.
- L'estructura de dades de la cua s'utilitza en diverses programacions de discs i CPU. Aquí tenim diverses tasques que requereixen CPU o disc alhora. El temps de la CPU o del disc està programat per a cada tasca mitjançant una cua.
- La cua també es pot utilitzar per a la cola d'impressió, on es col·loca el nombre de treballs d'impressió en una cua.
- El tractament de les interrupcions en sistemes en temps real es fa mitjançant una estructura de dades de cua. Les interrupcions es gestionen en l’ordre en què arriben.
- La primera cerca per amplada en què es travessen els nodes veïns d’un arbre abans de passar al següent nivell utilitza una cua per a la implementació.
- Els sistemes de telefonia del centre de trucades utilitzen cues per retenir les trucades fins que els representants del servei els responen.
En general, podem dir que l’estructura de dades de la cua s’utilitza sempre que necessitem que es doni servei als recursos o elements en l’ordre en què arriben, és a dir, First in, First Out.
Conclusió
La cua és una estructura de dades FIFO (First In, First Out) que s’utilitza principalment en recursos on es requereix la programació. Té dos punteres posterior i frontal en dos extrems i s’utilitzen per inserir un element i treure un element a la cua respectivament.
Al nostre següent tutorial, coneixerem algunes de les extensions de la cua, com ara la cua de prioritat i la cua circular.
=> Vegeu aquí per explorar la llista completa de tutorials de C ++.
Lectura recomanada
- Estructura de dades de la cua de prioritat en C ++ amb il·lustració
- Cua de prioritat a STL
- Estructura de dades de pila en C ++ amb il·lustració
- Estructura de dades de llistes enllaçades circulars en C ++ amb il·lustració
- Estructura de dades de la llista enllaçada en C ++ amb il·lustració
- Estructura de dades de llistes doblement enllaçades en C ++ amb il·lustració
- Introducció a les estructures de dades en C ++
- Parametrizació de dades de JMeter mitjançant variables definides per l'usuari