数据结构与算法

目录

数据结构定义

伪代码

线性表

队列与栈

数组

练习题

广义表

练习题

树与二叉树

二叉树遍历

练习题

练习题

算法

复杂度

排序


数据结构定义

数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。

数据结构可以分为物理结构和逻辑结构。逻辑结构指的是元素之间的相互关系。物理结构指的是元素之间的存储关系。

逻辑结构又分为线性结构和非线性结构。

伪代码

线性表

线性表的概念:线性表(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个重要特性:有穷性,可行性,输出,确定性,输入。

复杂度

一般考试只涉及到时间复杂度。

排序

记住平均情况就可以了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值