¿Qué es una pila? El lenguaje C realiza el algoritmo de operación pop y push en la pila
pila
Una pila (stack) es una estructura de datos que tiene las características de Last-In-First-Out (Last-In-First-Out), lo que significa que el último elemento agregado a la pila es el primero en ser sacado. La pila tiene dos operaciones básicas: empujar (push) un nuevo elemento a la parte superior de la pila y sacar (pop) el elemento superior de la pila.
Implementar operaciones pop y push en la pila
En lenguaje C, una estructura de datos de pila se implementa utilizando una matriz. El siguiente es el algoritmo para las operaciones pop y push en la pila:
Elemento de empuje:
void push(int stack[], int *top, int val, int size) {
if (*top == size - 1) { // 检查栈是否已满
printf("Stack Overflow\n");
return;
}
*top += 1; // 栈指针加一
stack[*top] = val; // 将新元素压入栈顶
}
elemento emergente:
int pop(int stack[], int *top) {
if (*top == -1) { // 检查栈是否已空
printf("Stack Underflow\n");
return -1;
}
int val = stack[*top]; // 获取栈顶元素
*top -= 1; // 栈指针减一
return val; // 返回栈顶元素
}
Estos algoritmos suponen una pila con una capacidad máxima de size
y utilizan un puntero top
para realizar un seguimiento del índice del elemento superior de la pila. Tenga en cuenta que estos algoritmos no realizan ninguna inicialización o borrado de los datos en la pila, por lo que la pila debe inicializarse antes de su uso.
explicar
Expliquemos estos códigos de lenguaje C en detalle.
Primero push
la función:
void push(int stack[], int *top, int val, int size) {
if (*top == size - 1) { // 检查栈是否已满
printf("Stack Overflow\n");
return;
}
*top += 1; // 栈指针加一
stack[*top] = val; // 将新元素压入栈顶
}
- Lo que hace esta función es insertar un valor entero
val
en la pila. El parámetrostack
es una matriz de enteros, que almacena los elementos de la pila,*top
y un puntero a un entero, que se utiliza para registrar el índice del elemento en la parte superior de la pila.size
es la capacidad máxima de la pila. - La primera línea de código en la función,
if (*top == size - 1)
verifica si la pila está llena. Si la pila está llena, imprimimos un mensaje de error y volvemos sin ejecutar el siguiente código. Si la pila no está llena, ejecute el siguiente código para insertar un nuevo elemento en la parte superior de la pila. *top += 1;
Esta línea de código mueve el puntero a la parte superior de la pila una posición hacia arriba. Dado que el índice de la matriz de lenguaje C comienza desde 0, el índice del siguiente elemento es, pero queremos empujar la parte superior de la pila*top + 1
antes de este índice , por lo que primero debemos agregar 1 y luego empujar la parte superior de la pila, Al igual que esta línea de código: .val
*top
val
stack[*top] = val;
Aquí está pop
la función:
int pop(int stack[], int *top) {
if (*top == -1) { // 检查栈是否已空
printf("Stack Underflow\n");
return -1;
}
int val = stack[*top]; // 获取栈顶元素
*top -= 1; // 栈指针减一
return val; // 返回栈顶元素
}
- La función de esta función es extraer un valor entero de la pila, que es una operación de extracción. Los parámetros
stack
son*top
los mismos que los de la función push anterior, que son una matriz de enteros y un puntero a enteros, que se utilizan para registrar el índice del elemento en la parte superior de la pila. if (*top == -1)
Esta línea de código se usa para verificar si la pila está vacía. Si la pila está vacía, imprimimos un mensaje de error y regresamos. De lo contrario, sacamos el elemento superior de la pila y movemos el puntero una posición hacia abajo. Eso es lo que hacenint val = stack[*top];
el*top -= 1;
código y.- Finalmente,
return val;
devuelva el elemento superior de la pila extraída.
En resumen, estas dos funciones implementan conjuntamente una estructura de datos de pila, que puede realizar operaciones push y pop. Al usar estas funciones, primero inicialice la matriz de pila y asegúrese de que no se exceda la capacidad máxima de la pila.