目录
数据结构定义
伪代码
线性表
队列与栈
数组
练习题
广义表
练习题
树与二叉树
二叉树遍历
练习题
图
练习题
算法
复杂度
排序
数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。
数据结构可以分为物理结构和逻辑结构。逻辑结构指的是元素之间的相互关系。物理结构指的是元素之间的存储关系。
逻辑结构又分为线性结构和非线性结构。
线性表的概念:线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。(a1, a2, ..., an)
线性表常见的两种存储结构:顺序存储结构,链式存储结构,顺序表以及链表。
重要考点!尤其是栈。
先进后出就是后入栈的元素一定是在先入栈元素出来的队伍之前。
上题中,a、b、c是按照次序入栈的,因此a一定比b先入栈,b一定比c先入栈。
数组类型 | 存储地址计算 |
---|---|
一维数组a[n] | a[i]的存储地址为:a+i*len |
二维数组a[m][n] m表示行,n表示列 |
a[i][j]的存储地址(按行存储)为:a+(i*n+j)*len a[i][j]的存储地址(按列存储)为:a+(j*m+i)*len |
(1)已知5行5列的二维数组a中各元素占两个字节,求元素a[2][3]按行优先存储的存储地址?
(2)设数组a[1...n,1...m](n>1,m>1)中的元素以行为主序存放,每个元素占用1个存储单元,则数组元素a[i,j](1<=i<=n, 1<=j<=m)相对于数组空间首地址的偏移量为()
A (i-1)*m+j-1 B (i-1)*n+j-1 C (j-1)*m+i-1 D(j-1)*n+i-1
(3)若二维数组arr[1...M, 1...N]的首地址为base,数组元素按列存储且每个元素占用K个存储单元,则元素arr[i,j]在该数组空间的地址为()
A base+((i-1)*M+j-1)*K B base+((i-1)*N+j-1)*K C base+((j-1)*M+i-1)*K D base+((j-1)*N+i-1)*K
解析:
第一题:由于数组下标是从0开始的,因此a[2][3]是位于图中如下位置。
a[2][3]的存储地址=a+(i*n+j)*len=a+(2*5+3) * 2个字节。
第二题:A。
第三题:C。
广义表是n个表元素组成的有限序列,是线性表的推广。通常用递归的形式进行定义,记作:。
注:其中LS是表明,是表元素。它可以是表(称作子表),也可以是数据元素(称为原子)。其中n是广义表的长度(也就是最外层包含的元素个数), n=0的广义表为空表;而递归定义的重数就是广义表的深度,直观地说,就是定义中所含括号的重数(原子的深度为0,空表的是深度为1)。
(了解概念即可)
有广义表LS1=(a, (b,c), (d,e)),则其长度为? 深度为?
长度看第一层括号的元素的个数。(a, (b,c), (d,e))其第一层括号中一共有a, (b,c), (d,e)3个元素,因此长度为3。
深度是嵌套的程度。(a, (b,c), (d,e))这个广义表,其第一层括号里面还嵌套了一层括号,因此深度为2。
二叉树:就是每一个根节点下最多两个子序,左子序和右子序。
二叉树分为满二叉树,完全二叉树以及平衡二叉树。
满二叉树:除了最下面一层都是满的。
完全二叉树:从上往下,从左往右依次是满的。
★结点的度:节点下有几个度。
★树的高度:多少层次。
★叶子结点:指度为0.
★分支结点
★内部结点:除根以外的叶子节点。
★父结点
★子结点
★兄弟结点
★层次
★前序遍历:又称先序遍历。根 --> 左子序 -->右子序。
★中序遍历:左子序 --> 根 -->右子序。
★后序遍历:右子序--> 左子序 -->根 。
★层次遍历:从上往下,从左往右。
(1)图中各种遍历方法遍历的结果分别是?
(2)堆是一种数据结构,分为大顶堆和小顶堆两种类型,大(小)顶堆要求父元素大于等于(小于等于)其左右孩子元素。则()是一个大顶堆结构,该对结构用二叉树表示,其高度(或层数)为()
A 94,31,53,23,16,27 B 94,53,31,72,16,23
C 16,53,23,94,31,72 B 16,31,23,94,53,72
A 2 B 3 C 4 D 5
解析:
第一题:
我们先把这个图补全,并划分好区域。下图中,相对于1这个根节点,24578是它的左子序,36是它的右子序;相对于根节点2,4是它的左子序,578是它的右子序;相对于5这个根节点,7是它的左子序,其右子序为空;相对于7这个根节点,其左子序为空,8是它的右子序;相对于3这个根节点,其左子序为空,6是它的右子序。
根据前序遍历的规则,先遍历根节点,再遍历左子序,右子序。因此其遍历结果是:12457836。
根据中序遍历的规则,先遍历左子序,再遍历根,右子序。因此其遍历结果是:42758136。
根据后序遍历的规则,先遍历左子序,再遍历右子序,根。因此其遍历结果是:48752631。
第二题:题目中没有明确说明是按照什么顺序就一般是按照层次顺序遍历。根据选项中的内容,构造二叉树,只有A符合条件。答案选择A,B。
上图中,4有指向1,因此第一个数为1,有指向2,因此第二个数为1, 没有指向3,因此第3个数为0,4也没有指向自己,因此第四个数为0。因此A的最后一个数是1100。
B对应图二,只要右边的就是1,没有边的就是0。
注意:几个顶点就有几个n*n的矩阵。有3个顶点就是个3*3的邻接矩阵。
对于下面的有向图,其邻接矩阵是一个()矩阵。采用邻接链表存储时,顶点0的表结点个数为2,顶点3的表结点个数为0,顶点1的表结点个数为()
A 3 x 4 B 4 x3 C 6 x 6 D 7 x 7
A 0 B 1 C 2 D 3
解析:
图中一共有0123456共7个顶点,因此是一个7*7的邻接矩阵。答案选择D。
顶点0的表节点个数为2,0有两个箭头指向1和4。顶点3的表节点个数为0,其没有指向任何数字。顶点为1的指向了2和5,因此其表节点个数为2,答案选择C。
算法是由有限指令组成。每个指令在有限时间内完成。
算法的5个重要特性:有穷性,可行性,输出,确定性,输入。
一般考试只涉及到时间复杂度。
记住平均情况就可以了。