给产品经理讲技术丨动手写代码:数据的结构
【相关推荐】
给产品经理讲技术丨端口二三话
给产品经理讲技术|程序员冒死揭露黑产系列之:“ARP”攻击
给产品经理讲技术丨没线,并不可怕?
给产品经理讲技术丨提需求的正确姿势是什么
给产品经理讲技术丨产品后悔药来了,讲讲热补丁技术
接上文《动手写代码:程序中的数据》。
上文我们了解到,程序归根到底就是对数据的加工和处理。要实现这个目的,首先要对数据进行分门别类。C语言(其他语言一样)有一些基本的数据类型,包括整型、浮点型以及字符型,也有一些高级的类型,比如字符串,指针等等。在此基础上,我们既可以用常量把数据写死在代码里,也可以用变量来灵活的操作数据。
这样一来,我们就能通过数据来描述现实世界里的东西了。比如学生小明:
char name[]=&8221;小明&8221;;
int age=21;
float height=1.81f;
其实程序员在接到需求之后,第一件事情就是把可能用到的东西数据化,这个过程叫构建数据模型。我们之前讲过的MVC模式,可以没有V、C,但是不能没有M。
然而,你需要明白一点,计算机所面对的数据,一般都是批量的,当然这也是机器的优势。为此,程序员发明了一个名词,叫数据结构,用来描述一些彼此有关联的数据的集合。
很拗口是吧?不用理它,你可以简单的理解为,数据结构就是用来帮助程序员处理批量的数据的(主要是插入、删除、修改、查询,简称CRUD),就像数学公式一样,即使没有,我们用最笨的方法也能处理过来,只是有些麻烦而已。
说了这么多理论,不举个例子简直是没天理。现在假设你做了一个可以推送新闻的APP,前台界面,后台协议都调好了,就差一个「接收后台服务器的推送消息,然后显示在系统通知栏上」的功能了。
我们从简单的入手。在这个例子里,消息就是数据,我们定义一个字符串变量来接收。
但是,这样毕竟一次只能接受一条,哪天发生了很多大事情,服务器一下子推了10条过来怎么办呢?很简单,之前讲过的,我们改成字符串数组就可以了。
数组的特点就是一下子可以呈很多数据,它们挨个排放,每个位置都有一个编号,数据就是通过编号来访问的。
对数组来说,插入操作比较费力。上面的例子里,后台突然推送了一条最高优先级的新闻过来(你懂的),要求插入到数组的最前端。这样一来,数组里的所有数据必然都要往后挪,给新来的腾空间。但是数组总体的容量是一定的,所以一般的做法是,重新弄一个稍微大一点的数组,写入新数据,再把之前的数据一个一个拷贝进来。
数组删除一个元素也比较复杂。数组不能在中间出现空格,删除一个元素后,你就得把后面所有元素依次向前挪一个格。
数组也不是一无是处,它的修改操作非常方便,前问讲过,你只需要喊出数据的编号,然后就可以修改它了。至于数组查询,你得一个一个遍历加对比,表现一般。
数组是一种最简单的数据结构,学名叫线性表。还有一种线性表,经常拿来和数组做对比,叫链表。链表跟数组差不多,但是它的数据不是挨个放的,也没有编号。链表的每个数据中,都有一个指向下一个数据位置的指针。如下图,1可以找到2,2可以找到3,以此类推,就像一根链子一样,把数据串起来。
这样有什么好处呢?我们先来看插入数据的操作。例如我要在A新闻和C新闻后面插入一条B新闻,我只要从链表头部开始,顺藤摸瓜,先找到A新闻,把A新闻的指针写成B的位置,然后把B新闻的指针写成C的位置,就可以了。所有改动只是改一下地址,并不会牵扯到数据的大范围移动,这一点非常方便。
删除也很简单,先顺着链子找到要删除的位置,然后把这个位置前后数据接起来就行。
而修改操作,就不是链表的强项了。你依然需要顺藤摸瓜找到要修改的数据,不像数组那样,一个编号就能找到。至于链表的查找,和数组一样,你得一个一个遍历,中规中矩。
今天先讲这些,数据结构确实有点无聊,写着写着我都要睡着了。等以后哪天想起来继续这个系列的时候,我再接着讲队列、堆栈、哈希表、二叉树这些程序员经常用到的数据结构。所以不要高兴的太早,更无聊的还在后面呢,哈哈。
欢迎添加微信公众号:给产品经理讲技术
关键字:产品经理, 代码, 数据的机构, 数据
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!