您的位置:首页 > 理论基础 > 数据结构算法

为什么要使用栈这种数据结构

2012-08-04 00:00 1871 查看

顺序栈和链栈

链栈的进栈push和出栈pop操作都很简单,没有任何循环操作,时间复杂度均为O(1)。对比一下顺序栈与链栈,它们在时间复杂度上是一样的,均为O(1)。

它们时间复杂度都是一样,那么空间复杂度呢?对于空间性能,顺序栈需要事先确定一个固定的长度,可能会存在内存空间浪费的问题吧?

对,但是顺序栈的优势是存取时定位很方便。而链栈则要求每个元素都有指针域,这也会增加了一些内存开销,但栈的长度就可以无限制了。

明白了。如果栈的使用过程中元素变化不可预料,有时很小,有时非常大,那么最好是用链栈,反之,如果它的变化在可控范围内,建议使用顺序栈会更好一些。

为什么要用栈

有人可能会觉得,用数组或链表直接实现功能不就行了吗?干吗要引入栈这样的数据结构呢?

其实这和我们明明有两只脚可以走路,干吗还要乘汽车、火车、飞机一样。理论上,陆地上的任何地方,你都是可以靠双脚走到的,可那需要多少时间和精力呢?我们更关注的是到达而不是如何去的过程。

栈的引入简化了程序设计的问题,划分了不同关注层次,使得思考范围缩小,更加聚焦于我们要解决的问题核心。反之,像数组等,因为要分散精力去考虑数组的下标增减等细节问题,反而掩盖了问题的本质。

所以现在的许多高级语言,比如Java、C#等都有对栈结构的封装,你可以不用关注它的实现细节,就可以直接使用Stack的push和pop方法,非常方便。

延伸阅读

此文章所在专题列表如下:

栈的定义与大概理解

栈的抽象数据类型ADT

顺序栈:栈的顺序存储结构

顺序栈的进栈操作

顺序栈的出栈操作

获取顺序栈的栈顶元素

链栈:栈的链式存储结构

链栈的进栈操作

链栈的初始化与遍历

链栈的出栈操作

链栈的置空操作与判断链栈是否为空

为什么要使用栈这种数据结构

递归,栈的重要应用之一

栈是如何实现递归的

接触后缀表达式(逆波兰表示法)

图解后缀表达式的计算过程

将中缀表达式转化为后缀表达式

开始学习队列这个数据结构

队列的抽象数据类型ADT

顺序队列:队列的顺序存储结构

顺序队列的入队操作

顺序队列的出队操作

顺序队列置空与判断操作

队列顺序存储结构的不足

关于循环队列的一些讲解

链队列:队列的链式存储结构

链队列的初始化操作

链队列的入队操作

链队列的出队操作

补完链队列的其它常见操作

循环队列与链队列的优劣势
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  复杂度 问题核心
相关文章推荐