1.结构型
用户本身制做的数据类型c++
typedef struct{ int a; char b; float c; } TypeA;
2.指针型
若是a是个指针型变量,且指向变量b,则a中存放了变量b所在的地址。*a就是取变量b的内容(x=*a;
等价于x=b;
),&b就是取变量b的地址,语句a=&b;就是将变量b的地址存于a中,即指针a指向b。算法
指针与结构体结合segmentfault
包含数据域(存数据)、指针域(存放下一结点的地址)数组
链表的结构型定义以下:数据结构
typedef struct Node { int data; //这里默认的是int型,如需其余类型可直接修改。 structNode*next; //指向Node型变量的指针 } Node;
注意:凡是结构型(假设名为a)内部有这样的指针型(假设名为b),即b是用来存放和a类型相同的结构体变量地址的指针型(如图1.2中,结点A的指针next,next所指的结点B与结点A是属于同一结构型的),则在定义a的typedef struct语句以后都要加上a这个结构型的名字。与以前定义的结构型TypeA进行比较,会发现这里的结构型Node在定义方法上的不一样。函数
在链表结点结构型的基础上,再加上一个指向本身同一类型变量的指针域即为二叉树结点结构型:spa
typedef struct BTNode { intdata; structBTNode *lchild; structBTNode *rchild; } BTNode;
制做新结点的方法,以二叉树结点的制做为例,有如下两种写法:
方法一:设计
BTNode BT;
方法二(经常使用):指针
BTNode *BT; BT = (BTNode*)malloc(sizeof(BTNode));
方法二句中的BT是个指针型变量,用它来存储刚制做好的结点的地址。因BT是变量,虽然如今BT指向了刚生成的结点,可是在之后必要的时候BT能够离开这个结点转而指向其余结点。而方法一句则不行,方法一中的BT就是某个结点的名字,一旦定义好,它就不能脱离这个结点。从这里就看到方法二比方法一更灵活,所以方法二用的多,而且方法二彻底能够取代方法一(方法二中BT的值不改变的话就至关于方法一)。code
拓展:取BT指针的值:
(*BT).data;
或BT->data
将算法中基本操做的执行次数做为算法的时间复杂度。时间复杂度不是执行完一段程序的总时间,而是其中基本操做的总次数。
计算一个算法时间复杂度的步骤以下:
1.肯定算法中的基本操做,以及问题的规模。
2.根据基本操做执行状况计算出规模n的函数f(n),并肯定时间复杂度为T(n)=O(f(n)中增加最快的项/此项的系数)。
经常使用的各类时间复杂度大小的比较关系以下:
$$O(1) ≤ O({log_{2}}^{n}) ≤ O(n) ≤ O(n{log_{2}}^{n}) ≤ O(n^{2}) ≤ O(n^{3}) ≤ …… ≤ O(n^{k}) ≤ O(2^{n})$$
算法的空间复杂度指算法在运行时所需存储空间的度量,主要考虑在算法运行过程当中临时占用的存储空间的大小(和时间复杂度同样,以数量级的形式给出)。
数据元素是数据的基本单位,在计算机程序中一般将其做为一个总体进行考虑和处理。
数据项是数据结构中讨论的最小单位,是数据记录中最基本的,不可分的数据单位。
数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。数据结构包括3方面的内容:逻辑结构,存储结构和对数据的运算
数据的逻辑结构是对数据之间关系的描述,它与数据的存储结构无关,同一种逻辑结构能够有多种存储结构。概括起来数据的逻辑结构主要有两大类。
1.线性结构 简单地说,线性结构是一个数据元素的有序(次序)集合。它有四个基本特征:
数据据结构中线性结构指的是数据元素之间存在着“一对一”的线性关系的数据结构。如(a1,a2,a3,.....,an),a1为第一个元素,an为最后一个元素,此集合即为一个线性结构的集合。
2.非线性结构 与线性结构不一样,非线性结构中的结点存在着一对多的关系,它又能够细分为树形结构和图形结构。
数据的物理结构又称为存储结构,是数据的逻辑结构在计算机中的表示(又称映像)。它包括数据元素的表示和关系的表示。当数据元素是由若干数据项构成的时候,数据项的表示称为数据域;好比一个链表结点,结点包含值域和指针域,这里结点能够看作一个数据元素,其中的值域和指针域都是这个数据元素的数据域。
数据元素之间的关系在计算机中有两种不一样的表示方法:顺序映像和非顺序映像。对应的两种不一样的存储结构分别是顺序存储结构和链式存储结构。顺序映像是借助数据元素在存储器中的相对位置来表示数据元素之间的逻辑关系;非顺序映像是借助指针表示数据元素之间的逻辑关系。
实际上,在数据结构中有如下4种经常使用的存储方法。
1.顺序存储方法 顺序存储结构是存储结构类型中的一种,该结构是把逻辑上相邻的结点存储在物理位置上相邻的存储单元中,结点之间的逻辑关系由存储单元的邻接关系来体现。由此获得的存储结构为顺序存储结构,一般顺序存储结构式借助于计算机程序设计语言(例如C/C++)的数组来描述的。
2.链式存储方法 该方法不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系是由附加的指针字段表示的。由此获得的存储表示称为链式存储结构,一般借助于计算机程序设计语言(例如C/C++)的指针类型来描述它。
3.索引存储方法 该方法在存储结点信息时除创建存储结点信息外,还创建附加的索引表来标识结点的地址。索引项的通常形式通常是<关键字,地址>。关键字标识惟一一个结点:地址做为指向结点的指针。
4.散列(或哈希)存储方法 该方法的基本思想是根据结点的关键字经过哈希函数直接计算出该结点的存储地址。这种存储方法本质上是顺序存储方法的扩展。