¿Qué es una pila? El lenguaje C implementa operaciones pop y push en la pila

¿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.
inserte la descripción de la imagen aquí

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 sizey utilizan un puntero toppara 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 pushla 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 valen la pila. El parámetro stackes una matriz de enteros, que almacena los elementos de la pila, *topy un puntero a un entero, que se utiliza para registrar el índice del elemento en la parte superior de la pila. sizees 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 + 1antes 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*topvalstack[*top] = val;

Aquí está popla 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 stackson *toplos 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 hacen int 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.

Supongo que te gusta

Origin blog.csdn.net/weixin_43576565/article/details/131405135
Recomendado
Clasificación