介绍
Swift已广泛应用于iOS / MAC OSX软件开发,但与C ++相比,Swift标准库仍缺少一些通用的算法实现,如C ++ STL。
用于算法的Swift类,包括单链表类,堆栈类,队列类
背景
我开发了一组Swift泛型队列(FIFO)和堆栈(FILO)类,以匹配C ++ STL队列和堆栈类的功能。

项目的细节
该项目实现了一组Swift泛型类:
为了获得更好的性能和内存使用,这些Swift队列和堆栈类由一组Swift泛型单链表节点和单链表列实现。
单链表类CSingleLinkedList是实现队列(FIFO)和堆栈(FILO)类的基础类。它是单链表节点类的包装类CSingleLinkedListNode,包含数据,下一节点的引用和循环查找算法实现的哈希值。
为了避免CSingleLinkedList类中的循环,CSingleLinkedListNode使用对象实例的对象密钥的查找表来实现循环查找算法。为了确保CSingleLinkedListNode查找表中每个对象实例的唯一键值,通过对两个随机整数变量进行求幂来设计和生成内置整数类型哈希值属性。
通过在查找表中检查重复节点对象的密钥的存在来实现循环查找算法,如果在查找表中没有找到重复的键值,则链接列表不循环。
1.可选
在C ++编码世界中,指针变量null值赋值或null值条件检查是很常见的。在Swift编码中的这种情况下,必须将变量声明为可选的后续null值赋值,并且必须在以后的代码实现中应用可选的展开。
var tempValue : T ? // "?" as declaration of Optional
tempValue = nil // If not declared as Optional, compilation error here
2.泛型
Swift Generics提供与C ++模板类似的功能,因此Swift Generics使得将C ++模板基本代码移植到Swift变得更加容易。本文中的所有类都由Generics实现。
3. Swift多值函数返回:元组
Swift编程中的一个强大功能是Swift Tuples允许多个值函数返回。在CSingleLikedListNode类中,循环查找函数iscycled()返回三个值,boolean值表示链表循环与否,两个节点对象使链表循环。
4.对于循环
Swift for循环不如C / C ++ for循环灵活或强大。Swift for循环条件是常量,静态,不像C / C ++那样支持动态条件。对于C / C ++,for循环代码如下所示:
for (int i = 0; i <= (10-i); ++i)
{
std::cout << i << std::endl;
}
上面的C / C ++代码不能直接移植到Swift for循环中,因为它i < (10-i)是动态边界。它的输出是0 1 2 3 4 5。
对于Swift for循环代码,例如:
var i : Int = 0
for i in 0 ... (10 - i) {
print (i)
}
这个Swift代码段与C ++代码不同; 它的条件边界是静态的,并且初始化为10by(10-i)i和初始值0。它的输出是0 1 2 3 4 5 6 7 8 9 10。移植到Swift的替代解决方案是使用while循环:
var i : Int = 0
while i <= (10-i) {
print(i)
i += 1
}
对于for具有递减步骤的Swift 循环,使用通用函数“ stride”是最佳解决方案。对于C ++代码:
for (int i = 10; 0 <= i; --i)
{
std::cout << i << std::endl;
}
等效的Swift代码是:
for i in stride(from:10, to:0, by:-1) {
print (i)
}
如何运行代码
该项目是在MAC OSX上使用XCode开发的,这些类的测试用例是在XCode playground中开发的。GitHub中的代码库是https://github.com/zhaohuixing/Swift-Algorithm-Library。或者在本站下载
本文链接:https://www.it72.com/12501.htm