本文详细解释了C语言中栈数据结构的实现,包括栈的定义、创建、入栈、出栈、获取栈顶元素、判断栈空/满、销毁栈等操作。并通过示例代码展示了栈的基本应用。

  1. 定义栈结构:

    typedef struct Stack {
        int* data;
        int top;
        int capacity;
    } Stack;
    

    栈结构包含三个成员:'data'是一个整型数组,用于存储栈中的元素;'top'是栈顶的索引,初始值为-1;'capacity'是栈的最大容量。

  2. 创建一个新栈:

    Stack* createStack(int capacity) {
        Stack* stack = (Stack*)malloc(sizeof(Stack));
        stack->data = (int*)malloc(sizeof(int) * capacity);
        stack->top = -1;
        stack->capacity = capacity;
        return stack;
    }
    

    'createStack'函数用于创建一个具有给定容量的新栈。它动态分配内存来存储栈结构和栈数据,并将栈顶索引初始化为-1。

  3. 判断栈是否为空和是否已满:

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

    'isEmpty'函数用于判断栈是否为空,即栈顶索引是否为-1;'isFull'函数用于判断栈是否已满,即栈顶索引是否等于栈容量减1。

  4. 入栈操作:

    void push(Stack* stack, int item) {
        if (isFull(stack)) {
            printf('栈已满,无法入栈\n');
            return;
        }
        stack->data[++stack->top] = item;
        printf('元素 %d 入栈成功\n', item);
    }
    

    'push'函数用于将元素推入栈中。它首先检查栈是否已满,如果是,则打印错误消息并返回;否则,将元素放入数组中栈顶索引的下一个位置,并将栈顶索引增加1。

  5. 出栈操作:

    int pop(Stack* stack) {
        if (isEmpty(stack)) {
            printf('栈为空,无法出栈\n');
            return -1;
        }
        int item = stack->data[stack->top];
        stack->top--;
        printf('元素 %d 出栈成功\n', item);
        return item;
    }
    

    'pop'函数用于从栈中弹出元素。它首先检查栈是否为空,如果是,则打印错误消息并返回-1;否则,返回栈顶索引指向的元素,并将栈顶索引减1。

  6. 获取栈顶元素:

    int peek(Stack* stack) {
        if (isEmpty(stack)) {
            printf('栈为空\n');
            return -1;
        }
        return stack->data[stack->top];
    }
    

    'peek'函数用于获取栈顶元素,即栈顶索引指向的元素。它首先检查栈是否为空,如果是,则打印错误消息并返回-1。

  7. 销毁栈:

    void destroyStack(Stack* stack) {
        free(stack->data);
        free(stack);
        printf('栈销毁成功\n');
    }
    

    'destroyStack'函数用于释放栈的内存。它先释放存储栈数据的数组,然后释放栈结构本身的内存。

  8. 主函数示例:

    int main() {
        Stack* stack = createStack(5);
    
        push(stack, 10);
        push(stack, 20);
        push(stack, 30);
    
        printf('栈顶元素:%d\n', peek(stack));
    
        int item = pop(stack);
        printf('出栈元素:%d\n', item);
    
        printf('栈顶元素:%d\n', peek(stack));
    
        destroyStack(stack);
    
        return 0;
    }
    

    在主函数中,我们首先通过调用'createStack'函数创建一个具有容量为5的新栈。然后,通过'push'函数将元素10、20和30依次推入栈中。接下来,通过'peek'函数获取并显示栈顶元素。然后,通过'pop'函数将栈顶元素弹出,并显示弹出的元素。最后,通过'peek'函数再次获取并显示栈顶元素。最后,我们通过调用'destroyStack'函数销毁栈,释放内存。

这个代码示例展示了栈的基本操作,可以作为一个起点,根据需要进行修改和扩展。如果您有任何进一步的问题,请随时提问。

C语言栈数据结构实现详解及示例代码

原文地址: https://www.cveoy.top/t/topic/D2s 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录