📜  数据结构-堆栈的数组实现(1)

📅  最后修改于: 2023-12-03 15:10:19.980000             🧑  作者: Mango

数据结构-堆栈的数组实现

简介

堆栈是一种线性数据结构,遵循先进后出(Last In First Out, LIFO)的原则。堆栈可以使用数组和链表实现。本文介绍用数组实现堆栈。

实现

用数组实现堆栈时,需要定义一个栈顶指针top,初始值为-1。入栈操作就是将元素放到top位置,然后top指针加1;出栈操作就是将top位置的元素弹出,并将top指针减1。

定义结构体

为了方便管理堆栈,需要定义一个结构体Stack,用于存储堆栈的相关信息。Stack结构体包含两个成员:

  • int* array:指向堆栈数组的指针
  • int top:栈顶指针
typedef struct Stack {
    int* array;
    int top;
} Stack;
初始化堆栈

在使用堆栈之前,需要先初始化堆栈。初始化堆栈需要传递一个size参数表示堆栈的大小。初始化时需要动态分配一个大小为size的整型数组,并将栈顶指针初始化为-1。

void init(Stack* s, int size) {
    s->array = (int*)malloc(sizeof(int) * size);
    s->top = -1;
}
入栈操作

入栈操作需要判断堆栈是否已满。如果已满,就不能再入栈了。如果未满,就将元素放到top位置,然后top指针加1。

void push(Stack* s, int value) {
    if (s->top < size - 1) {
        s->top++;
        s->array[s->top] = value;
    } else {
        printf("Stack is full.\n");
    }
}
出栈操作

出栈操作需要判断堆栈是否为空。如果为空,就不能再出栈了。如果不为空,就将top位置的元素弹出,并将top指针减1。

int pop(Stack* s) {
    if (s->top >= 0) {
        int value = s->array[s->top];
        s->top--;
        return value;
    } else {
        printf("Stack is empty.\n");
        return -1;
    }
}
销毁堆栈

在程序结束时需要销毁堆栈,释放动态分配的内存。

void destroy(Stack* s) {
    free(s->array);
    s->top = -1;
}
总结

本文介绍了用数组实现堆栈,包括堆栈的定义、初始化、入栈、出栈和销毁操作。堆栈的实现相对简单,但是在实际应用中十分重要。堆栈可以应用于递归、表达式求值、缓存管理等场景。希望本文对大家有所帮助。