1,逻辑结构:集合结构:数据元素之间没有特别的关系,仅同属形同集合;

线性结构:数据元素之间一对一的关系;树形结构:数据元素之间存在一对多的关系;图形结构:数据元素之间是多对多的关系。

2,物理结构:逻辑结构在计算机中的存储形式:顺序存储结构:将数据存储在地址连续的存储单元中;链式存储结构:将数据存储子啊任意的存储单元中,通过保存地址的方式找到相关联的数据元素。

3,数据结构就分:逻辑结构和物理结构;

4,数据结构指示静态的描述了数据元素之间的关系,高效的程序需要在数据结构的基础上设计和选择算法。

5,一个好的程序是结构+算法;

6,判断一个算法的效率时,往往只需要关注操作数量的最高次项,其他次要的和常数项可以省略。

7.算法的效率严重依赖于操作数量,在判断时首先要关注操作数量的最高次项,操作数量的估算可以作为时间复杂度的估算。在没有特殊的说明时,我们所分析的算法的时间复杂度都是指最坏的复杂度。如有必要,就通过空间复杂度来降低时间复杂度;同样,也可以通过时间复杂度来降低空间复杂度。

8,数据结构:就是计算机中表示存储的,具有一定逻辑关系和行为特征的一组数据。其中的每个数据元素称为这个结构的一个节点。,

9,抽象数据类型:可以定义为具有一定行为的抽象数学类型。它不关心类型中值的具体的表示方式,和数据类型中定义的各种操作的具体实现方法,是所有可能值的具体表示和各种操作的具体实现的抽象。实质是:抽象出数据类型的使用要求,而把它的具体的表示方式和运算的细节都隐藏起来,抽象数据类型仅仅规定了数据类型应该具有的行为操作。


线性表:

1,线性表的本质:是零个或者多少个数据元素的集合;线性表中的数据元素之间是有序的;线性表宏元素个数是有限的;线性表中的元素的类型必须是相同的。

2,线性表的定义:线性表是具有相同类型的的n(n>0)个数据元素的有限序列。

3,总结:线性表是有限,有序,同种类型数据的集合。

4, 线性结构的有:串,栈,队列,这些线性结构的特定:有且仅有一个开始节点和终端节点。之间的区别主要是操作的不同。

5,顺序表示:线性表可以采用顺序存储和链式存储。

6,在顺序表中,逻辑关系上相邻的两个节点,在物理位置上也是相邻的,节省了用于存储逻辑关系的空间,还可以达到按下标存取任一元素的效果。

7,如果顺序表溢出了,采取的补救措施:1)申请一个较大的空间,用新的数组代替原来的数组(但是花费较多的时间代价,空间代价,同时还要保证这种复制不会影响原来元素的使用。)。

数组表示线性表缺点:删除和插入要移动大量的元素,效率低;顺序表中的数组要求占用连续的存储空间,存储分配要预先按最大的空间来分配,有时难以估计最大的空间,浪费空间;

链表的表示:这种表示线性表,这种存储结构不要求逻辑关系上相邻的两个元素在物理位置上也相邻,而是通过指针来指示元素之间的逻辑关系和后继元素的位置。

2)特点:用一组可以不连续的存储单元,存储线性表的各个元素。每一个节点的指针域和元素要连续存放,但是不同的节点之间可以不进行连续存放。

3)有时为了处理方便,在单链表的第一个节点之前另加一个节点,称之为头节点。头结点字段中可以存放与整个链表相关的信息。也可以不存放任何信息;头结点的引入虽然需要另外的加一个节点的空间,但是它使得所有的链表的头指针的值不为NULL,其作用不仅仅是给单链表增加了一层指针,还对单链表中的第一个节点的处理与其他节点的处理一致起来。

4)使用链表:每次查找都要从第一个开始找,浪费时间;但是插入和删除处理就很好。


单链表和顺序表比较:

1)单链表的存储密度比顺序表的低,但是空间分布比较灵活,顺序表要按估计的最大需要分配的连续空间,

2)对于 顺序表,可随机访问任何一个元素,而在单链表中,需要顺着链表逐个进行查找,适合成批顺序地处理;

3)在单链表里进行插入,删除比较灵活,但是在顺序表里需要移动后面的元素。

存储的密度 =数据本身所占的存储量/整个数据结构所占的存储量;

单链表的改进和扩充:

单链表改进和扩充的形式:循环链表,双链表和循环双链表。

1,循环链表:

1)不让最后一个节点的指针指向null,而让它指向头一个节点;

2)在循环链表中,必须从头指针开始,访问所有的节点,

3)判断遍历是否结束,要判最后一个访问的节点和第一个节点是否相同。,

2,双链表:

1)单链表可以找后继节点,但是找前驱就比较不方便;

2)为了克服这种单向性的缺点,可以设计具有双向性的链表,简称为双链表;

3)双链表,在每个节点,有数据域,有两个指针域,一个指向其前驱节点,一个指向后继节点;

4)双链表的好处是:可以很容易的找到节点的前驱和后继。但是每个节点要增加一个指针的存储为代价。

5)循环双链表:类似单链表的,也可将双链表的头一个节点和最后一个节点链接起来,