Tres, cola de anillo de simulación de matriz

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 }

 

Supongo que te gusta

Origin www.cnblogs.com/xiaojvhuang/p/12682225.html
Recomendado
Clasificación