关于“程序=数据结构+算法”的深层认识
最近在学习C语言编写的单片机程序,想到了以前上学的时候的一句名言“程序=数据结构+算法”,我现在对这句话有了一些自己的想法,记录下来希望对大家有所帮助,如果大家有不同意见,希望指出来,反驳我。
首先,程序=数据结构+算法,这个是静态过程,也就是从程序烧写到CPU上电这个阶段。(CPU未工作,数据未得到读写操作,函数未得到运行和产生返回值)
(1)数据结构
首先数据结构是一种概念,用于描述某一种物体的特性。它是一种类似于概念或者思想的东西。我可能说的不清楚,我在这里想表达的是数据结构是一种人类对实物特性的描述,可以用自然语言描述出来,大家理解他为一种概念,一种名词,一种形而上学的东西即可。
“数据类型是数据结构的计算机编程语言的具体实现方式”,例如数据结构是一种关于链表的概念,数据类型就是用C语言定义一个结构体类型实现这个数据结构。
struct Node /*这个结构体就是数据类型,是数据结构的实现方式*/
{
int data;
struct Node *pNext;
};
“数据变量是数据类型的实例化”,数据变量是占用内存的,是数据类型的实例化。
举个例子:数据结构相当于一个“图纸或者蓝图”,数据类型相当于根据“图纸或者蓝图”做的磨具,数据变量相当于根据数据类型这个“模具”完成的多个变量。也就是图纸和模具只有一个,但是产品有好多个。数据结构和数据类型都是只有一个,但是数据变量可以有好多个,数据变量的类型一直,但是占用内存不同。
(2)算法
首先,算法等同于方法,也就是解决某一个具体问题的相关步骤的集合,可以使用人类自然语言进行描述或记录。算法是一种抽象的概念。它主要针对如果解决某一个问题,而不在乎用什么具体语言实现。
函数是根据算法的内容使用计算机编程语言所写的代码,注意函数是占用外存空间的,是已近实现了的指令集,需要烧写到计算机的外存设备中。
总计:程序=数据结构+算法,更侧重用人类的自然语言实现。(专业:计算机科学,科学家,学者,他们甚至可以不懂计算机语言,例如C语言)。
程序=数据变量+函数,更倾向于用计算机语言实现(专业:计算机工程,打工人,劳动者,想不到那些具体方法,但是可以使用计算机语言实现它)。
(3)程序运行时的表现。到现在已经有了数据变量,也有函数,这就是编写好的程序了。通过编译器或者交叉编译工具链形成一个可执行的bin文件或者hex文件。然后通过烧写工具烧写到单片机的外存中,等待CPU上电。
当烧写程序和上电完成后,CPU就开始执行程序了,执行过程就表现为数据变量不断的被读写,以及函数不断的被传递参数并产生返回值。这就是程序运行时的表现。
从宏观上看就是,程序不断在跑,各个功能在不断运行。