Cola simple

Cola simple


Problema

Implementa una cola. Ingresar algún número significa acción. (Terminar con EOF) 1
significa empujar a la cola. Prometa que le seguirá otro entero,
es decir, el valor que se va a impulsar. Si la cola está llena, imprima Push
Failed. La cola está llena. Si la cola no está llena, colóquela en la
cola. (No mostrar nada) 0 significa que aparece el valor frontal de la cola.
Imprima el valor que acaba de aparecer. Si la cola está vacía, imprima
Pop Failed. La cola está vacía. Si la cola no está vacía, imprima el
valor. En esta asignación, una cola con un tamaño de 10 es suficiente. Muestra


Entrada

0
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
1 11
0
0
0
0
0
0
0
0
0

Salida de muestra

Pop Failed. The queue is empty.
Push Failed. The queue is full. 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
Pop Failed. The queue is empty. 

Sugerencia (cola circular)

Si no quieres ver mi BB, puedes saltarte esta parte o simplemente ir a
wikipedia para ver un gif muy bonito que explica esto.

La cola es una estructura de datos que es FIFO (Primero en entrar, primero en salir), lo que significa que los primeros datos que se enviarán, se mostrarán primero.
Generalmente, usamos una matriz para implementar una cola circular.
Por ejemplo, int my_queue [11] ;.
Entonces, deberíamos saber dónde está la parte delantera / trasera. Entonces obtenemos dos "punteros" para almacenar el índice de la parte delantera / trasera.
int front_index = 0, rear_index = 0;
Luego, con esto, conocemos su posición para poder modificarla.
¿Cómo empujar?
my_queue [rear_index ++] = valor; Establezca el valor y mueva el back_index.
¿Cómo hacer estallar?
front_index ++; Mueva el front_index. Ahora no podemos acceder a ese valor, por lo que parece que lo hicimos saltar (eliminar).
¿Qué es circular?
F para el frente, R para la parte trasera.
Esta cola está llena. (Explicará por qué en la siguiente parte)

cola: [1,2,3,4,5,6,7,8,9,10]

1 2 3 4 5 6 7 8 9 10 N
^ ^
FR

Pop 2 veces, luego tenemos

cola: [3,4,5,6,7,8,9,10]

1 2 3 4 5 6 7 8 9 10 N
^ ^
FR

Empuje 5 y 6

cola: [3,4,5,6,7,8,9,10,5,6]

6 2 3 4 5 6 7 8 9 10 5
^ ^
RF
Entonces verá, rear_index llegó al final pero salió de nuevo desde el otro lado. Eso es todo, un círculo de hecho.
Para implementar esto, cuando el índice cambie, debe escribir index% = 11 ;.
¿Por qué 11 pero no 10?
Aquí, aunque la longitud de la matriz es 11, solo se pueden usar 10 espacios.
Tenemos que saber si está lleno o vacío. Aquí, cuando front_index == rear_index pensamos que está vacío, cuando rear_index + 1 == front_index pensamos que está lleno.
Vacío

NNNNNNNNNNN
^
F / R

Completo

1 2 3 4 5 6 7 8 9 10 N
^ ^
FR
En esta forma de implementación, my_queue [rear_index] es siempre inalcanzable. Si apunta a una posición que tiene datos, entonces no podemos saber si está vacía cuando front_index == rear_index.
(Ciertamente, hay otras formas de implementar sin esta limitación).
Es por eso que solo podemos usar 10 espacios en una matriz de 11 de largo.
Si aún no tiene idea de esto, búsquelo usted mismo.


RESPONDER

include<stdio.h>
int main()
{
  int a,b,c=0;
  int x[10]={0};
  while(scanf("%d",&a)!=EOF)
  {
    if(a==1)
    {
      scanf("%d",&b);
      if(c>=10)
        printf("Push Failed. The queue is full.\n");
      else
        x[c++]=b;
    }
    if(a==0)
    {
      if(c<=0)
        printf("Pop Failed. The queue is empty.\n");
      else{
        printf("%d\n",x[0]);
        for(b=1;b<=9;b++)
          x[b-1]=x[b];
        c--;
      }
    }
  }
  return 0;
}

Supongo que te gusta

Origin blog.csdn.net/jessiaflora/article/details/78677075
Recomendado
Clasificación