美文网首页
Swift数据结构:堆栈(stack)

Swift数据结构:堆栈(stack)

作者: bea70f4b68c4 | 来源:发表于2018-08-19 16:04 被阅读133次

堆栈就像一个功能有限的数组,你只能将新元素添加(push)到堆栈顶部,从堆栈顶部删除(pop)元素,也可以只查看而不删除(peak)顶部元素。

为什么需要这样的数据结构呢?在很多算法中,在某些时刻需要临时将对象添加到临时列表中,然后在以后再次将它们从此列表中删除,通常,添加和删除这些对象的顺序很重要,比如像函数的参数传递。

堆栈作为LIFO(后进先出),最后压栈的数可以通过pop()弹出,堆栈跟队列(queue)是非常相似,队列是FIFO(先进先出),下章再做介绍。

堆栈的演示:首先让我们添加(push)一个值

stack.push(1)

这个堆栈现在是[ 1 ],接着在添加下一个数

stack.push(3)

现在这个堆栈是[ 1 , 3 ],接着在添加一个数

stack.push(5)

现在这个堆栈是[ 1 , 3 , 5],接着从这个堆栈中删除一个数

stack.pop()

返回值是5,因为堆栈只能删除顶部数据现在堆栈是[ 1 , 3 ]

对堆栈再进行三次删除pop(),返回值将会是nil,因为堆栈里面已经没有任何数值了,根据你的具体堆栈实现也可以让堆栈为空的状态下使用pop,进行报错处理。

让我们来一起实现堆栈吧,在swift中很容易创建堆栈,它只是一个数组的包装器:

public struct Stack<T>  { //泛型,Int,Float,Double...

    fileprivate var array = [T]()

    public var isEmpty: Bool {

        return array.isEmpty

      }

      public var count: Int {

        return array.count

      }

      public mutating func push(_ element: T) {

        array.append(element)

      }

      public mutating func pop() -> T? {

        return array.popLast()

      }

      public var peak: T? {

        return array.last

     }

}

是不是挺简单的,swift中的关键词flieprivate、mutating是swift结构中的用法,需要修改结构类的属性就必须用mutating显性指出,这涉及到了结构中值复制的操作,想要进一步了解建议去查swift的语法文档。

注意的一点是,堆栈的插入都是从最后插入,如果从堆栈最前面插入将会使得堆栈内部元素进行整体后移,这样的后移时间复制度将会是O(n),直接插入将会是O(1)。

关于堆栈的有趣事实:每次调用函数或方法时,CPU都会将返回地址放在堆栈上。当函数结束时,CPU使用该返回地址跳回调用者。这就是为什么如果你调用太多函数 - 例如在一个永远不会结束的递归函数中 - 将会“堆栈溢出”,因为CPU堆栈空间会因为资源的消耗而不足。

相关文章

  • Swift数据结构:堆栈(stack)

    堆栈就像一个功能有限的数组,你只能将新元素添加(push)到堆栈顶部,从堆栈顶部删除(pop)元素,也可以只查看而...

  • Swift数据结构-堆栈Stack

    声明:算法和数据结构的文章均是作者从github上翻译过来,为方便大家阅读。如果英语阅读能力强的朋友,可以直接到s...

  • Swift 算法俱乐部:堆栈

    通过本教程,你将学习怎样用swift实现堆栈数据结构。作为基础数据结构,堆栈能解决很多程序中的问题。 开始吧 堆栈...

  • Java中的Stack

    Stack Stack是一种先进后出的数据结构:只能往堆栈(Stack)最后压入(push)元素,最后进去的必须最...

  • 数据结构与算法复习(一)

    1. 数据结构 1.1 堆栈(Stack) 后进先出(LIFO, Last In First Out) 1.2 队...

  • Cousera 公开课Princeton Algorithms

    1.Stack 这节课主要介绍了stack(堆栈)这一数据结构 这一结构的主要方法 上图的左边就是stack的可...

  • 数据结构——Golang实现堆栈

    转载请注明出处数据结构——Golang实现堆栈 1. 栈(stack) 栈(stack)在计算机科学中是限定仅在表...

  • 四、栈与队列(Stack and Queue)

    一、栈(Stack) 栈(stack),也可以叫做堆栈,是一种容器类型的数据结构,可以存入数据元素、访问元素以及删...

  • 1. 数据结构与算法:堆栈

    堆栈(Stack)是一种后进先出(LIFO)的线性数据结构,对堆栈的插入和删除操作都只能在栈顶(top)进行。 S...

  • 2018-12-28

    基于常见数据结构整理 数据结构 数据存储的常用结构有:栈、队列、数组、链表和红黑树 栈 1.stack,又称堆栈,...

网友评论

      本文标题:Swift数据结构:堆栈(stack)

      本文链接:https://www.haomeiwen.com/subject/armciftx.html