终究要面对的数据结构与算法

       找工作面试最惧怕的就是面试官提到数据结构与算法,自己也当场败下阵来。自己也也踏下心来看了一下这方面的资料在这分享给大家,希望给读者带来些些帮助。

       数据结构确实能看出一个程序员的基础扎实程度以及发展后劲,所以面试官经常问也就不奇怪了,这门课是必修课,为了我们自己的编程水平与面试offer 一起努力吧!

     首先有哪些数据结构呢?

     线性表、栈、队列、(字符)串、数组、广义表、树、二叉树、图  ;重点关注 线性表、二叉树。

基本概念

   数据项:  具有原子性,不可以再分割(可以理解为表中一条记录的一个字段的值);

   数据元素:  数据的基本单位,有数据项组成(就类似表中的一条记录);

   数据对象:  性质相同的数据元素的集合(类似一张表中的部分或全部数据);

   请根据下面的截图来理解

                                     终究要面对的数据结构与算法_第1张图片

数据结构

数据结构=逻辑结构+存储结构+(在存储结构上的)运算/操作

首先我们搞一下逻辑结构是讲  数据元素之间的关系(与实现无关,不用考虑计算机怎样存储)

分类1、  线性和非线性结构

线性结构的四个基本特征: 特点  一对一

1、集合中必须有唯一的“第一个元素”;

2、集合中必须有唯一的“最后一个元素”;

3、除最后一个元素之外,其他元素均有唯一的“后继”;

4、除第一个元素之外,其他元素均有唯一的“前驱”;

终究要面对的数据结构与算法_第2张图片终究要面对的数据结构与算法_第3张图片

 

非线性结构特征:

一个节点可能对应多个前驱和多个直接后继    一对多或多对多

终究要面对的数据结构与算法_第4张图片终究要面对的数据结构与算法_第5张图片

分类2:集合结构、线性结构、树状结构、网状结构

其实相当于将非线性结构更细分了 ,请结合图理解下吧。

数据结构不对集合做研究,关系性比较弱。

集合特性:确定性、唯一性、无序性   ,嘻嘻让我想起了 HashSet

                                   终究要面对的数据结构与算法_第6张图片

 

然后我们去了解下存储结构,它是数据逻辑结构在计算机中的表示了。

 

顺序存储结构:   (java中的数组)

优点:节省存储空间,因为分配给数据的存储单元全用存放借点的数据,节点之间的逻辑没有占用额外的存储空间。采用这种方法呢,可以实现对节点的随机存取,及每个节点对应一个序号(就是类似数组的下角标),由该序号可以直接计算出来节点的存储地址了。说白了就是查询快

             终究要面对的数据结构与算法_第7张图片

缺点: 不知道大家去火车票的时候有没有遇到过插队取票的孩子,一看图就懂了,有木有感觉出增加删除的困难;

 

                                        终究要面对的数据结构与算法_第8张图片

 

链式数据存储结构:  增删快

特点:

1、比顺序存储结构的存储密度小(每个节点都由数据域和指针域组成,所以相同空间内假设全部存满的话,顺序比链式存储更多);

2、逻辑上相邻的节点物理上不必相同;

3、插入删除灵活(不必移动节点,只需改变节点的指针);

4、查找节点时链式要比顺序存储慢;

                           终究要面对的数据结构与算法_第9张图片

 

 

索引存储数据结构:  数据库中必不可少的内容

除建立存储节点信息外,还建立附加的索引表示来标识节点的地址。

比如去图书馆找图书 根据索引很快就找到对应想要的书籍、使用字典通过目录来快速查找等

 

               终究要面对的数据结构与算法_第10张图片

 

散列存储结构

根据节点的关键字直接计算出该节点的存储地址

特神奇的结构  ,添加查询速度都快   类似数组中按照索引查找元素一样;

 

                                       终究要面对的数据结构与算法_第11张图片

 

  同一逻辑结构可以对应多种存储结构。

  同样的运算,在不同的存储结构中,其实现存储过程是不同的。

 

最后送上一张图作为最终的总结   今天先到这里    Bey~

              终究要面对的数据结构与算法_第12张图片

 

 

 

 

你可能感兴趣的:(终究要面对的数据结构与算法)