算法解读:s变量和数组
算法是解决问题并获得结果的过程。在这个处理过程中,问题以数据的形式输入,结果同样以数据的形式输出,在算法的处理过程中,也需要各种临时的数据。
数据是什么?
数据是多种不同信息的表现。
以料理中的食谱为例,下面的材料即为算法——食谱的数据:
猪肉120g, 洋葱1/2个, 胡萝卜1/2个, 土豆2个, 糖一大勺, 料酒2大勺……
计算机程序中的算法也是如此,为了解决问题需要使用各种数据:
1. 求最大公约数的算法:
a. 求最大公约数的两个整数
b. 求出的最大公约数(整数)
2. 一组数据的排序算法:
a. 要排序的一组数据
b. 数据的个数
c. 排好序的一组结果数据
在一个算法的思考过程中,我们需要很多信息,所有这些信息都是数据,都会协助问题解决的流程。因此,所有的算法是”处理“和”数据“的相互结合。
数据类型的理解
数据代表各种信息,被视为信息的数据有很多类型,根据不同种类分为不同的组,如食谱数据的分组:
配料:猪肉、牛肉、洋葱、白菜
调味品:酱油、料酒、糖、盐
量:100g, 200ml, 1勺
时间:时、分、秒
火候:大火、中火、小火
计算机编程的算法中需要处理的数据也分为不同的组,这样的分组就称为数据类型:
整数型:0, 1, 100, -100
浮点型:1.1, 3.1415926, - 2.98
字符型:A, B, x, 我, 你
字符串型:ABC, CHINA, 算法
布尔型:true, false
值的理解
数据是各种信息的表现形式,而数据的具体表现就是值。
在烹饪的食谱中, 猪肉、酱油、胡椒等是在做料理时使用的配料和调味料,也可以说是表示”物“的”值“。而100g, 1小勺,200ml等式表示分量,时间等”数“的”值“。
在算法中,我们用数值、文字等描述”值“, 如整数型或浮点型的值:0, 1, 1.1, 3.14。字符型和字符串的值,一般用单引号或双引号括起字符或字符串:'A', 'B', "CHINA".
括起来表示是为了与一般的数值区别开,比如: 10 和 "10",这两个分别是整数型值和字符串的值。
变量的理解
在算法中,当我们对一些数据进行操作时,需要保存这些数据的空间,这些空间称为”变量“。比如,我们做文件整理的时候,需要把所有文件分类到不同的盒子里进行管理,在这里,文件就是数据,存放文件的盒子就是所谓的变量。也就是说,变量起到了盒子的作用,我们可以移动各种数据并存入盒子里。
在这里需要注意一点,在整理文件时,我们可以把多个种类的文件放入一个盒子里,但变量,一般情况下,只能存入一种类型的数据。同时,在已经存入数据的变量中输入另一个值时,原先存入的数据将消失。比如声明一个变量: int i; 此时,盒子已经搬出来了,但盒子里没有任何数据,接着我们设定: i = 2; 于是数据2被存入了盒子 i 里,我们可以继续设定 i 的值: i = 3; 此时,3存入了盒子里,而数据2已经消失了。
值得一提的是,在我们声明一个变量 int i;这个步骤中,i 的状态是不放入任何数据。
变量的区分
算法中,我们经常使用多个变量,为了区分不同的变量并方便认识变量的用途,我们需要使用变量名来为装数据的箱子取名。
变量名要唯一。
赋值语句
变量的值的代入是通过变量指定的赋值语句完成的,赋值语句的右边也可以是使用运算符号的公式,如:i = 10; j = 3 + 5;
赋值语句右边可能是个变量名,此时的变量名代表存储在此变量中的值,如 j = i + 5; 这里的变量名 i 表示存储在变量 i 中的值,如果 i = 3,那么j = i + 5就相当于 j = 3 + 5;
数组
算法中,数组用来保存大量数据。例如:存储全校学生的测试结果(分数), 或者所有注册会员的名字等。
数组的原则:同一数组中的所有数据必须是同类型的值。
数组的理解:它是把很多变量线性排列的结果,即,数组是变量的箱子"无缝隙"地排列在一条直线上。
与变量有变量名作为标记一样,数组也有数组名,数组名是指定某一个目标数组而给定的唯一名称。
构成数组的”箱子“的个数称为数组元素数,可以用编号进行管理,且编号默认从0开始。
二维数组
数组中存储大量的关联数据。其中,在一条直线上排列的,像储物柜的数组称为一维数组,另外,也有把变量像纵向和横向无缝隙排列的矩形数组,它称为二维数组。甚至还有向水平、垂直、深度三个方向无缝隙排列的立方体数组,称为三维数组……
二维数组被广泛地使用在行和列的大量数据的管理中,如:围棋游戏中黑白子的管理
如果每一层的房间数排列一样,那么,由N层组成的宾馆房间构造也可以认为是二维数组。
总之,二维数组必须是由变量的”箱子“无缝隙地排列成长方形的结果:
字符串
在算法中,字符和字符串的处理是比较特殊的。
对于字符,计算机内部是通过数字(或字符编码)表示的。例如:字符'A'为65, 字符 'B' 为66...
字符串是上述字符编码对应的字符连续的表现,因此,字符串是字符无缝隙线性排列的信息,或者可以定义为:字符串是每个元素存储字符的字符型数组,例如:字符串"ABC",可以看成是存储字符'A', 'B', 'C'的数组。
算法解读:s变量和数组的更多相关文章
- 算法求解中的变量、数组与数据结构(STL 中的容器)
本质上算法都是对数据的操作,没有数据,没有存储数据的容器和组织方式,算法就是无源之水无本之木,就是巧妇也难为无米之炊.算法是演员,变量.数组.容器等就是舞台, 然后整个算法的处理流程,都是针对这些数据 ...
- php变量与数组相互转换的方法(extract与compact
#php变量与数组相互转换的方法(extract与compact) #compact 多个变量转数组 $name = 'sui'; $email = 'sui@qq.com'; $arr = comp ...
- 如何判断一个变量是数组Array类型
在很多时候,我们都需要对一个变量进行数组类型的判断.JavaScript中如何判断一个变量是数组Array类型呢?我最近研究了一下,并分享给大家,希望能对大家有所帮助. JavaScript中检测对象 ...
- java 数组变量与数组对象
数组是否必须初始化 对于这个问题,关键在于要弄清楚数组变量和数组对象的差别.数组变量是存放在栈内存中的,数组对象是存放在堆内存中的.数组变量只是一个引用变量,他能够指向实际的数组对象. 所谓的数组初始 ...
- JavaScript用typeof判断变量是数组还是对象,都返回object
在JavaScript中所有数据类型严格意义上都是对象,但实际使用中我们还是有类型之分,如果要判断一个变量是数组还是对象使用typeof搞不定,因为它全都返回object. 使用typeof加leng ...
- C++ 用变量定义数组
较早的编译器是不同意这样做的,所以一些书籍比方以Tc解说的书本都说数组的下标不能是变量.在vc6.0下亦是如此. 只是在一些较新的编译器如dev c++已经支持了,例如以下代码不会报错 #includ ...
- js判断一个变量是数组还是对象
判断变量是数组还是对象,使用Object.prototype.toString.call(),兼容性好,切勿使用typeof来判断对象或者数组,因为typeof得到的都是object: functio ...
- C++中变量做数组长度
在Java中,这是完全可以的,比如我们运行如下程序: package cn.darrenchan.storm; import java.util.Arrays; public class Test { ...
- Perl 引用:引用就是指针,Perl 引用是一个标量类型可以指向变量、数组、哈希表(也叫关联数组)甚至子程序。
Perl 引用引用就是指针,Perl 引用是一个标量类型可以指向变量.数组.哈希表(也叫关联数组)甚至子程序,可以应用在程序的任何地方. 1.创建引用1.使用斜线\定义变量的时候,在变量名前面加个\, ...
- Perl 变量:标量变量、数组变量、哈希变量和变量上下文
一.Perl 变量变量是存储在内存中的数据,创建一个变量即会在内存上开辟一个空间.解释器会根据变量的类型来决定其在内存中的存储空间,因此你可以为变量分配不同的数据类型,如整型.浮点型.字符串等.上一章 ...
随机推荐
- IPv6正则表达式
斯蒂芬·瑞恩写了一个非常有用的正则表达式,可用于匹配任何一个合法的IPv6地址.以下为正则表达式的代码: ^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|: ...
- tomcat7需要进行升级,因为有漏洞,而且安装包没有做过优化处理
http://www.open-open.com/lib/view/open1401931407228.html http://www.cnblogs.com/ggjucheng/archive/20 ...
- ReactiveCocoa与Functional Reactive Programming
转自 http://blog.leezhong.com/ios/2013/06/19/frp-reactivecocoa.html Functional Reactive Programming(以下 ...
- Aspose转PDF时乱码问题的解决
主要原因是服务器上一般安装的字体都是有限的,而我们日常生活工作中总是喜欢用一些比较特别的字体,比如宋体GB2312,这时候如果用Aspose转PDF就会出现乱码,解决方法也比较简单,把本地的特殊字体拷 ...
- Android 结合实例学会AsyncTask的用法
AsyncTask执行时经过四个步骤,执行四个方法: 1.onPreExecute(),运行在UI线程,可以设置或修改UI控件,如显示一个进度条 2.doInBackground,运行在后台线程,不可 ...
- Openvswitch原理与代码分析(3): openvswitch内核模块的加载
上一节我们讲了ovs-vswitchd,其中虚拟网桥初始化的时候,对调用内核模块来添加虚拟网卡. 我们从openvswitch内核模块的加载过程,来看这个过程. 在datapath/dat ...
- MySQL数据库从GBK转换到UTF-8最简单解决方案(也适用于其它编码转换)
1.使用mysqldump导出表结构,如: mysqldump -d -u root -p 数据库名 >/root/struct.sql 2.使用mysqldump以特定编码导出数据(其中utf ...
- 百度地图API 关键字模糊搜索
http://api.map.baidu.com/place/v2/search?q=广场®ion=汕头&output=json&ak=5E56A48675a5cd09a ...
- Scala spark mongodb
最好的参考是Mongo官网的地址 https://docs.mongodb.com/spark-connector/getting-started/ 需要截图所示的包 代码地址 https://git ...
- SQLServer 获得所有表结构(包括表名及字段)
then d.name else null end) 表名, a.colorder 字段序号,a.name 字段名, ( then '√'else '' end) 标识, (case when (SE ...