如何获取周至地区做网站建筑公司的二级资质?
摘要:周至做网站,建筑公司二级资质要求,下载app,长春做网站公司长春网站排名🚀write in front🚀 📝个人主页&#xff1
周至做网站,建筑公司二级资质要求,下载app,长春做网站公司长春网站排名#x1f680;write in front#x1f680; #x1f4dd;个人主页#xff1a;认真写博客的夏目浅石. #x1f381;欢迎各位→点赞#x1f44d; 收藏⭐️ 留言#x1f4dd; #x1f4e3;系列专栏#xff1a;C语言实现数据结构 #x1f4ac;总结#xff1a;希望你看完… write in front 个人主页认真写博客的夏目浅石. 欢迎各位→点赞 收藏⭐️ 留言 系列专栏C语言实现数据结构 总结希望你看完之后能对你有所帮助不足请指正共同学习交流 ✉️如果无聊的话就来逛逛我的博客栈吧stack-frame.cn 文章目录前言一、栈的概念二、栈的结构三、栈的实现3.1 结构设计3.2 接口总览3.3 初始化3.4 销毁3.5 判断栈是否为空3.6 入栈3.7 出栈3.8 取栈顶元素3.9 计算栈的大小四、 完整代码Stack.hStack.ctest.c总结前言
这几天看了数据结构的栈这一节真的收获很大第一次看没有动手敲代码就是感觉学了和没学一样今天也是从新又看了一遍并且边学边敲代码终于算是非常理解栈这个东西了今天就把我所学到的知识给大家分享一下。 一、栈的概念
栈 是一个特殊的 线性表
栈只允许在固定的一段进行插入和删除元素的操作。进行数据插入和删除操作的一端称为栈顶不进行操作的一端称为栈底
栈中的元素遵守 后进先出 (LIFO - Last In First Out) 的原则。也就是先进的后出后进的先出
栈对于数据的管理主要有两种操作
压栈栈的插入操作叫做进栈 / 压栈 / 入栈从栈顶进行压栈。出栈栈的删除操作叫做 出栈从栈顶进行出栈。
二、栈的结构
栈一般可以使用 数组或链表 实现。让我们分析一下使用这两种方法实现栈的结构分别是什么样的。
在分析之前我们要明确的一点是栈只对 栈顶 的元素进行操作。
那么对于 顺序栈 和 链式栈 那个更加好呢那必定是 顺序栈因为使用顺序栈的 尾插尾删非常方便 且 cpu缓存利用率也更高。而且对于顺序栈实现起来相对简单所以我们接下来就实现 顺序栈 。
三、栈的实现
3.1 结构设计
我们既然是实现 顺序栈那么它的结构肯定就和 顺序表 差不多
typedef struct Stack
{STDatatype* a; // 指向动态开辟的数组int capacity; // 栈的容量int top; // 标识 栈顶的下一个位置的下标 或 栈顶的下标
}ST;
这里的 top 我们需要好好理解一下。当top的初始值不同时top可以表示 栈顶的下一个位置的下标 或 栈顶下标。
当 top 0top 表示栈顶的下一个位置的下标 2. 当 top -1top 表示栈顶的下标 top 初始值为 -1那么需要先 top再压栈。否则会越界。当 最后一次压栈时为先 top 再压栈top 最后的位置就是栈顶的下标处。
3.2 接口总览
void StackInit(ST* ps); // 初始化
void StackDestroy(ST* ps); // 销毁
void StackPush(ST* ps, STDatatype x); // 压栈
void StackPop(ST* ps); // 出栈
STDatatype StackTop(ST* ps); // 取栈顶元素
bool StackEmpty(ST* ps); // 判空
int StackSize(ST* ps); // 计算栈的大小
3.3 初始化
我们实现的是顺序栈那么就和顺序表一样需要创建结构体变量传结构体的地址进行初始化。
在初始化的时候就给栈开上四个单位的空间并且将起始容量设定为4。
注意了我们这里设定的 top 0那么表示 top 为栈顶的下一个位置的下标。
void StackInit(ST* ps)
{// 结构体一定不为空所以需要断言assert(ps);ps-a (STDatatype*)malloc(sizeof(STDatatype) * 4);if (ps-a NULL){perror(malloc fail);exit(-1);}ps-capacity 4;ps-top 0;
}
3.4 销毁
对于栈的销毁那么我们就只需要释放动态开辟的空间将指针置空。并将 capacity 和 top 两个变量置 0即可。
