一、单向链表(Singly Linked List)
1.1 基本定义
单向链表是一种线性数据结构,由一系列节点通过指针单向连接而成。每个节点包含数据域和指向下一个节点的指针域。
1.2 结构定义
// 单向链表节点结构
typedef struct ListNode {
int data; // 数据域
struct ListNode *next; // 指针域
} ListNode;
// 单向链表管理结构(可选)
typedef struct LinkedList {
ListNode *head; // 头指针
ListNode *tail; // 尾指针
int length; // 链表长度
} LinkedList;
1.3 核心特性
- 动态内存分配:节点按需分配,无需预知数据规模
- 非连续存储:物理地址分散,通过指针建立逻辑联系
- 灵活操作:支持任意位置插入和删除
- 单向遍历:仅支持从头至尾的顺序访问
1.4 时间复杂度分析
| 操作 | 时间复杂度 | 备注 |
|---|---|---|
| 头插 | O(1) | 直接修改头指针 |
| 尾插 | O(1)/O(n) | 若有尾指针则为 O(1) |
| 中间插入 | O(n) | 需遍历至指定位置 |
| 删除 | O(1)/O(n) | 头删除 O(1),其他需遍历 |
| 查找 | O(n) | 必须顺序遍历 |
二、顺序栈(Sequential Stack)
2.1 基本定义
顺序栈基于数组实现,通过固定偏移量维护栈顶位置,利用连续内存空间存储数据元素。
2.2 结构定义
// 静态顺序栈
# MAX_SIZE 100
data[MAX_SIZE];
top;
} StaticSeqStack;
*data;
top;
capacity;
} DynamicSeqStack;

