¿Qué es una cola circular?
Si la cola no es recta, sino que forma un círculo (la persona al frente de la cola está detrás de la persona al final de la cola), es una cola circular.
Definición de tipo
#Definición? ¿Tamaño de cola? 100?//Este valor debe definirse según la situación específica.
typedef? ¿Ciel? Tipo de datos;? // El tipo de datos depende de la aplicación específica.
typedef? Estructura {
int? frente;? //Puntero principal, apunta al elemento principal de la cola cuando la cola no está vacía.
int? trasero;? // El puntero de cola, cuando la cola no está vacía, apunta a la siguiente posición del elemento de cola.
int? Count; //Contador, registra el número total de elementos en la cola.
¿Tipo de datos? data[QueueSize];
} CirQueue
Operaciones elementales
En la tercera forma, las seis operaciones básicas de la cola circular:
①?Dejar el equipo vacío
¿Vacío? InitQueue(CirQueue?*Q)
{
q->; frente = Q- gt; trasero = 0
q->; ;? // ¿El contador está establecido en 0
}
②? Juzga que el equipo está vacío
int? QueueEmpty(CirQueue?*Preguntar)
{
¿Volver? q->cuenta == 0? //Ningún elemento de la cola está vacío.
}
③? ¿Juzga que la cola está llena
int? QueueFull(CirQueue?*Preguntar)
{
¿Volver? q->count == Tamaño de cola? // Cuando el número de elementos en la cola es igual a QueueSize, la cola está llena.
}
④? ¿Se le permite unirse a los Jóvenes Pioneros?
¿No es válido? Enqueue(CirQueue? *Q, tipo de datos? x)
{
if(QueueFull(Q))
Error("¿Cola? Desbordamiento") ; ? //Cola desbordada.
q->; ¿Contar? ;? //El número de elementos de la cola más 1
q->data[q->rear] = x? //Insertar nuevo elemento al final de la cola
q->;rear =(Q- gt;rear 1) tamaño de cola;? // El puntero de cola en el sentido del bucle se incrementa en 1.
}
⑤? ¿Quitar de la cola?
¿Tipo de datos? Quitar de la cola (¿CirQueue? *Preguntar)
{
¿Tipo de datos? Temperatura;
if(QueueEmpty(Q))
Error("¿Cola? Subdesbordamiento");? //Cola desbordada.
temp = q-gt;data[q->front];
q->count-? //Resta 1 del número de elementos de la cola
q->; front = (Q- gt; front 1) tamaño de la cola;? //Agregar 1 al puntero principal en un sentido de bucle
¿Regresar? Temperatura;
}
⑥ Tomemos como ejemplo el elemento de liderazgo del equipo.
¿Tipo de datos? QueueFront(CirQueue? *Q)
{
if(QueueEmpty(Q))
Error("¿Cola? ¿Está? Vacío.
");
¿Regresión? q->datos[Q->frente];
}