C语言堆栈入门指南


在C语言中,堆栈(Stack)是一种重要的数据结构,它遵循后进先出(LIFO, Last In First Out)的原则。下面我将为你提供一个C语言堆栈的入门指南,包括堆栈的基本概念和实现方式。

### 堆栈的基本概念

堆栈是一种只能在一端(称为栈顶)进行插入和删除操作的线性表。堆栈的主要操作有两种:

1. **压栈(Push)**:在栈顶添加一个元素。

2. **弹栈(Pop)**:移除栈顶的元素,并返回这个元素。

### 堆栈的实现方式

在C语言中,堆栈可以通过数组或链表来实现。这里我们使用数组来演示一个简单的堆栈实现。

#### 示例代码

以下是一个使用数组实现的堆栈的示例代码:


#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define MAX_SIZE 100 // 定义堆栈的最大容量

typedef struct {
    int items[MAX_SIZE]; // 存储堆栈元素的数组
    int top; // 栈顶指针
} Stack;

// 初始化堆栈
void initStack(Stack *s) {
    s->top = -1; // 初始时,栈为空,栈顶指针指向-1
}

// 检查堆栈是否为空
bool isEmpty(Stack *s) {
    return s->top == -1;
}

// 检查堆栈是否已满
bool isFull(Stack *s) {
    return s->top == MAX_SIZE - 1;
}

// 压栈操作
bool push(Stack *s, int item) {
    if (isFull(s)) {
        printf("Stack is full!\n");
        return false;
    }
    s->items[++s->top] = item; // 先移动栈顶指针,再存储元素
    return true;
}

// 弹栈操作
bool pop(Stack *s, int *item) {
    if (isEmpty(s)) {
        printf("Stack is empty!\n");
        return false;
    }
    *item = s->items[s->top--]; // 先存储栈顶元素,再移动栈顶指针
    return true;
}

// 查看栈顶元素(不移除)
bool peek(Stack *s, int *item) {
    if (isEmpty(s)) {
        printf("Stack is empty!\n");
        return false;
    }
    *item = s->items[s->top];
    return true;
}

int main() {
    Stack s;
    initStack(&s);

    push(&s, 10);
    push(&s, 20);

    int item;
    if (peek(&s, &item)) {
        printf("Top item: %d\n", item);
    }

    if (pop(&s, &item)) {
        printf("Popped item: %d\n", item);
    }

    return 0;
}

这个代码段定义了一个堆栈结构体`Stack`,并提供了初始化、检查空满、压栈、弹栈和查看栈顶元素的功能。你可以根据这个示例进一步学习和扩展堆栈的其他操作。