对于栈的认识,相信每个学习数据结构的小伙伴多多少少有一定的认识和了解。很多刚刚学习的小伙伴说学习数据结构在实际中没怎么见到应用,那是因为你没有去仔细的观察,而且像栈这常用到的数据结构通常会使用在实际开发中,比如:表达式的运算、花括号的匹配以及浏览器的前进后退等等很多。
这些实际开发的实现如果不去研究,你永远不知道数据结构在实际中的应用,当你学习完今天的栈数据结构时,然后去研究下实际中已经使用到的应用,才能让你在今后的实际开发中用到栈这种数据结构,从而使你的开发更加灵活、多变。
思维导图
这篇文章将要学习到的内容。
![e2bba6b0c1cd2bb972da9882fd152bf3.png](https://i-blog.csdnimg.cn/blog_migrate/39bb045f54f49f6d2d4266c87d834d34.jpeg)
1
基本常识
1.1 什么是栈
我们用一种最简单的生活常识描述一下,比如我们往柜子里放东西,先放的东西是需要放到柜子最里边,后放的东西在柜子的最外边;如果我们要取东西,先要取柜子最外边的东西,才能取到柜子最里边的东西。这种先进后出,后进先出的结构称为“栈”。
![9aab8f61b6c5265e61f5e8af71d662d3.png](https://i-blog.csdnimg.cn/blog_migrate/171c51b427ecbabdaa7f93d8bb5baae8.jpeg)
1.2 栈的特点
“先进后出,后进先出”。
1.3 栈的操作
栈的操作就两种,分别为出栈和入栈。那我们上边的例子,我们往柜子里放东西的过程称为入栈;我们在柜子里拿东西的过程称为出栈。
![a8263e335e5feb7c2081f21565a584ba.png](https://i-blog.csdnimg.cn/blog_migrate/a6053522552b0b2c4043e66ce627d29b.jpeg)
PS:柜子只有一个出口和入口,而且出口和入口是一样的。如果两端都有开口,就变成了队列,后期的文章会讲到。
2
栈的实现
我们前边的文章也讲过,所有的数据结构基本都是由数组和链表演化而来的,所以今天讲的栈这种数据结构也不例外。
栈的实现主要有两种,一种是数组的实现,叫做顺序栈,另外一种是链表的实现,叫做链式栈。如下: