【数据结构】栈

栈(数组模拟)

结构体定义
cpp 复制代码
typedef int StackData;
typedef struct StackNode
{
	StackData* a;
	int top;
	int capacity;
}Stack;
初始化
cpp 复制代码
void StackInit(Stack* st)
{
	assert(st);
	StackData* tmp = (StackData*)malloc(sizeof(StackData) * 4);
	if (tmp == NULL)
	{
		perror("malloc fail");
		return;
	}
	st->a = tmp;
	st->capacity = 4;
	st->top = -1;
}
销毁和判空
cpp 复制代码
void StackDestory(Stack* st)
{
	assert(st);
	st->a = NULL;
	st->top = st->capacity = 0;
}

bool Stack_Empty(Stack* st)
{
	return st->top == -1;
}
入栈和出栈
cpp 复制代码
void StackPush(Stack* st, StackData x)
{
	assert(st);
	if (st->top + 1 == st->capacity)
	{
		StackData* tmp = (StackData*)realloc(st->a, sizeof(StackData) * st->capacity * 2);
		if (tmp == NULL)
		{
			perror("realloc fail");
			return;
		}
		st->a = tmp;
		st->capacity *= 2;
	}
	st->a[++st->top] = x;
}
void StackPop(Stack* st)
{
	assert(st);
	assert(!Stack_Empty(st));
	st->top--;
读取个数和取顶部数据
cpp 复制代码
int StackSize(Stack* st)
{
	assert(st);
	return st->top + 1;
}

int StackTop(Stack* st)
{
	assert(st);
	assert(!Stack_Empty(st));
	return st->a[st->top];
}

括号匹配

相关推荐
zone77399 小时前
006:RAG 入门-面试官问你,RAG 为什么要切块?
后端·算法·面试
CoovallyAIHub11 小时前
OpenClaw 近 2000 个 Skills,为什么没有一个好用的视觉检测工具?
深度学习·算法·计算机视觉
CoovallyAIHub11 小时前
CVPR 2026 | 用一句话告诉 AI 分割什么——MedCLIPSeg 让医学图像分割不再需要海量标注
深度学习·算法·计算机视觉
CoovallyAIHub12 小时前
Claude Code 突然变成了 66 个专家?这个 5.8k Star 的开源项目,让我重新理解了什么叫"会用 AI"
深度学习·算法·计算机视觉
兆子龙12 小时前
前端哨兵模式(Sentinel Pattern):优雅实现无限滚动加载
前端·javascript·算法
CoovallyAIHub15 小时前
9个视觉语言模型工厂实测:Qwen 87.9%碾压全场,你的显卡能跑哪个?
算法
SparkX开源AI知识库16 小时前
手摸手带你安装OpenClaw并对接飞书
算法·架构
一语071616 小时前
3分钟搞懂深度学习AI:实操篇:卷积层
人工智能·算法
哈里谢顿1 天前
跳表(Skip List):简单高效的有序数据结构
数据结构