2026/4/17 14:19:27
网站建设
项目流程
从哪看出网站的建站公司,哪个旅游网站做的比较好,品牌创建和品牌建设区别,建设银行 u盾不弹出网站本次编译环境为VS2022 文章目录前言栈的实现1.什么是栈2.栈的实现一.头文件和源文件的创建以及头文件中的内容二.功能代码的实现1.定义和销毁2.增加和删除3.判断空 找栈顶 获取栈中的个数总结前言
在我们了解完链表#xff1a;单链表和双链表后 我们将开始 栈和队列的学习 今…本次编译环境为VS2022文章目录前言栈的实现1.什么是栈2.栈的实现一.头文件和源文件的创建以及头文件中的内容二.功能代码的实现1.定义和销毁2.增加和删除3.判断空 找栈顶 获取栈中的个数总结前言在我们了解完链表单链表和双链表后 我们将开始 栈和队列的学习今天我们学习的是 栈 的代码实现 其中会有部分画图内容 和代码内容方便各位理解栈的实现1.什么是栈栈是一种特殊的线性表其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶另一端称为栈底栈 是先进后出的通过图例可以更快地理解2.栈的实现一.头文件和源文件的创建以及头文件中的内容老样子 一个.h 文件和一个 .c文件给到.h文件的实现代码#pragmaonce#includestdio.h#includestdlib.h#includestdbool.h#includeassert.htypedefintSTDateType;typedefstructStack{STDateType*a;inttop;intcapacity;}ST;//功能函数//定义voidSTInit(ST*ps);//销毁voidSTDestory(ST*ps);//插入voidSTPush(ST*ps,STDateType x);//删除voidSTPop(ST*ps);//找栈顶STDateTypeSTTop(ST*ps);//判断空boolSTEmpty(ST*ps);//获取栈中的个数intSTSize(ST*ps);二.功能代码的实现1.定义和销毁定义和销毁其实和我们以前学过的链表顺序表大差不差 这里放出实现代码直接给各位观看voidSTInit(ST*ps){assert(ps);ps-aNULL;ps-capacity0;ps-top0;}//销毁voidSTDestory(ST*ps){assert(ps);free(ps-a);ps-aNULL;ps-capacityps-top0;}2.增加和删除了解完图例后呈现代码给各位//插入voidSTPush(ST*ps,STDateType x){assert(ps);//当我们的 top capacity的时候 要进行扩容操作 否则无法容纳归纳topif(ps-topps-capacity){intnewcapacityps-capacity0?4:2*ps-capacity;STDateType*tmp(STDateType*)realloc(ps-a,sizeof(STDateType)*newcapacity);if(tmpNULL){perror(realloc fail);return;}//完成扩容操作ps-atmp;ps-capacitynewcapacity;}//扩容结束后 进行插入操作ps-a[ps-top]x;ps-top;}//删除voidSTPop(ST*ps){assert(ps);assert(ps-top0);//top不大于0删不了啊ps-top--;}这里的扩容操作与顺序表中的几乎一样 注意realloc的类型 和newcapacity的书写即可3.判断空 找栈顶 获取栈中的个数这三个功能函数其实都大同小异都是根据 top来进行实现判断空 只需看 top0 如果等于0 则栈为空找栈顶 也是 看 数组中[top-1]的值即可获取栈中的个数 其实就是 看top的大小 当有一个值时 top 1同理可得 看top大小就能看出 栈中的个数给到代码给各位//找栈顶STDateTypeSTTop(ST*ps){assert(ps);assert(ps-top0);returnps-a[ps-top-1];}//判断空boolSTEmpty(ST*ps){assert(ps);returnps-top0;}//获取栈中的个数intSTSize(ST*ps){assert(ps);returnps-top;}总结栈的代码书写较为简单 但其中重要的原理大家也不能小觑 后进先出的规则不可被忽略 所以各位书写的时候尽量通过画图来解决此类问题感谢各位彦祖亦非的观看 走之前不妨点个小赞 谢谢