El lenguaje C/C++ implementa la operación de pila

1. El concepto de pila

Una pila es una estructura de datos de uso común que sigue el principio de último en entrar, primero en salir (LIFO). La operación de la pila solo se realiza en un extremo de la pila, que se denomina parte superior de la pila , y el otro extremo se denomina parte inferior de la pila . Las operaciones básicas de la pila incluyen empujar (push) y pop (pop), que se utilizan para agregar elementos a la parte superior de la pila y eliminar elementos de la parte superior de la pila, respectivamente.

En segundo lugar, la implementación de la pila.

Podemos implementar una pila usando una matriz en lenguaje C. Aquí hay una definición básica de pila:

#define MAX_SIZE 100

typedef struct {
    
    
    int data[MAX_SIZE];
    int top;
} Stack;

Aquí, usamos una matriz datapara almacenar los elementos de la pila y un número entero toppara indicar la posición de la parte superior de la pila. Cuando la pila está vacía, topel valor de -1.

1. Inicializar la pila

Antes de usar la pila, primero debemos inicializarla, lo que se puede toplograr configurándola en -1:

//初始化栈 
void init(Stack *stack) {
    
    
	stack->top = -1;
	printf("初始化栈完成......\n");
}

2. Determinar si la pila está vacía

Podemos topdeterminar si la pila está vacía juzgando si el valor es -1:

int isEmpty(Stack *stack) {
    
    
    return stack->top == -1;
}

3. Determinar si la pila está llena

Para evitar el desbordamiento de la pila, debemos pushverificar si la pila está llena antes de realizar una operación. Cuando topel valor de es igual a MAX_SIZE-1, la pila está llena:

int isFull(Stack *stack) {
    
    
    return stack->top == MAX_SIZE - 1;
}

4. Ejecutar operación de inserción

La operación de empuje de pila se usa para agregar elementos a la parte superior de la pila. Primero, es necesario determinar si la pila está llena. Si la pila no está llena, agregue el elemento a la posición señalada y muévalo hacia arriba una topposición top. :

//入栈操作 
void push(Stack *stack, int element) {
    
    
    if (!isFull(stack)) {
    
    
        stack->data[++stack->top] = element;
        printf("完成一次入栈,入栈元素:%d\n",element);
    } else {
    
    
        printf("栈满,不能入栈。\n");
    }
}

5. Realice la operación emergente

La operación de extracción de pila se usa para eliminar el elemento en la parte superior de la pila y devolver el valor del elemento. Primero, es necesario determinar si la pila está vacía. Si la pila no está vacía, el elemento en la posición topdevuelta se topmoverá hacia abajo una posición:

//出栈操作 
int pop(Stack *stack) {
    
    
    if (!isEmpty(stack)) {
    
    
        printf("完成一次出栈,");
		return stack->data[stack->top--];
    } else {
    
    
        printf("栈空,不能出栈\n");
        return -1;
    }
}

3. Código de ejemplo

El siguiente es un código de muestra simple que usa la pila, que muestra cómo empujar y abrir la pila:

#include <stdio.h>

//栈容 
#define MAX_SIZE 100

typedef struct {
    
    
    int data[MAX_SIZE];
    int top;
} Stack;

//初始化栈 
void init(Stack *stack) {
    
    
	stack->top = -1;
	printf("初始化栈完成......\n");
}

//判断栈是否为空 
int isEmpty(Stack *stack) {
    
    
    return stack->top == -1;
}

//判断是否栈满 
int isFull(Stack *stack) {
    
    
    return stack->top == MAX_SIZE - 1;
}

//入栈操作 
void push(Stack *stack, int element) {
    
    
    if (!isFull(stack)) {
    
    
        stack->data[++stack->top] = element;
        printf("完成一次入栈,入栈元素:%d\n",element);
    } else {
    
    
        printf("栈满,不能入栈。\n");
    }
}

//出栈操作 
int pop(Stack *stack) {
    
    
    if (!isEmpty(stack)) {
    
    
        printf("完成一次出栈,");
		return stack->data[stack->top--];
    } else {
    
    
        printf("栈空,不能出栈\n");
        return -1;
    }
}

//遍历栈内元素
void printStack(Stack *stack){
    
    
	printf("栈内元素为:");
	int index=stack->top;
	while(index>=0){
    
    
		printf("%d\t",stack->data[index--]);
	}
	printf("\n");
} 
int main() {
    
    
    Stack stack;
    init(&stack);

    push(&stack, 1);
    printStack(&stack);
    push(&stack, 2);
    printStack(&stack);
    push(&stack, 3);
    printStack(&stack);

    printf("出栈元素: %d\n", pop(&stack));
    printf("出栈元素: %d\n", pop(&stack));
    printf("出栈元素: %d\n", pop(&stack));

    return 0;
}

El código anterior generará el siguiente resultado:

Popped element: 3
Popped element: 2
Popped element: 1

Este es un tutorial detallado sobre la implementación de las operaciones básicas de la pila en lenguaje C. ¡Espero que esto te ayude!

Supongo que te gusta

Origin blog.csdn.net/qq_43884946/article/details/131235798
Recomendado
Clasificación