结构体就是系统提供给程序员制作新的数据类型的一种机制,即可以用系统已经有的不同的基本数据 类型或用户定义的结构型,组合成用户需要的复杂数据类型。
链表结点的结构型定义
typedef struct Node
{
int data;
struct Node *next;
}Node;
组成此结构体的成员中有一个是指向和自己类型相同的变量的指针,内部必须要用自己来定义这个指针; 凡是结构型内部有这样的指针型,则在定义 Node 的 typedef struct 语句后都要加上 Node这个结构型的名字。
二叉树结点的定义
tepedef struct BTNode
{
int data;
struct BTNode *lchild;
struct BTNode *rchild;
}BTNode;
新结点的制作
BTNode *BT;
BT=(BTNode*)malloc(sizeof(BTNode));
先定义一个结点的指针BT,然后用函数malloc()来申请一个结点的内存空间,最后让指针BT指向这片内存空间,这样就完成了一个结点的制作。
用结构体变量直接去分量,其操作用".";用指向结构体变量的指针来取分量,其操作用"->"。
算法时间复杂度分析
将算法中基本操作的执行次数作为算法时间复杂度的度量。因此对一个算法进行时间复杂度分析的要点,就是明确 算法中哪些操作是基本操作,然后 计算出基本操作重复执行的次数即可。
基本概念
- 数据:是客观事物的符号表示,在计算机科学中是指所有能输入到计算机中 并且被计算机程序处理的符号的总称。
- 数据元素: 数据元素是数据的基本单位,在计算机程序中通常将其作为一个整体进行考虑和处理。有时,一个数据元素可由若干个数据项组成。
- 数据项:是数据结构中讨论的最小单元,是数据记录中最基本的、不可分的数据单元。
- 数据对象:是性质相同的数据 元素的集合,是数据的一个子集。
- 数据结构:是指相互之间存在一种或 多种特定关系的数据元素的集合。包括三个方面的内容:逻辑结构、存储结构和对数据的运算。
- 数据的逻辑结构:是对数据之间关系的描述,与数据的存储结构无关,同一种逻辑结构可以有多种存储结构。
线性结构:是一个数据元素的有序(次序)集合。基本特征是: 集合中比存在唯一的一个“第一个元素”;集合中比存在唯一的一个“最后一个元素”;除最后一个元素之外,其他数据元素均有唯一的“后继”;除第一个元素之外,其他数据元素均有唯一的“前驱”。
数据结构中,线性结构是指数据元素之间存在着“一对一”的 线性关系的数据结构。
非线性结构:其中的结点存在一对多的关系,可细分为树形结构和图形结构。
7.数据的物理结构
数据的物理结构又称存储结构,是数据的逻辑结构在计算机中的表示(又称映射)。它包括数据元素的表示和关系的表示。当数据元素是有若干数据项构成的时候,数据项的表示称为数据域。
数据元素之间的关系在计算机中有两种不同的表示方法:顺序映射和非顺序映射。对应两种不同的存储结构分别是顺序存储结构和链式存储结构。顺序映射时借助 数据元素在存储器中的相对位置来表示数据元素之间的逻辑关系;非顺序映射时借助指针表示数据元素之间的逻辑关系。
在数据结构中有以下4中常用的存储方式。
- 顺序存储:把逻辑上相邻的结点存储在物理位置上响铃的存储单元中,结点之间的逻辑关系由存储单元的邻接关系来体现。
- 练市存储:不要求逻辑上相邻的结点在物理位置上也相邻,结点间的逻辑关系是由附加的指针字段表示的。
- 索引存储:在存储结点信息时除建立存储结点信息外,还建立附加的索引表来表示结点的地址。
- 散列存储:根据结点的关键字通过散列函数直接计算出该结点的存储地址。这种方法本质上是顺序存储方法的扩展。
算法:可以理解为由基本运算及规定的运算顺序缩构成的完整的阶梯步骤,或者看成按照要求设计好的有限的确切的计算序列。
算法的特性:
- 有穷性:必须保证执行 有限歩之后结束。
- 确定性:算法的每一步骤必须有确定的定义。
- 输入:一个算法有零个或多个输入。
- 输出:一个算法有一个或多个输出。
- 可行性:算法中的所有操作都必须可以通过已经 实现的基本操作进行运算,并在有限次内实现,而且人们用笔和纸做有限次运算后也可以完成。
算法的设计目标:包括正确性、可读性、健壮性和算法效率,其中算法效率通过算法的时间复杂度和空间复杂度来描述。