1.顺序栈
2.链栈
四、栈的常见算法实现
1.初始化
2.判空
3.判满
4.顺序栈取栈顶元素
5.顺序栈入栈
6.顺序栈出栈
五、双栈
1.双端顺序栈进栈操作
2.双端顺序栈出栈操作
六、栈的应用举例
1.回文游戏
2.多进制输出
3.表达式求值
4.地图染色
七、总结与提高
一、前言
- 掌握栈这种抽象数据类型的特点,在相应的实际问题中正确应用相关代码
- 掌握栈类型的两种实现方法
二、基本概念
- 定义:只允许在一端进行插入或删除的线性表
- 栈顶(top):允许进行插入或删除的一端
- **栈底(bottom)😗*与栈顶相对应的一端
- **特点:**先进后出
三、栈的表示和实现
1.顺序栈
- 定义:一组地址连续的存储单元依次存放自栈底到栈顶的数据元素
- top :用来表示栈顶元素的位置
* top==-1表示空栈
* top==NULL表示栈不存在
* top>stacksize元素溢出
结构体定义:
#define n 500//定义顺序栈大小
struct stack
{
int top;//栈顶指针
int a[n];//顺序栈数组
}SeqStack;
2.链栈
结构体定义:
typedef struct node
{
int data;//定义数据类型
struct node*next;//定义链栈
}ChaiinStack;
特点:
- 链栈没有栈满问题,大小可以随时扩充
- 插入和删除在栈顶处实行
- 链式栈的栈顶在链头
- 与单链表存储结构一致,与顺序表逻辑结构一致
四、栈的常见算法实现
动态图:
算法讲解:
- push入栈,指针top向上移动
- pop出栈,指针top向下移动
1.初始化
void InitStack(SeqStack *S)
{ /构造一个空栈S/
S->top = -1;
}
2.判空
/顺序栈判栈空/
int IsEmpty(SeqStack *S)
{ /判断栈S为空栈时返回值为真,反之为假/
return(S->top==-1?TRUE:FALSE);
}
3.判满
/顺序栈判栈满/
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
最后
你要问前端开发难不难,我就得说计算机领域里常说的一句话,这句话就是『难的不会,会的不难』,对于不熟悉某领域技术的人来说,因为不了解所以产生神秘感,神秘感就会让人感觉很难,也就是『难的不会』;当学会这项技术之后,知道什么什么技术能做到什么做不到,只是做起来花多少时间的问题而已,没啥难的,所以就是『会的不难』。
我特地针对初学者整理一套前端学习资料
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
什么做不到,只是做起来花多少时间的问题而已,没啥难的,所以就是『会的不难』。
我特地针对初学者整理一套前端学习资料
[外链图片转存中…(img-cFLQdFgN-1712617336450)]
[外链图片转存中…(img-wcQ4qrpc-1712617336450)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-eKDwg1MB-1712617336450)]