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 data
para almacenar los elementos de la pila y un número entero top
para indicar la posición de la parte superior de la pila. Cuando la pila está vacía, top
el valor de -1.
1. Inicializar la pila
Antes de usar la pila, primero debemos inicializarla, lo que se puede top
lograr configurándola en -1:
//初始化栈
void init(Stack *stack) {
stack->top = -1;
printf("初始化栈完成......\n");
}
2. Determinar si la pila está vacía
Podemos top
determinar 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 push
verificar si la pila está llena antes de realizar una operación. Cuando top
el 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 top
posició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 top
devuelta se top
moverá 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!