ios开发数据结构,ios开发数据结构和算法
iOS开发之一数据结构与算法
1、 数据结构 其实就是数据和结构,就是一堆数据在内存中以什么样的形式存在。
云浮ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!
2、 数据 在内存中的结构分为 逻辑结构 和 物理结构 。
数据在内存中有4种:集合结构, 线性结构,树型结构,图形结构。
iOS开发被问到 的LRU淘汰策略(链表 哈希表)
LRU 是优先缓存最近使用过的资源, 淘汰最近没有使用过的资源。根据最近使用原则, 这些临时资源会直接排在缓存队列的最前面, 然后才能被被慢慢淘汰掉
在LRU算法中,使用了一种有趣的数据结构,这种数据结构叫作哈希链表。
什么是哈希表
哈希表(又叫散列表)是根据关键码值(Key value)而直接进行访问的 数据结构 。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做 散列函数 ,存放记录的 数组 叫做 散列表 。
什么是链表
N个节点离散存储
彼此通过指针相连
每个节点只有一个前驱节点,每个节点只有一个后续节点,首节点没有前驱节点,尾节点没有后续节点
明白了定义我们再来理解一下
在哈希链表中,这些Key-Value是被一个链条串了起来。每一个Key-Value都具有它的前驱Key-Value、后继Key-Value,就像双向链表中的节点一样
1.假设使用哈希链表来缓存图片信息,目前缓存了4个图片,这4个图片是按照被访问的时间顺序依次从链表右端插入的
5.后来用户又访问图片6,图片6在缓存里没有,需要插入哈希链表中。假设这时缓存容量已经达到上限,必须先删除最近最少被访问的数据,那么位于哈希链表最左端的图片1就会被删除,然后再把图片6插入最右端的位置。
这就是整个LRU的淘汰策略
LRU 在应对批量临时资源时候性能会很差, 比如进入页面, 大量请求图片然后直接退出根据最近使用原则, 这些临时资源会直接排在缓存队列的最前面, 然后才能被被慢慢淘汰掉.
LFU 是优先缓存使用最多的资源, 每个资源需要记录使用次数, 相对于 LRU 的实现会更为复杂一些.
在后续的缓存改进中, 我们可以使用 LRU-K 算法, 以解决 LRU 算法“缓存污染”的问题, 提升缓存的命中率以及缓存逻辑的性能.
iOS开发之基础篇(5)—— NSNumber、NSValue
Xcode 8.2.1
前文说过,NSArray和NSDictionary只能存入OC对象。不信我们可以做个试验:将一个int类型或者是NSInteger放入NSMutableArray里面。(NSInteger和int的差别:NSInteger会根据系统的位数32or64,自动选择int的最大数值int or long,这样我们就不用考虑设备是32位还是64位系统)
这样是会编译出错的,存入不成功。
那怎么办呢?所以,我们需要将int或者NSInteger类型转换成NSNumber(OC对象),然后再存入NSArray中。
NSNumber可以转换一系列的基础数字类型(char、int、float、long、bool等等),还提供了一个compare方法来将NSNumber对象进行数值排序。
我们来看看NSNumber有哪些要掌握的知识点:
运行结果如下:
之所以把NSNumber和NSValue放到同一篇,是因为NSNumber是NSValue的子类,NSValue除了能够包装NSNumber能够包装的基础数字类型外,还能够包装系统框架提供的CGRect/CGPoint/CGSize等数据结构,也可以是自己定义的struct。最终也能放入数组。
同样,我们来看看它的应用:
运行结果:
iOS面试题12-数据结构算法篇
《 2018 iOS面试题系列 》
这里没有图啊,大家可以抽象一下。
数据结构的存储一般常用的有两种 顺序存储结构 和 链式存储结构
发挥想象力啊。 举个列子。数组。1-2-3-4-5-6-7-8-9-10。这个就是一个顺序存储结构 ,存储是按顺序的 举例说明啊。 栈。做开发的都熟悉。栈是先进后出 ,后进先出的形式 对不对 ?!他的你可以这样理解
hello world 在栈里面从栈底到栈顶的逻辑依次为 h-e-l-l-o-w-o-r-l-d 这就是顺序存储 再比如 队列 ,队列是先进先出的对吧,从头到尾 h-e-l-l-o-w-o-r-l-d 就是这样排对的
再次发挥想象力 这个稍微复杂一点 这个图片我一直弄好 ,回头找美工问问,再贴上 例如 还是一个数组
1-2-3-4-5-6-7-8-9-10 链式存储就不一样了 1(地址)-2(地址)-7(地址)-4(地址)-5(地址)-9(地址)-8(地址)-3(地址)-6(地址)-10(地址)。每个数字后面跟着一个地址 而且存储形式不再是顺序 ,也就说顺序乱了,1(地址) 1后面跟着的这个地址指向的是2,2后面的地址指向的是3,3后面的地址指向是谁你应该清楚了吧。他执行的时候是 1(地址)-2(地址)-3(地址)-4(地址)-5(地址)-6(地址)-7(地址)-8(地址)-9(地址)-10(地址),但是存储的时候就是完全随机的。明白了?!
还是举例子。理解最重要。不要去死记硬背 哪些什么。定义啊。逻辑啊。理解才是最重要滴
二叉树有五种表现形式
二叉树可以转换成森林 树也可以转换成二叉树。这里就不介绍了 你做项目绝对用不到
数据结构大致介绍这么多吧。理解为主, 别死记,死记没什么用
从现在开始介绍算法啊
二叉树这个比较麻烦 还有平衡二叉树 有点绕 如果不懂二叉树这一块 你是百分之二百看不懂的
原文链接
新闻名称:ios开发数据结构,ios开发数据结构和算法
URL分享:http://scyanting.com/article/dsdhpoe.html