¿Es posible implementar dos pilas usando una matriz?

Sí, podemos implementar dos pilas usando array. En este ejemplo, hemos usado la clase, por lo que para hacer dos pilas tenemos que hacer dos objetos de la clase.

#include
#define max 1000

pila de clase {
int top;
público:
int a [max];
Apilar(){
arriba = -1;
}

bool stack_empty ();
empuje nulo (int x);
int pop ();
pantalla vacía ();
};

bool Stack :: stack_empty () {
si (arriba == – 1)
volver verdadero;
más
falso retorno;
}

pila vacía :: push (int x) {
int s = max-1;
if (top <s) {
top = top + 1;
a [arriba] = x;
}
más
std :: cout << "desbordamiento" << "\ n";
}

int Stack :: pop () {
if (stack_empty () == verdadero)
std :: cout << "Underflow" << "\ n";
más{
-parte superior;
devolver a [top + 1];
}
}

pila vacía :: display () {
para (int i = 0; i <= top; i ++) {
std :: cout << a [i] << "";
}
}

int main () {
Stack stack1;
stack1.push (15);
stack1.push (6);
stack1.push (2);
stack1.push (9);
stack1.push (3);
stack1.display ();
std :: cout << "\ n";
std :: cout << stack1.pop () << "\ n";
stack1.display ();
devuelve 0;
}

[1] C ++: Implementación de Stack usando Array (Estructura de datos)

Notas al pie

[1] C ++: Implementación de Stack usando Array (Estructura de datos)

Para la pila A, use topA = -1

Para la pila B use topB = 11 (Suponga que el tamaño de la matriz = 11)

Para empujar el elemento en la pila A, incremente la parte superior A

Para empujar el elemento en la pila B, disminuir B

si topA + 1 == topB o topB-1 == topA, entonces la pila A / pila B / matriz está llena.

Si, muy posible. Comience desde los dos extremos de la matriz como las “partes superiores” de las dos pilas. También debe mantener índices del final de las pilas también, para no pasar de una pila a otra.

Sí, es posible ! use dos extremos de la matriz para empujar.

La condición de pila completa es si la parte superior es igual a la longitud de la matriz o la parte superior es menor que una de la parte superior de la otra pila.