Cola de simulación de pila 3-8 (25 puntos)

Suponiendo que hay dos pilas S1 y S2, utilice estas dos pilas para simular una cola Q.

La llamada cola de simulación con la pila es en realidad llamando a las siguientes funciones de operación de la pila:

int IsFull (Stack S) : juzga si la pila S está llena, devuelve 1 o 0;
int IsEmpty (Stack S) : juzga si la pila S está vacía, devuelve 1 o 0;
void Push (Stack S, elemento ElementType) : devolver el elemento El elemento se inserta en la pila S;
ElementType Pop (Pila S) : elimina y devuelve el elemento superior de S.
Realice la operación de la cola, es decir, poner en cola void AddQ (elemento de ElementType) y quitar de la cola ElementType DeleteQ ().

Formato de entrada: La
entrada primero da dos números enteros positivos N1 y N2, indicando la capacidad máxima de la pila S1 y S2. Luego, se dan una serie de operaciones de cola: un elemento representa la entrada del elemento (aquí, asumiendo que el elemento es un número entero); D representa la operación de eliminación de cola; T representa el final de la entrada.

Formato de salida:
para cada operación D en la entrada, envíe el número eliminado de la cola correspondiente o el mensaje de error ERROR: Vacío. Si no se puede ejecutar la operación de puesta en cola, también se debe generar ERROR: Full. Cada salida ocupa 1 línea.

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

Ideas de preguntas:
1. No es necesario implementar realmente las funciones de tantas funciones mencionadas en la pregunta, puede usar dos matrices de enteros para simularlas.
2. Si desea lograr el efecto de primero en entrar, primero en salir de la cola, entonces debe dejar que los datos "vuelvan" en otra pila después de ser empujados a la pila, es decir, dejar que la pila pequeña sea la pila de entrada y la pila grande como pila de salida (porque la pila pequeña es lo suficientemente corta como para "voltear" en la pila grande).
3. Condición de cola vacía, ambas pilas (matrices) están vacías.
4. Pila en condición completa, la pila de entrada está llena y todavía hay elementos en la pila de salida. (Dibujar en papel usted mismo, bajo esta condición, si realiza una acción de "voltear", entonces el elemento que originalmente estaba en la pila de salida para ser imprimido será empujado hacia abajo, lo que no cumple con las reglas de la cola)

#include<iostream>
using namespace std;
void swap(int& a, int& b){
    
    	int t = a;	a = b;	b = t;}

int main()
{
    
    
	int m, n, x;
	int st1[100], st2[100], k1 = 0, k2 = 0;
	cin >> m >> n;
	if(m < n) swap(m, n);	//把小栈大小定位n,方便统一处理
					
	char c;
	while (cin >> c && c != 'T')
	{
    
    
		if (c == 'A')
		{
    
    
			cin >> x;
			if (k2 == n && k1)	//栈满
				cout << "ERROR:Full\n";
			else if (k2 < n)
				st2[k2++] = x;
			else if (k2 == n && !k1)
			{
    
    
				while (k2)//翻身
				{
    
    
					st1[k1++] = st2[--k2];
				}
				st2[k2++] = x;	//翻身以后再输入
			}
			else
				cout << "ERROR:Full\n";
 
		}
		else if (c == 'D')
		{
    
    
			if (!k1 && !k2)//栈空
				cout << "ERROR:Empty\n";
			else if (k1)
				cout << st1[--k1] << endl;
			else if (!k1 && k2)	
			{
    
    
				while (k2)		//翻身
				{
    
    
					st1[k1++] = st2[--k2];
				}
				cout << st1[--k1] << endl;//翻身以后再输出
			}
		}
	}
    
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/xdg15294969271/article/details/113894078
Recomendado
Clasificación