软件评测师之数据结构与算法

一.数据结构的概述

所谓数据结构是指数据元素的集合或者数据对象的集合,以及元素之间的相互关系和构造方法。

数据结构分为逻辑结构物理结构。逻辑结构是指元素之间的相互关系;物理结构是指元素之间的存储形式(关系)。

逻辑结构又分为线性结构非线性结构。线性结构是基本的结构,头元素只有单一的后驱,尾元素只有单一的前驱;非线性结构中的前驱和后驱不是唯一的。

二.线性表

有限元素构成的序列称为线性表。

线性表常见的两种存储结构为顺序存储结构链式存储结构。 链式又分为单链表、循环链表、双向链表。

三.队列与栈

队列是一种先进先出的结构;栈是一种特殊的线性表,是一种先进后出的结构。

习题:元素按照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(算法结束)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值