栈(Stack):后进先出的动态数组实现
1.1 核心概念
栈是一种**后进先出(LIFO, Last In First Out)**的线性表。
- 栈顶(Top):唯一允许插入和删除的一端。
- 栈底(Bottom):固定的一端。
- 操作:入栈(Push)、出栈(Pop)。
1.2 选型思考:为什么用数组?
虽然栈可以用链表实现,但我在实现时选择了动态数组,原因如下:
- 操作集中:栈的操作只在尾部进行,数组尾插/尾删复杂度为 O(1),无需移动元素。
- 缓存友好:数组内存连续,CPU 缓存命中率更高。
- 空间效率:不需要像链表那样为每个元素存储额外的指针域。
1.3 代码实现与规范
在编写代码时,我将接口定义(.h)与具体实现(.c)分离,这是 C 语言工程化的基本规范。
头文件 stack.h
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>
typedef int STDataType;
typedef struct Stack {
STDataType* arr; // 指向动态数组的指针
int top; // 栈顶指针(指向下一个可用位置,兼作大小)
int capacity; // 当前容量
} ST;
// 接口声明
void STInit(ST* ps);
void STDestroy(ST* ps);
void STPush(ST* ps, STDataType x);
;
STDataType ;
;
;


