码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构与算法之美——栈

时间:2019-03-09 23:58:56      阅读:292      评论:0      收藏:0      [点我收藏+]

标签:需要   理解   个数   不可   size   数据拷贝   并且   应该   如何   

如何理解栈?

我们平时放盘子的时候,都是从下往上一个一个放,取的时候是从上往下一个一个取,不能从中间抽出。后进者先出,这就是典型的“栈”结构。从栈的操作特性上来看,栈是一种“操作受限”的线性表,只允许从一端插入和删除。

事实上,从功能上看,数组或链表确实可以替代栈,并且操作上更加灵活,但是,在使用时就比较不可控,更容易出错。

当一个数据集合只涉及在一端的插入和删除操作,并且满足后进先出的特性,应该首选“栈”这种数据结构。

实现一个栈

栈主要包含两个操作:出栈和入栈。栈既可以用数组来实现(顺序栈),也可以用链表来实现(链式栈)。不管是顺序栈还是链式栈,入栈和出栈的过程中,空间复杂度都是O(1),时间复杂度都是O(1)。

支持动态扩容的顺序栈

当数组的空间不够时,我们就重新申请一块更大的内存,将原来数组中的数据拷贝进去,这样就实现了一个支持动态扩容的数组,所以,如果要实现一个支持动态扩容的顺序栈,我们只需要在底层依赖一个支持动态扩容的数组就可以。对于出栈,我们不会设计内存的重新申请和数据搬移,出栈的时间复杂度仍然是O(1),但是对于入栈操作来说,当空间不够时,就需要重新申请内训空间和进行数据搬移,所以时间复杂度就变成了O(n)。

数据结构与算法之美——栈

标签:需要   理解   个数   不可   size   数据拷贝   并且   应该   如何   

原文地址:https://www.cnblogs.com/westCastle/p/10503540.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!