ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
![](https://box.kancloud.cn/2016-04-01_56fddc4875ba1.png) # 计算机的几个重要概念 ## 计算机和现实 ## 内存和数据结构 #### 内存的组织结构 ![](https://box.kancloud.cn/2016-04-22_571a45059faa5.png) *** 如图,内存的物理结构是由数据及数据所对应的地址所组成的。不论是读内存还是写内存,我们操作的过程一定是 寻址->以特殊的方式读写 数据都是以0,1比特的方式在内存中存放,但是相同的比特串通过不同的处理得到的表示含义是不同的。 #### 数据结构 不论数据结构研究的是什么内容(链表,树,图等等)最后都可以用上面的那张图来表示,即通过地址来表示数据之间的关系。那数据结构的本质便是:研究数据在内存中的组织方式(基于其物理特点)。 我们所做的操作便是赋值和以正确的方式来组织地址,以让数据之间的关系得以表示。 ## 算法 如果从抽象的角度来看,抽象数据结构得到的上层便是算法。算法主要研究的是:基于数据结构来解决具体的问题。算法希望利用内存的物理结构来高效的组织解决问题的特定步骤,也解决复杂问题。 ## 抽象 (自己想了好久关于抽象的定义,一直不知道如何去描写,偶然在《C++沉思录》上看到关于抽象的叙述,犹如醍醐灌顶。现将其摘录在下面) 抽象是有选择的忽略。编程也依赖于一种选择,选择忽略什么和何时忽略。也就是说,编程就是通过建立抽象来忽略那些我们此刻并不重视的因素。 我最钟情的工具有一个共性,那就是抽象的概念。当我处理大问题的时候,这样的工具总是能帮助我将问题分解成独立的子问题,并能确保它们相互独立。也就是说,当我处理问题的某个部分的时候,完全不必担心其他部分。 例如,假设我正在用汇编语言写一个程序,我必须时常考虑机器的状态。我可以支配的工具是寄存器,内存,以及运行于这些寄存器、内存上的指令。要用汇编语言做成任何意见有用的事情,就必须把我的问题用这些特定的概念表达出来。 即使是汇编语言也包含了有用的抽象。首先是编写的程序在机器执行之前先被解释了。这就是汇编语言写程序和直接在机器上写程序的区别。更难以察觉的是,对于机器设计者来说,“寄存器”和“内存”的概念本身就是抽象。如果抛开抽象不同,则程序的运行就要表示成处理器内无数门电路的状态变换。如果你的想象力够丰富的话,就可以看到初此之外还有更多的抽象。 高级语言提供了更复杂的抽象。甚至用表达式去代替一连串单独的算术指令的想法,也是非常重大的。这种想法在20世纪50年代首次被提出时显得很不同凡响,以至于后来成为了FORTRAN命名的基础:Formula Translation。抽象如此有用,因此程序员不断发明新的抽象,并且运用到他们的程序中。结果几乎所有的程序都给用户提供了一套抽象。 ## 语言 * 基本元素 * 基本元素的组合能力 * 语言抽象的能力