数据结构与数据运算(本部分主要以选择题为主,约占5分)
线性结构
1、顺序存储:优点:可以随机存取表中元素。缺点:插入与删除需要移动元素。
2、链式存储:优点:插入与删除不需要移动元素。缺点:不能对数据元素进行随机访问。
3、栈:“先进后出”的线性表。(一般常考双向栈,如图)
4、队列:一种“先进先出”的线性表。(一般常考循环队列、双端队列)
4.1、循环队列:判空:rear=front 判满:front=(rear+1)%MaxSize 循环队列约定以“队尾指针所指的下一个位置时对头指针”来表示“队列满”的情况。
4.2、双端队列:要求元素进出队列必须在同一端口,可理解为两个栈。
5、串:仅由字符构成的有限序列,是一种线性表,一般记为s="a1a2a3…an"(n>0),其中,s为串名,引号内为串值。
空串:长度为0的串称为空串,空串不包含任何字符。
空格串:由一个或多个空格组成的串。
字串:由串中任意长度的连续字符构成的序列称为字串。含有字串的串称为主串。空串是任何串的子串。
非线性结构
1、二维数组(数组只适合顺序存储)
数据元素数目固定,一旦定义了一个数组结构,就不再有元素个数的增减变化。
数据元素具有相同的类型。
数据元素的下表关系具有上下界约束且下标有序。
以行为主序优先存储的地址计算公式为:
Loc(aiaj)=Loc(a11)+((i-1)*n+(j-1))*L
以列为主序优先存储的地址计算公式为:
Loc(aiaj)=Loc(a11)+((j-1)*m+(j-1))*L
1.1、三对角矩阵:以行为主序将n阶三对角矩阵An*n的非0元素aij存储在一维数组B[k](1<=k<=3*n-2)中,则元素位置之间的对应关系为:
k=3*(i-1)-1+j-i=2i+j(1<=i,j<=n)
2、树
树的基本概念:
双亲、孩子和兄弟。结合的子树的根称为该结点的孩子结点;相应地,该结点称为其子结点的双亲。具有相同双亲的结点互为兄弟。
结点的度。一个结点拥有子树的个数称为该结点的度。
叶子结点。叶子结点是指度为0 的结点。
内部节点。除根结点外,度不为0的结点。
结点的层次。结点所在的层,从上往下数,根节点为第一层。
树的深度。一棵树的最大层数为该树的深度(或高度)。
有序/无序树。如果树中各结点的各个子树是从左到右有序排列且不能交换时,则称该树为有序树,否则称为无须树。
二叉树:
每个结点最多有两个子树。
满二叉树与完全二叉树:如果一个二叉树的层数为k,结点总数为2^k-1个,则它就是满二叉树。(通俗点说就是整棵树叶子结点都是满的) 在一个深度为h的二叉树中,除第h层外(最后一层),其他层都是满的,且最后一层所有的结点都必须从左到右依次放置,不能留空,则称该二叉树为完全二叉树。
二叉排序树:左子树上所有节点的值小于根节点的值,右子树上所有节点的值大于根节 点的值
平衡二叉树(AVL 树):左子树和右子树高度之差的绝对值不超过 1
二叉树的性质
性质一:在二叉树的i层上至多有2 i-1个节点(i>=1)至少有1个
性质二:深度为k的二叉树至多有2k-1个节点,至少为k个
性质三:对任何一棵二叉树T,如果终端结点树为n,度为2的结点为n2,度为0的结点为n0 则n0=n2+n1
性质四:具有n个节点的完全二叉树的深度为[log2n]+1向下取整
性质五:如果有一颗有n个节点的完全二叉树的节点按层次序编号,对任一层的节点i(1<=i<=n)有
1.如果i=1,则节点是二叉树的根,无双亲,如果i>1,则其双亲节点为[i/2],向下取整
2.如果2i>n那么节点i没有左孩子,否则其左孩子为2i
3.如果2i+1>n那么节点没有右孩子,否则右孩子为2i+1
二叉树的遍历
前序(根、左、右)、后序(左、右、根)、中序(左、根、右)、顺序遍历(从上到下、从左到右) (所谓的前、后、中指的是根遍历的位置)
最优二叉树(哈夫曼树)
最优二叉树又称为哈夫曼树,是一种带权路径长度最短的二叉树。 哈夫曼树与完全二叉树、平衡二叉树之间没有必然的联系。
图
图的表示。G=(V,E);V:顶点的集合;E:边的集合
邻接矩阵。邻接矩阵表示法是指用一个矩阵表示图中顶点之间的邻接关系。
邻接表。邻接表表示法是指为图中的每一个顶点建立一个单链表。
图的遍历。图的遍历可以分为深度优先遍历、广度优先遍历两种方法,深度优先遍历类似于树的前序遍历,广度优先遍历则相当于树的层次遍历。
关键路径:从源点到汇点的路径中长度最长的
最短路径:从源点到其余各顶点的最短路径-----迪杰斯克拉算法
数据运算
顺序查找、二分查找、哈希查找
哈希表:通过哈希函数(以记录的关键字为自变量)得到记录的存储地址;定长按一定 函数规律存放数据;哈希地址+关键字
排序