一.数据结构的概述
所谓数据结构是指数据元素的集合或者数据对象的集合,以及元素之间的相互关系和构造方法。
数据结构分为逻辑结构和物理结构。逻辑结构是指元素之间的相互关系;物理结构是指元素之间的存储形式(关系)。
逻辑结构又分为线性结构和非线性结构。线性结构是基本的结构,头元素只有单一的后驱,尾元素只有单一的前驱;非线性结构中的前驱和后驱不是唯一的。
二.线性表
有限元素构成的序列称为线性表。
线性表常见的两种存储结构为顺序存储结构和链式存储结构。 链式又分为单链表、循环链表、双向链表。
三.队列与栈
队列是一种先进先出的结构;栈是一种特殊的线性表,是一种先进后出的结构。
习题:元素按照a,b,c的次序进入栈,请尝试写出其所有可能出现的出栈序列。
解答:
①若a先进栈再出栈,b再进栈再出栈,c进栈再出栈,那么这时的出栈顺序为a先出,再b出,最后c;
②若a进栈之后b接着进栈,然后c进栈,那么这时的出栈顺序为c先出,再b出,最后a;
③若a进栈之后b接着进栈b出栈,c再进栈,那么这时的出栈顺序为b先出,再c,最后a;
④若a进栈之后b接着进栈b出栈、a出栈,然后c进栈c出栈,那么这时的出栈顺序为b先出,再为a,最后c;
考法1:栈的出入栈序列
设元素a,b,c,d依次进入一个初始为空的栈,则不可能通过合法的栈操作序列得到___.
A.a b c d
B.b a c d
C.c a b d
D.d c b a
解析:选C。
四.数组
数组类型 | 存储地址计算 |
---|---|
一维数组a[n] | a[i]的存储地址为:a+i*len |
二维数组a[m][n] | a[i][j]的存储地址(按行存储)为:a+(i*n+j)*len |
二维数组a[m][n] | a[i][j]的存储地址(按列存储)为:a+(j*m+i)*len |
按行存储就是第一行存完之后再存第二行,第二行存完再存第三行…
按列存储就是第一列存完之后再存第二列,第二列存完再存第三列…
习题:已知5行5列的二维数组a中的各元素占两个字节,求元素a[2][3]按行优先存储的存储地址。
⭐⭐⭐⭐⭐
⭐⭐⭐⭐⭐
⭐⭐⭐🐻⭐
⭐⭐⭐⭐⭐
⭐⭐⭐⭐⭐
解析:按行来,就是说有几行是满的呢?这里要注意下标是从0开始还是从1开始。有2行是满的,所在列有3个是满的,即2*5+3是满了的,这个字节长2,那么带入公式就是 a0 + (2 * 5 + 3) * 2。如果是按列优先存储呢?那么带入公式就是 a0 + (3 * 5 + 2) * 2。
考法2:数组元素的偏移量/地址计算
设数组a[1…10,1…8]中的元素按行存放,每个元素占用4个存储单元,已知第一个数组元素a[1,1]的地址为1004,那么a[5,6]的地址为___。
A.1004 +(5 * 8 + 6)*4
B.1004 +(4 * 8 + 5)*4
C.1004 +(5 * 10 + 6)*4
D.1004 +(4 * 10 + 5)*4
解析:选B。数组a是从0开始的,所以根据a[5,6]可知有4行是满的,而所在列有5个是满的,即4 * 8 + 5。a0为1004,len为4,带入公式为1004 +(4 * 8 + 5)*4。
五.树与二叉树
结点的度:这个结点的下一层的个数
树的高度:数的层次,有几层
叶子结点:没有下一层的结点
内部结点:除跟结点(没有上一层的结点)的有下一层的结点
父结点:相对的,某个结点的上一层就是父结点
子结点:相对的,某个结点的下一层就是子结点
兄弟结点:相对的,为同一个结点的下一层就是兄弟结点
考法3:二叉树的特性
对下图所示的二叉树进行顺序存储(根节点编号为1,对于编号为i的结点,其左孩子结点为2i,右孩子结点为2i+1)并用一维数组BT来表示,已知结点X,E和D在数组BT中的下标分别为1,2,3,可推出结点G,K和H在数组BT中的下标分别为___。
A.10、11、12
B.12、24、25
C.11、12、13
D.11、22、23
解析:选D。
二叉树遍历
前序遍历:跟→左→右
中序遍历:左→跟→右
后序遍历:左→右→跟
层次遍历
前序遍历、中序遍历、后序遍历的区别就是看跟是在前面,中间或是最后。
以下面这个二叉树为例:
后续遍历序列是:4,8,7,5,2,6,3,1
前序遍历序列是:1,2,3,4,5,8,3,6
中序遍历序列是:4,2,7,8,5,1,3,6
考法4:二叉树的遍历
若某二叉数的先序遍历序列是ABDCE,中序遍历序列是BDACE,则该二叉树为___。
解析:选D。
六.堆
是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。
堆总是满足下列性质:
①堆中某个结点的值总是不大于或不小于其父结点的值
②堆总是一颗完全二叉树
考法5:大/小顶堆
堆是一种数据结构,分为大顶堆和小顶堆两种类型,大(小)顶堆要求父元素大于等于(小于等于)其左右孩子元素。则___是一个大顶堆结构,该堆结构用二叉树表示,其告诉(或层数)为 __。
(1)
A.94,31,53,23,16,27
B.94,53,31,72,16,23
C.16,53,23,94,31,72
D.16,31,23,94,53,72
(2)
A.2
B.3
C.4
D.5
解析:选A,B.大顶堆要求父元素大于等于左右孩子元素。
七.图
顶点和边构成的集合。
有方向的称为有向图,没有方向的称为无向图。
边指向顶点A的边的数量为入度,边从顶点A指向其他顶点的边的数量为出度。
考法6:邻接链表存储
对于下面的有向图,其邻接矩阵是一个___的矩阵。采用邻接链表存储时,顶点0的表结点个数为2,顶点3的表结点个数为0,顶点1的表结点个数为__。
(1)
A.3X4
B.4X3
C.6X6
D.7X7
(2)
A.0
B.1
C.2
D.3
解析:选D,C。编号从0到6,共有7个顶点。
八.算法概述
算法的五个重要特性:
有穷性:有穷的时间内完成
可行性
确定性
输入
输出
伪代码
一种介于自然语言与程序语言之间的对算法实现的表示形式
【简单示例】输入3个数,打印输出其中最大的数
Begin(算法开始)
输入A,B,C
IF A > B,则 A → Max
否则 B → Max
IF C > Max,则 C → Max
Print Max
End(算法结束)