C语言-栈操作
栈主要是由一个数组和对应里面栈的个数所构成的
这里主要介绍栈的初始化,清零,判断是否为空 和 是否为满,进行数据的插入,进行数据的删除,进行数据的提取操作
01stack.h stack函数的声明文件
/* 栈演示 */ #ifndef __01STACK_H__ #define __01STACK_H__ typedef struct { int buf[SIZE]; //SIZE宏表示数组里的元素个数,这样可以在编译的时候临时决定 int qty; //表示栈里的数字个数 } stack; //代表栈的结构体 //栈的初始化函数 void stack_init(stack * /*代表要初始化的栈*/); //栈的清理函数 void stack_deinit(stack * /*代表要清理的栈*/); //判断栈是否空的函数 int stack_empty(const stack * /*代表栈*/); //判断栈是否满的函数 int stack_full(const stack *); //获得栈里数字个数的函数 int stack_size(const stack *); //向栈里加入数字的函数 int stack_push(stack *, int ); //从栈里获取数字的函数(同时从栈里删除数字) int stack_pop(stack *, int *); //从栈里获得数字的函数(不会删除数字) int stack_top(const stack *, int *); #endif // __01STACK_H__
01stack.c
/* 栈演示 */ #include "01stack.h" //栈的初始化函数 void stack_init(stack *p_stack/*代表要初始化的栈*/) { p_stack->qty = 0; //栈里没有数字 } //栈的清理函数 void stack_deinit(stack *p_stack/*代表要清理的栈*/) { p_stack->qty = 0; //把栈里的所有数字删除 } //判断栈是否空的函数 int stack_empty(const stack *p_stack/*代表栈*/) { return !(p_stack->qty); } //判断栈是否满的函数 int stack_full(const stack *p_stack) { return p_stack->qty >= SIZE; } //获得栈里数字个数的函数 int stack_size(const stack *p_stack) { return p_stack->qty; } //向栈里加入数字的函数 int stack_push(stack *p_stack, int val) { if (p_stack->qty >= SIZE) { //检查栈是否已经满了 return 0; } p_stack->buf[p_stack->qty] = val; //把新数字赋值给qty成员变量做下标的存储区 p_stack->qty++; //把栈里的数字个数加一 return 1; //返回1表示加入成功 } //从栈里获取数字的函数(同时从栈里删除数字) int stack_pop(stack *p_stack, int *p_val) { if (!p_stack->qty) { //检查栈是不是空的 return 0; } *p_val = p_stack->buf[p_stack->qty - 1]; //从qty-1做下标的获得数字(这个数字就是最后一个数字)并通过整数类型指针形式参数把数字传递给调用函数 p_stack->qty--; //数字个数减一 return 1; //返回1表示成功获得并删除数字 } //从栈里获得数字的函数(不会删除数字) int stack_top(const stack *p_stack, int *p_val) { if (!p_stack->qty) { //处理没有数字的情况 return 0; } *p_val = p_stack->buf[p_stack->qty - 1]; return 1; }
01stack_main.c
/* 栈测试 */ #include <stdio.h> #include "01stack.h" int main() { int val = 0; stack stk = {0}; stack_init(&stk); //进行栈的初始化 printf("数字个数是%d\n", stack_size(&stk)); /*获得栈里数字个数*/ printf("判断空的结果是%d\n", stack_empty(&stk)); //判断栈是否空 printf("判断满的结果是%d\n", stack_full(&stk)); //判断栈是否满 stack_push(&stk, 10); stack_push(&stk, 20); stack_push(&stk, 30); printf("数字个数是%d\n", stack_size(&stk)); /*获得栈里数字个数*/ printf("判断空的结果是%d\n", stack_empty(&stk)); //判断栈是否空 printf("判断满的结果是%d\n", stack_full(&stk)); stack_push(&stk, 40); stack_push(&stk, 50); printf("数字个数是%d\n", stack_size(&stk)); /*获得栈里数字个数*/ printf("判断空的结果是%d\n", stack_empty(&stk)); //判断栈是否空 printf("判断满的结果是%d\n", stack_full(&stk)); stack_top(&stk, &val); printf("最后一个数字是%d\n", val); while (1) { if (!stack_pop(&stk, &val)){ //获得一个数字并把数字从栈里删除 //当不能从栈里获得数字时,就跳出循环 break; } printf("%d ", val); } printf("\n"); printf("数字个数是%d\n", stack_size(&stk)); /*获得栈里数字个数*/ printf("判断空的结果是%d\n", stack_empty(&stk)); //判断栈是否空 printf("判断满的结果是%d\n", stack_full(&stk)); stack_deinit(&stk); //进行栈的清空 return 0; }
每天更新pyQt5内容
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?