Ideas de implementación:
1) Establezca el frente de la cola = 0 para apuntar al primer elemento de la matriz
2) Establezca la cola de cola trasera = 0 para apuntar al siguiente elemento al final de la matriz, luego adelante == trasera la cola está vacía
3) Deje un espacio al principio y al final de la cola para facilitar que el programa comprenda si está lleno o vacío. Determine que la condición de cola llena es (trasera + 1)% maxSize y que la posición vacía cambia constantemente
4) Fórmula de cálculo de datos efectivos en cola, frente-frente + maxSize% maxSize, (este lugar es más abstracto, puede dibujar una matriz circular para ayudar al grupo a comprender)
1 usando el sistema; 2 3 estructura de datos del espacio de nombres 4 { 5 clase pública CircleQueue 6 { 7 // Capacidad máxima de la cola 8 private int maxSize; 9 // Head of queue 10 private int front; 11 // End of queue 12 private int rear; 13 / / Queue array 14 private int [] arrayQueue; 15 // La siguiente posición al final de la cola, si coincide con el encabezado, la cola está llena 16 // Entonces el final de la cola estará vacío, así que determina si la cola está vacía, así que maneja unos 17 bool públicos IsFull { get => (rear + 1 )% maxSize == front;} 18 // La cabeza y la cola apuntan a la misma posición al mismo tiempo que está vacía 19 public bool IsEmpty { get => front == rear;} 20 // datos restantes de la cola 21 public int Size { get => (maxSize + rear-front)% maxSize;} 22 23 public CircleQueue ( int maxSize = 1 ) 24 { 25 // Dado que la cola se deja vacía, el valor máximo debe aumentarse en 26 this .maxSize = maxSize + 1 ; 27 arrayQueue = new int [ this .maxSize]; 28 // Apunte al encabezado de la cola 29 this .front = 0 ; 30 // Señale la siguiente posición al final de la cola, que es la cabeza de las tres colas 31 this .rear = 0 ; 32 } 33 // Entry 34 public bool AddQueue ( int item) 35 { 36 if (IsFull) 37 { 38 Console.WriteLine ( " Queue is full ... " ); 39 return false ; 40 } 41 arrayQueue [rear] = item; 42 // La cola apunta a la siguiente posición 43 rear = (rear + 1 )% this .maxSize ; 44 es el retorno a la verdadera ; 45 } 46 es // dequeue 47 pública int getQueue () 48 { 49 SI (el IsEmpty) 50 { 51 lanzar nuevo IndexOutOfRangeException ( "La cola está vacía ... " ); 52 53 } 54 // Dirígete a la siguiente posición 55 var val = arrayQueue [front]; 56 front = (front + 1 )% this .maxSize; 57 return val; 58 } 59 } 60 61 clase pública CircleQueueDemo 62 { 63 static void Main ( string [] args) 64 { 65 // Inicializar cola 66 var queue = new CircleQueue ( 9 ); 67 Console.WriteLine ($ " La longitud actual de la cola es {queue.Size} " ); 68 Console.WriteLine ( "La longitud es 10 números para 9 \ n " ); 69 para ( int i = 1 ; i <= 10 ; i ++ ) 70 { 71 72 if (queue.IsFull) 73 { 74 Console.Write ( "La cola está llena" 10 "no pudo unirse al equipo " ); 75 descanso ; 76 } 77 if (queue.AddQueue (i)) 78 { 79 Console.Write ($ " {i} \ t " ) ; 80 } 81 82 } 83 Console.WriteLine ($ " La longitud actual de la cola es {queue.Size} \ t " ); 84 85 // ------------------- ---------------------------------------- 86 87 Console.WriteLine ( " 5 números en la cola ... \ n " ); 88 para ( int i = 1 ; i <= 5 ; i ++ ) 89 { 90 91 Console.Write ($ " {queue.GetQueue () } \ t " ); 92 93 } 94 Console.WriteLine ($ " La longitud actual de la cola es {queue.Size} \ n " ); 95 96 // ---------------- ------------------------------------------- 97 98 Console.WriteLine ( " Insertar 10 números en la cola ... \ n " ); 99 para ( int i = 1 ; i <= 10 ; i ++ ) 100 { 101 if (queue.IsFull) 102 { 103 Console.Write ( "La cola está llena," 6 7 8 9 10 "no pudo ingresar al equipo " ); 104 descanso ; 105 } 106 if (queue.AddQueue (i)) 107 { 108 Console.Write ($ "{i} \ t " ); 109 } 110 111 } 112 Console.WriteLine ($ " La longitud actual de la cola es {queue.Size} \ n " ); 113 114 // ------------ ----------------------------------------------- 115 1 16 Consola .WriteLine ($ " Imprimir cola actual " ); 117 var size = queue.Size; 118 for ( int i = 0 ; i <size; i ++ ) 119 { 120 Console.Write ($ " {queue.GetQueue ()} \ t " ); 121 } 122 Console.WriteLine ($ "La longitud actual de la cola es {queue.Size} \ n " ); 123 } 124 } 125 }