让内存画方为圆
计算机是处理数据的机器,而程序负责规定处理步骤和数据结构。作为处理对象的数据储存在内存和磁盘中,因此程序员必须能够灵活的使用内存和磁盘。为此,我们不仅要理解内存和磁盘的物理(硬件)结构,也要理解他们的逻辑(软件)结构。内存的物理结构十分简单,内存本质上是一种名为芯片内存的装置。内存芯片分为RAM、ROM等不同类型,但从外部来看,他们的基本原理是相同的。尽管内存的本质是内存芯片,但还是将它想象成一栋每层能够存储数据的大楼比较好,方便理解。但是内存有一个物理上的内存所不存在的概念,那就是数据类型。在编程语言中,数据类型代表要储存哪一类数据,以及该数据在内存中占了多少空间。指针是一种变量,他不仅存储数据本身的值,而是存储数据所在的内存地址,使用指针可以读写任意地址的数据。数组是将相同数据类型的多个数据连续排列在内存中的一个元素序列。其中每个数据就是数组的元素,元素通过顺序编好来进行区分,这个编号称为下标。通过下标可以读写相应的内存空间,将下标转换成实际内存地址的操作是由编译器自动完成的。使用数组可以提高编程效率,在循环中使用数字可以用很短的代码按顺序读取或写入数字元素,这些都是必知必会的内容。栈和队列都是无需指定地址和下标就可以对数组元素进行读写的结构。在需要临时保存计算中间结果或计算机外部设备的输入输出数据时,经常会以这些方式来使用内存,栈和队列的区别在于数据的出入顺序,在对内存进行读写时,栈采用的是后进先出方式,而对列采用的是先进先出方式。使用列表可以高效的像数组中添加和删除数据,使用二叉查找数可以高效查找数据中存放的数据。列表的实现方式是对于数组中的每个元素,不仅保存它的值,还要额外保存其下一个元素的下标。二叉查找数在列表列表的基础上做进一步的扩展纲向数组中添加元素时,根据其大小关系向左右两个方向分支。