Swift数据结构之栈

栈:

栈是一种特殊的数据结构。其特点为“先进后出”,像菜碟一样,最先进去的放在最下面,随后进来的依次堆积。在iOS里面,也存在着栈的应用,最明显的就是导航栈了,最先显示在屏幕上的VC在栈最下面,随后点击进入显示的VC依次处于栈的顶部,随着用户不断地进行返回操作,最后面的VC至一开始的VC也依次出栈(第一个VC不可能出栈,除非将其手动关闭 )

常见的操作包括是否为空、数量、出栈、入栈、栈顶元素等操作。就出栈和入栈而言,出栈的时间复杂度为O(1),因为其获取到最后一个元素地址直接就移除了;入栈也是如此。

iOS特点:

1.栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量等值。其操作方式类似于数据结构中的栈。

2.堆区(heap):一般由程序员分配释放,若程序员不释放,则可能会引起内存泄漏。其类似于链表。

常见的基本类型、结构体、枚举是属于栈类型存储的,类是属于引用类型存储的。栈的访问由CPU直接控制进行头尾指针访问,因此速度很快,但该空间缺点是很小。

代码实现:

定义结构体,参数为泛型。mutating修饰符是对于结构体的方法而言可以使其进行地址操作的行为作用。

public struct Stack<T> {
    private var elements = [T]()
    public init() {}
     
    public mutating func pop() -> T? {
        return self.elements.popLast()
    }
 
     
    public mutating func push(element: T){
        self.elements.append(element)
    }
 
     
    public func peek() -> T? {
        return self.elements.last
    }
 
     
    public func isEmpty() -> Bool {
        return self.elements.isEmpty
    }
 
     
    public var count: Int {
        return self.elements.count
    }
     
}

 

测试应用:

var testStack: Stack = Stack<Int>()
testStack.push(element: 1)
testStack.push(element: 3)
testStack.push(element: 5)

testStack.pop()
testStack.pop()
testStack.count

结果:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Swift 是一种面向对象的编程语言,可以用于实现各种数据结构和算法。下面是一些常用的数据结构和算法的 Swift 实现: 1. 数组(Array):Swift 的数组可以存储同一类型的元素,并且支持动态扩展和收缩。例如: ``` var array = [1, 2, 3, 4, 5] array.append(6) array.removeLast() ``` 2. 链表(Linked List):链表是一种动态数据结构,可以在运行时添加或删除元素。例如: ``` class ListNode { var val: Int var next: ListNode? init(_ val: Int) { self.val = val self.next = nil } } var head = ListNode(1) head.next = ListNode(2) head.next?.next = ListNode(3) ``` 3. (Stack):是一种后进先出(LIFO)的数据结构Swift 的数组可以很方便地实现。例如: ``` var stack = [Int]() stack.append(1) stack.append(2) stack.popLast() ``` 4. 队列(Queue):队列是一种先进先出(FIFO)的数据结构Swift 的数组也可以实现队列,但效率不高。可以使用双端队列(Deque)来实现。例如: ``` struct Deque<T> { private var left = [T]() private var right = [T]() mutating func enqueue(_ element: T) { right.append(element) } mutating func dequeue() -> T? { if left.isEmpty { left = right.reversed() right.removeAll() } return left.popLast() } } var queue = Deque<Int>() queue.enqueue(1) queue.enqueue(2) queue.dequeue() ``` 5. 哈希表(Hash Table):哈希表是一种键值对存储的数据结构Swift 的字典(Dictionary)就是哈希表的一种实现。例如: ``` var dict = [String: Int]() dict["one"] = 1 dict["two"] = 2 dict["one"] ``` 6. 排序算法:Swift 提供了快速排序(Quick Sort)、归并排序(Merge Sort)、堆排序(Heap Sort)等常见的排序算法的实现。例如: ``` func quickSort<T: Comparable>(_ array: [T]) -> [T] { guard array.count > 1 else { return array } let pivot = array[array.count / 2] let less = array.filter { $0 < pivot } let equal = array.filter { $0 == pivot } let greater = array.filter { $0 > pivot } return quickSort(less) + equal + quickSort(greater) } let array = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] quickSort(array) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值