算法精解:C语言描述

(美)Kyle Loudon, 算法精解:C语言描述

将一个实际问题同我们学到的算法和数据结构相结合起来,这正是软件开发中的一项重要技能——抽象建模能力
 loc. 222-223

使用数据结构的三个原因是:效率、抽象和重用性
 美)Kyle Loudon, 算法精解:C语言描述 (, loc. 379-380

换句话说,子问题之间可能有关联。这
 美)Kyle Loudon, 算法精解:C语言描述 (, loc. 437-438

事实上,智能的解决方案通常都是最简单的。另外,最简单的解决方案常常也是最难找到的。
 美)Kyle Loudon, 算法精解:C语言描述 (, loc. 479-480

而为数据分配存储空间有两种方法:一种是直接声明一个变量;另一种是在运行时动态地分配存储空间(例如:使用malloc或realloc)。
 美)Kyle Loudon, 算法精解:C语言描述 (, loc. 539-540

自动变量是一种在进入或离开一个模块或函数时其存储空间能够自动分配和释放的变量。
 美)Kyle Loudon, 算法精解:C语言描述 (, loc. 542-543

内存泄漏问题的产生是由于动态分配了内存空间,但从未释放它(甚至在程序不再使用此数据空间时都不释放它)造成的
 美)Kyle Loudon, 算法精解:C语言描述 (, loc. 555-556

C语言支持两种数据集合:结构和数组。(虽然联合与结构类似,但一般它单独被归为一类。)
 美)Kyle Loudon, 算法精解:C语言描述 (, loc. 568-568

用这些连接起来的结构,我们可以对它们加以组织并用来解决实际的问题。
 美)Kyle Loudon, 算法精解:C语言描述 (, loc. 571-572

指出了关于结构指针的另一个重要方面:结构不允许包含自身的实例,但可以包含指向自身实例的指针。
 美)Kyle Loudon, 算法精解:C语言描述 (, loc. 576-577

但是同时要知道在C语言中,多维数组其实是以行主序的方式存储的,这也就说明多维数组右边下标变化速度要比由左边下标变化来得更快。
 美)Kyle Loudon, 算法精解:C语言描述 (, loc. 598-599

void指针在用来实现数据结构时是非常有用的,因为可以通过void指针存储和检索任何类型的数据。
 美)Kyle Loudon, 算法精解:C语言描述 (, loc. 657-658

这是由于泛型指针不会告诉编译器它指向的是何种类型数据,因此编译器既不知道多少个字节要被访问,也不知道应该如何解析字节。
 美)Kyle Loudon, 算法精解:C语言描述 (, loc. 681-682

我们对内存中的数据对齐方式必须特别注意。
 美)Kyle Loudon, 算法精解:C语言描述 (, loc. 684-684

Notes: 1) zheshishenm 2) 这是什么来着

函数指针将函数当做普通数据那样存储和管理。
 美)Kyle Loudon, 算法精解:C语言描述 (, loc. 689-689

以上函数声明的意思是,我们指定了一个函数指针,它接受两个void指针,返回一个整数,命名为match。
 美)Kyle Loudon, 算法精解:C语言描述 (, loc. 693-694

用指针把函数另存为数据结构的一部分是C语言一种非常好的特性,因为它可以使数据结构或函数变得更具通用性。
 美)Kyle Loudon, 算法精解:C语言描述 (, loc. 703-704

C程序在内存中的组织方式。
 美)Kyle Loudon, 算法精解:C语言描述 (, loc. 769-769

输入参数是传递到活跃记录中的参数;输出参数是传递给在活跃记录中调用的函数所使用的。一
 美)Kyle Loudon, 算法精解:C语言描述 (, loc. 777-778

栈是用来存储函数调用信息的绝好方案,这正是由于其后进先出的特点(见第6章)精确满足了函数调用和返回的顺序。
 美)Kyle Loudon, 算法精解:C语言描述 (, loc. 790-791

因为递归调用的返回值在一个表达式中使用
 美)Kyle Loudon, 算法精解:C语言描述 (, loc. 850-850

尾递归消除
 美)Kyle Loudon, 算法精解:C语言描述 (, loc. 858-858

我们通常关注的是它的复杂度,复杂度与它处理数据量所需要的资源(通常是时间)的增长速率密切相关。O表示法能够描述一个算法的复杂度。
 美)Kyle Loudon, 算法精解:C语言描述 (, loc. 950-952

当观察一个算法的整体构造时,只需要做两步:首先,必须知道算法的哪个部分是由非常量的数据决定的;然后,用函数列出每个部分的性能
 美)Kyle Loudon, 算法精解:C语言描述 (, loc. 963-965

如果不设定一个近似值就无法找到一个“有效的”解决方法。这是一类特殊的问题,称为NP完全问题(NP-complete problem,见本章结尾的相关主题)。
 美)Kyle Loudon, 算法精解:C语言描述 (, loc. 981-982

类似O表示法描述的是在一定的条件约束下函数的上限值,θ表示法用来描述函数的区间值。Ω表示法描述的是在一定的条件约束下函数的下限值。O表示法和W表示法类似于O表示法和Ω表示法,只是更精确。在一般情况下经常会用到O表示法,而其他算法则经常用到特殊的场合。
 美)Kyle Loudon, 算法精解:C语言描述 (, loc. 1036-1039

由于这些元素是动态分配的(在C语言中调用malloc),因此很重要的一点是,切记这些元素通常实际上都是分散在内存空间中的(见图5-2)。
 美)Kyle Loudon, 算法精解:C语言描述 (, loc. 1085-1087