数据结构:总览
1.时间线
1.0 二战期间,冯诺依曼体系结构的问世,奠定了后世计算机体系结构;他的主要思想——用现在的理解,就是高内聚低耦合;输入设备、输出设备、CPU、内存,此四者在做好自己工作的同时,耦合到一起协同工作;一方崩溃,不影响其他方;当然要是总控制系统出问题了,那就都崩溃了;(我们现在开发的硬件和软件就是如此的思路;比如:键盘崩溃了,但是他不会影响显示屏显示画面;)
1.1 1968年克努斯教授开创了数据结构的最初体系,他所著的《计算机程序设计艺术》第一卷《基本算法》是第一本比较系统的阐述了数据的逻辑结构和存储结构及其操作的著作;70年代初,数据结构作为一门独立的课程进入大学课堂;
1.2 1972年,美国贝尔实验室的丹尼斯·里奇在 B语言 的基础上最终设计出了一种新的语言,他取了BCPL(B语言名称)的第二个字母作为这种语言的名字,这就是C语言,从此,C语言正式诞生;
1.3 70年代初,贝尔实验室的unix系统问世;
注:如果工程师真的想研究语言层面的最早的发展思想,必须要学冠古今(软硬件兼修);从硬件来推导软件;欧美的工程学博士,是在相关领域都有建树的,他们在取得了硬件硕士和软件硕士(相关领域)之后,才会读相对应的博士;我虽然是一个普通的国内本科生,对于相关的东西了解只有一丢丢;只能给出语言层面的解释,真正努力的是在座的诸位;
2.数据结构类型
我们需要学习以下几种数据结构:数组、链表、栈、队列、堆、树、散列表(哈希)、图;与其相对应的操作就是:增、删、查、改;
3.C与C++不同
2.1、C语言是面向过程编程;C++是面向对象编程;怎样解释这两个概念呢?
答:
我们使用C语言或C++对链表进行操作,链表就是我们要操作的对象;
C语言在实现数据结构上,是程序员自己编写程序实现链表这个结构;以链表插入为例,是先找到空节点,然后插入新节点;
C++的list容器就是数据结构;链表插入,只需要调用函数即可;
C语言是做了两步,先找到空节点,然后插入新节点,一次做一步是面向过程;C++只调用了一次函数,就完成了插入,一次做完是面向对象;
2.2、程序员可能问?但是语言层面上最底层的原理,就是先找到,再插入啊?
答:对,说的不错;但是面向对象的三大特性是:封装、继承、多态;第一个特性是封装:就是隐去过程;直面结果;我不管里面是怎样操作的,我只要结果;所以C++称为面向对象编程;
由第一大特性:表示了C++比C语言更安全(代码的安全性和信息的隐藏性更高了;程序员只能用接口进行操作,大大减少了数据的安全姓,因为程序员不是想改就改,无脑更改);
4.解释
我们从发展史,聊到C语言和C++的不同,仿佛有些拖稿;不是如此,因为C++的容器和容器适配器体系结构是建立在数据结构上的;可以理解为,C++是建立在面向过程(c语言)和数据结构上的(C++名字由来,只是个人理解,不一定对);