一、引言
作为计算机科学中两种基础且关键的线性数据结构,栈(Stack)和队列(Queue)凭借其严格的访问规则和确定性的操作特性,在嵌入式系统开发中扮演着重要角色。尽管二者在逻辑结构上与线性表相似,但通过先进后出(LIFO)和先进先出(FIFO)的操作约束,它们能够为资源受限的嵌入式环境提供内存高效、时序可预测的解决方案,尤其适用于中断处理、任务调度、通信协议栈等关键场景。
本文将从栈与队列的基本概念、存储结构、操作实现,结合嵌入式系统的资源受限性,采用C语言代码示例进行说明。
二、栈(Stack)
2.1 基本概念
栈是一种后进先出(LIFO)的线性表,仅允许在栈顶进行插入(入栈)和删除(出栈)操作。其核心操作包括:初始化、判空、取栈顶元素、入栈和出栈。
2.2 存储结构与C语言实现
1、顺序栈:使用数组实现,需预分配固定大小的连续空间。
#define MAXSIZE 100 //栈的大小直接由宏定义指定
typedef struct {
SElemType base[MAXSIZE]; // 栈底指针
int top; // 栈顶指针
} SqStack;
初始化时,base和top指向同一位置,入栈时top递增,出栈时top递减。顺序栈特点如下:
- 存储效率高:顺序栈通过数组连续存储元素,无额外指针开销,存储密度为100%;适合存储固定规模数据(如已知最大深度的函数调用栈),内存利用率更高
- 访问速度快:栈顶操作(插入/删除)仅需修改top指针,时间复杂度O(1),且无动态内存分配开销;适合高频次、小规模数据操作(如CPU寄存器模拟)。
- 实