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开发数据结构和算法
文章位置:http://ybzwz.com/article/dsdhpoe.html