本帖最后由 脑的研发记录 于 2023-11-5 23:03 编辑
“数据结构课作业笔记”#002-数组-简单排列的变量和它们必然命运(上)
所用编辑器版本0.25.0.4
目录总览:
零.水字数的道理(解释为什么这么写数据结构的文案,可以直接跳过)
壹.背景故事
贰.所需语法 (代码如本节图示)
叁.简单说明
肆.相关参考链接 (返回主站)
上回介绍顺序结构和逻辑结构有点抽象,解释信息是怎样的通过物质进行存储的,但是没有讲数据读取快慢究竟是怎样产生的。这里补充一下,大概就是想象自己是一个数据,自己和其他数据放在火车里,CPU相当于乘务员,站在自己身边的乘务员问找自己身边的乘客只要走一步就行,而去另外一节车厢就肯定走好几步。这个步数在代码层面看不出来。但是数组相当于车厢,车上乘客相当于数组元素。从一个元素到另一个元素的基本过程从本节开始。
零.水字数的道理(解释为什么这么写数据结构的文案,可以直接跳过)
总是好奇学习为什么困难,为什么知识长得像是教科书里的样子的,有没有一些自然而然的解释?在摸爬滚打几年中,了解到知识的历史的顺序和学习的知识顺序不一定相同。感觉知识分离了产生的背景,知识本身也会变化。比如说下面一栏概述UE5Lumen全局光照原理的视频链接,知识就好像成了人面对困难的自然而然的行动,而不仅是白纸黑字上的应该什么什么。
业界前头,产业需求本身就是知识产生的背景,学校里面系统学习,知识本身成为学习的目的。我希望营造一个简单的环境,“面向需求”学习知识,希望“用啥学啥,系统学习可以是一个自然而然的事情。”
靠学习得来的知识来决定使用数组,靠直觉习惯来决定使用数组。
知识说因为有人用数组就成功了,所以这样用数组可以,所以遇事查先例。直觉说因为默认遇到这种情况用数组,这样试着穷举着就成功了,所以遇事默认数组穷举法。学习知识根本原因应该是节约开发精力,新的尝试多少还得走一步看一步,探索新的赛道,面向穷举,消耗大量精力。
从直觉与穷举开始,重新感受数据结构,给知识一个不需要理解的面貌——这可以是自然而然产生的事情。
文案设计组成:故事背景(需求)——简单描述(产生概念)——多次重复字(概念定位明确、设置默认情况)——使用(产生经验、产生关键词)——知识组织历史(参考链接)
壹.背景故事(字)
大一老师讲数组,印象依稀中学习数组的原因是老方法使用变量变得麻烦了,每次需要存储一个数字就要声明一个变量,像存储1就要 int a = 1;再存储2,就要int b =2,无穷无尽。后来听说了“数组”,它可以一下子声明一堆变量(量大),如 int a[100], 就声明了100个变量, 而且这一堆变量都按照序号排列(有标记),就类似于学校学号:不用清楚具体变量的其他名字,仅仅是根据一个序号,就能调用一个变量。比如a[0],指的是刚才这个“数组”里的第一个变量。
因为“量大”,读取见数组,因为“标记”,分类学编号。
因为“量大”,万事用数组,因为“标记”,优化改编号。
因为“量大”,初学靠数组,因为“标记”,操作皆编号。
因为“量大”,按部就班难,因为“标记”,各得其所终。
因“量大”而生,随“标记”而息。
一数一编号,一事一数组。
贰.所需语法 ()
TypeScript Array(数组) | 菜鸟教程 (runoob.com)
链接不看也行。总之复制下面代码改改数字试试,绿色代码不用管,看看输出日志就行
@Core.Class
export default class list_array extends Core.Script {
/** 当脚本被实例后,会在第一帧更新前调用此函数 */
protected onStart(): void {
var i;
var al: number[] = [1, 2, 3, 4, 5];
// var bl: number[] = [106,202,303,404,505];
for (i = 0; i < 5; i++) {
console.log(al[i]);
// console.log(i);
}
}
从1到5一堆数码,按小到大排好,放进花括号{}里,第一个数字“1”,存在a[0],里面。这就是数组下标为“0”的变量存的数字。
以上代码中,i每变化一个,其中a变成的a[0], a[1],a[2],a[3],a[4],都是变量,不过可以通过i++,快速从一个变量跳转到另一个变量里面。这就是“标记”的作用:快速。
量大,为了区分变量,数组内变量靠标记进行跳转。
快速存储5个数字的需求就满足了。
更多可能是要存5天获得的硬币数,第一天获得1枚,第二条获得2枚,第三天获得3枚,第四天获得4枚,第五天获得5枚。
再比如说,我想知道第三天获取的硬币数目,也就是a[2]里面存档到数据。
a[0]是第一天,a[1]是第二天,a[2]是第三天。
就需要这样的代码
@Core.Class
export default class list_array extends Core.Script {
/** 当脚本被实例后,会在第一帧更新前调用此函数 */
protected onStart(): void {
var i;
var al: number[] = [1, 2, 3, 4, 5];
// var bl: number[] = [106,202,303,404,505];
for (i = 0; i < 5; i++) {
console.log(al[i]);
// console.log(i);
}
console.log(al[2]);
//这是新添加的一行代码
}
}
然后一天可能存了不只是硬币,还可能是经验值,就复制粘贴下面的代码跑
interface amode {
a: number;
next: number;
}
// 声明一个类型,amode,这个类型里面有
// number类型的变量a,
// number类型的变量next
@Core.Class
export default class list_array extends Core.Script {
/** 当脚本被实例后,会在第一帧更新前调用此函数 */
protected onStart(): void {
var i;
// var al: number[] = [1, 2, 3, 4, 5];
// var bl: number[] = [106,202,303,404,505];
// for (i = 0; i < 5; i++) {
// console.log(al);
// console.log(i);
// }
// console.log(al[3]);
// for(i=0;i<5;i++){
// console.log(bl);
// }
// 声明一个数组,这个数组的每一项都是amode类型的
var apro: amode[] = [
// 对a赋值,对next的赋值
{ "a": 0, "next": 4 },
{ "a": 1, "next": 3 },
{ "a": 2, "next": 2 },
{ "a": 3, "next": 1 },
{ "a": 4, "next": 0 }];
var n = 0;
for (i = 0; i < 5; i++) {
console.log(apro[i].a);
// console.log("硬币数"+apro.a+"经验"+apro.next);
// n = apro.next;
}
// 输出每一个apro数组每一项amode里的next变量值
for(i=0;i<5;i++){
console.log(apro[i].next);
}
}
}
叁.简单说明
这一段原来是打算讲后进先出的数组存储用法,但是篇幅字节数太大,就讲了一半,后续补上。
肆.相关参考链接
回到主站
普通大学生“数据结构”课作业笔记#000-目录-逻辑结构与存储结构 口袋方舟论坛|面向全年龄的UGC互动内容平台与交流社区 (ark.online)
|