大家一起来看:
1.1算法的基本概念
1.算法的基本特征:可行性、确定性、有穷性、拥有足够的情报。
2.算法的基本要素:
(1)算法中对数据的运算和操作,包括:算术、逻辑、关系运算以及数据传输。
(2)算法的控制结构,一般都可由顺序、选择、循坏(重复)三种控制结构组合而成。
3.算法的设计基方法:列举法、归纳法、递推、递归、减半递推、回溯法。
4.算法的时间复杂度:是指算法所需要的计算工作量,由基本运算次数来度量。
5算法的空间复杂度:指执行算法所需要的内存空间。包括,算法程序所占空间、输入初始数据所占的存储空间、算法执行过程中所需要的额外空间。
1.2数据结构的基本概念
1.数据结构主要研究以下三个方面:
(1)逻辑结构:数据集合中各数据元素之间所固有的逻辑关系。
(2)存储结构:在对数据进行处理时,各数据元素在计算机中的存储关系。
(3)对各种数据结构进行的运算。
2.数据处理:指对数据集合中各元素以各种方式进行运算,包括插入、删除、查找、更改、以及对数据元素进行分析。
3.数据结构:是指带有结构的数据元素的集合,它包含以下两方面信息:
(1)表示数据元素的信息;
(2)表示各数据元素之间的前后件关系。
4.数据逻辑结构:B=(D,R)
B:数据结构
D:数据元素集合
R:各数据元素之间的前后件关系
5.数据存储结构:数据的逻辑结构在计算机存储空间中的存放形式,也叫物理结构。
常用的存储结构有顺序、链接、索引。
6.线性结构:若非空数据结构满足:
(1)有且只有一个根结点;
(2)每一个结点最多有一个前件,也最多有一个后件。则称线性结构,也叫线性表。
1.3线性表及其顺序存储结构
1.线性表是由一组元素组成,可是以是矩阵。
2.线性表的顺序存储结构有两个基本特点:
(1)线性表中所有元素所占的存储空间是连续的;
(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。
3.线性表中第i个元素在计算机存储空间中的存储地址为:ADR(ai)=ADR(a1)+(i-1)k
4.在程序设计语言中,通常定义一个一维数组来表示线性表的顺序存储空间。
5.对线性表的各种处理:插入、删除、查找、排序、分解、合并、复制、逆转等。
6.插入:从最后一个元素开始向后移动,直到第i个元素。
7.删除:从第i+1个元素开始向后移动,直到第n个元素。
1.4栈和队列
1.栈:是限定在一端进行插入与删除的线性表,先进后出或后进先出。
2.栈顶:允许插入的一端,用top表示;栈底:允许删除的另一端,用bottom来表示。
3.用一维数组S(1:m)作为栈的顺序存储空间,其中m为栈的最大容量。
4.Top=0表示栈空;top=m表示栈满。
5.栈的基本运算有三种:
(1)入栈运算:在栈顶位置插入一个新元素
(2)退栈运算:取出栈顶元素并赋给一个指定的变量
(3)读栈顶元素:指将栈顶元素赋给一个指定的变量
1.2队列:指允许在一端进行插入、而在另一端进行删除的线性表,先进先出或后进后出。
1.队尾:允许插入的一端,用尾指针(rear)来指向队尾元素
2.排头:允许删除的一端,用排头指针(front)指向排头元素
3.入队运算:在队尾插入一个元素,只涉及尾指针(rear)的变化
4.退队运算:在排头删除一个元素,只涉及排头指针(front)的变化
5.循环队列:将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列环状使用。
6.循环队列的初始状态为空,即rear=front=m。每进行一次入队运算,队尾指针就进一。当队尾指针rear=m+1时,则置rear=1。
第进行一次退队运算,排头指针就进一。当排头指针front=m+1时,则置front=1。
7.当队列满和空时,都有front=rear用S=0表示队列空,用S=1表示队列非空
(1)队列空的条件为S=0;
(2)队列满的条件为S=1且front=rear。
1.5线性链表的基本概念
1.链式存储方式,要求每个结点由两部分组成:
(1)用于存放数据元素值,称数据域;
(2)用于存放指针,称指针域。
2.线性链表:线性表的链式存储结构。最后一个结点指针域为空(NULL或0),表链表终止。
3.线性单链表只能找到后件结点,不能找到前件结点。
4.线性双链表:
(1)左指针,用以指向前件结点;
(2)右指针,有以指向向件结点。
5.带链的栈:采用链式存储结构的栈,称为可利用栈。
6.循环链表有以下两个特点:
(1)在循环链表中增加了一个表头结点,其数据域为任意或根据需要来设置,指针域指向线性链表的第一个元素的结点。循环链表的头指针指向表头结点。
(2)循环链表中最后一个结点的指针域不是空,而是指向表头结点。
7.在循环链表中,只要指出表中任何一个结点的位置,就可以从它出发访问到表中其他所有的结占,面线性单链表做不到这一点。
1.6树与二叉树
1.树:树是一种简单的非线性结构。
2.具有层次关系的数据都可以用树这种数据结构来描述。
3.在树结构中,每一个结点都只有一个前件,称为父结点;没有前件的结点只有一个,称为根结点,简称树的根。
4.第一个结点可以有多个后件,它们都称为该结点的子结点;没有后件的结点称为叶子结点
5.度:一个结点拥有的后件个数称该结点的度。在树中,所有结点中的最大的度称为树的度
6.深度:树的最大层次称为树的深度。
7.二叉树的性质:
(1)在二叉树的第k层上,最多有个结点。
(2)深度为m的二叉树最多有个结点。
(3)任意一棵二叉树中,度为0的结点(树子结点)总比度为2的结点多一个。
(4)具有n个结点的二叉树,其深度至少为[log2n]+1,其中[]表示取整。
完全二叉树有以下两个性质:
(5)具有n个结点的完全二叉树的深度为[log2n]+1。
(6)设完全二叉树有n结点。如果从根结点开始,按层序(每一层从左到右)用自然数字1,2,3,……,n给结点进行编号,则对于编号为k的结点有以下结论:
a.若k=1,则该结点为根结点;若k>1,则该结点的父结点的编号为int(k/2)。
b.若2k<=n,则编号为k的结点的左子结点编号为2k;否则该结点无左子结点(和右子结点)
c.若2k+1<=n,则编号为k的结点的右子结点编号为2k+1,否则该结点无右子结点。
8.二叉树通常采用链式存储结构,也由两部分组成:数据域和指针域(左指针域、右指针域)
9.二叉树的链式存储结构称为二叉链表,BT称为二叉链表的头指针。
1.6二叉树的遍历(递归过程)
1.前序遍历:
(1)访问根结点;
(2)前序遍历左子树;
(3)前序遍历右子树。
2.中序遍历:
(1)中序遍历左子树;
(2)访问根结点;
(3)中序遍历右子树。
3.后序遍历:
(1)后序遍历左子树:
(2)后序遍历右子树;
(3)访问根结点。
注:这里的前序、中序、后序是指根结点的访问次序,左子树始终比右子树先访问。
1.7查找技术
1.顺序查找:无序表、链式存储的有序表只能用顺序法查找。最多要查找n次。
2.二分查找:只适用于顺序存储的有序表。最多要查找log2n。
1.8排序技术
1.交换类排序法:
(1)冒泡排序法(下沉排序法),最多n(n-1)/2次。
(2)快速排序法
2.插入类排序法:
(1)简单插入排序法,最多n(n-1)/2次。
(2)希杀排序法,最多0()
3.选择类排序法
(1)简单选择类排序法,最多n(n-1)/2次
(2)堆排序法,最多0(nlog2n)次。