数据结构与算法复习1

简答题:

  • 数据结构研究的主要内容
数据的逻辑结构;
数据的存储结构;
定义在结构中数据的操作;
  • 根据数据元素之间逻辑关系的不同,数据结构分为几类?
    常用的储存方法有几种?
逻辑区分:
	集合结构;线性结构;树形结构;图形结构
储存方法:
	顺序储存;链式存储;散列存储;索引存储

  • 单链表带头结点 和不带的区别
操作:插入删除中,带头结点的始终不用修改头指针指向,而不带头结点的
	有时需要,所以不带头结点的还需要进行是否为第一个结点的判断。
结构:无论是否为空链表,带头结点的头结点始终存在
  • 两栈共享,写出栈1、栈2入栈出栈的语句,和栈空栈满的语句。
将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于
数组的两端。当第0号栈的栈顶指针top[0]等于-1时该栈为空,当第
1号栈的栈顶指针top[1]等于max时该栈为空。
两个栈均从两端向中间增长。

-----------------------------------------------------------

入栈:
int push(stack S ,int i,int e)
{//i为栈号,i=0表示左栈,i=1为右栈,e是入栈元素。入栈成功返回1,失败返回0
	if(i<0||i>1)
	{
		cout<<"栈号输入错误"<<endl;
		exit(0);
	}
	if(isFull(S)==1)
	{
		cout<<"栈满"<<endl;
		return(0);
	}
	switch(i)
	{
	case 0: S.V[++S.top[0]]=x;
	return(1);
	break;
	case 1: S.V[--S.top[1]]=x;
	return(1);
	}
-----------------------------------------------------------
ElemType pop(stack S,int i)
{//i代表栈号,i=0时为左栈,i=1时为右栈。退栈成功时返回退栈元素,否则返回-1
	if(i<0 || i>1)
	{
	cout<<"栈号输入错误"<<endl;
	exit(0);
	}
	switch(i)
	{
		case 0: if(S.top[0]==-1) 
				{
					cout<<"栈空"<<endl;
					return (-1);
				}
				else return(S.V[S.top[0]--]);
		case 1: if(S.top[1]==max)
				{
					cout<<“栈空”<<endl;
					return(-1);
				}
 				else return(S.V[S.top[1]++]);
	}
-----------------------------------------------------------

栈空:

int isEmpty(stack S)
{
	return (S.top[0]==-1 && S.top[1]==max);
}
-----------------------------------------------------------
栈满:
int  isFull(stack S ){
	if (S.top[1]-S.top[0]==1)
	return 1;
	else
	return 0;
}
  • 写出存取结构的含义及种类
与存储结构不同,存储结构是实际计算机上的储存表示
存取结构是在一个数据结构上对查找操作时间性能的一种描述
随机存取:数组【索引直接映射】
顺序存取:链表之类的
  • 判断循环队列队满队空的条件是什么
空:
rear==front
满:
front==(rear+1)%size
  • 二叉树与度为2的数之间的差别是什么
1、度为2的树是不区分左子树和右子树.
	而二叉树是要分左子树和右子树的.(也就是没有之后的顺序概念)
2、度为2的数不包含空树,而二叉树是可以有空树的.
  • 给定一组关键码构建哈夫曼树和哈夫曼编码
  • 给定二叉树的前/后/层序遍历加中序遍历,确定一颗唯一形态的二叉树
  • 给定一个无向连通网,用prim算法或者kruskal算法写出最小生成树

有关图的介绍博客:转载

一般边稠密用prim
不然用kruskal
但是在数量级小的情况下区别并不会很大
  • 给一个有向图,利用Dijkstra算法写出其最小生成树
  • 图的主要储存结构有哪两种。在何种情况下选择哪种?
  • 对于稠密图和稀疏图,用邻接矩阵和邻接表哪个好一点?
稀疏图邻接表
稠密图邻接矩阵
  • 给定图的邻接表写出图的深度优先遍历和广度优先遍历
  • 看图写出邻接矩阵
  • 给一组关键码集合,画出构建平衡二叉树的过程
  • 给一组关键码集合,用除留余数法设计散列函数求出关键码地址,并用二次探测法处理冲突。
    ——————————————————————————

小测1:

  • 1 用带头结点的单链表表示队长大于1的队列时,其队头指针指向队头结点,队尾指针指向队尾结点,则在进行删除操作时:(A)
    A、仅修改队头指针
    B、仅修改队尾指针
    C、队头队尾指针都要修改
    D、队头队尾指针都可能要修改

  • 2 任何一个无向联通网的最小生成树:(A)
    A、有一棵或多棵
    B、只有1棵
    C、一定有多棵
    D、可能不存在

  • 3 关键路径是时间结点网络中:(A)
    A 源点到汇点的最长路径
    B 最长回路
    C 源点到汇点最短路径
    D 最短回路

  • 4 以数据集{4,5,6,7,10,12,18}为叶结点权值所构造的哈夫曼树,其带权路径长度为:(C)
    哈夫曼树的一个解释
    A 155
    B 160
    C 165
    D 170

哈夫曼树的构建:
	从序列中取出两个最小的数,将它们所代表的子树链接,并将
	加和以后的根权值放回序列中继续参加排序
	如:{4 5 6 7 10 12 18}
	{6 7 9 10 12 18}
	{9 10 12 13 18}
	{12 13 18 19}
	{18 19 25}
	{25 37}
	{63}
	这个过程同时也映射着哈夫曼树的构造(元素加和对应树的合并)
  • 5 若需要利用形式参数来直接访问修改实参的值,则应该将形参说明为( )参数(C)
    A 值参数
    B 实地址
    C 指针
    D 地址参数

  • 6 假设以行序为主序储存二维数组
    A=array【1…100 , 1…100】设每个数组元素占两个储存单元,基地址为10,则LOC[5,5]=( )(A)
    A 818
    B 808
    C 1010
    D 1020

先看是否设坑:序列不从0开始,像这道题就是从1开始
(10) 
| 1 | 2  3  4  5  6 ... 100
  2
  3
  4
  5
  . 
  .
  .
 100
思路:不看开始的这个1,就是填满前四位置400加5,然后因为从1,1
开始算,所以是加了404单元:
10+404X2=818
选择A
  • 7 若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法时间复杂度为:A
    A O(n)
    B O(0)
    C O (1)
    D O(n^2)
线性表在插入操作的过程中需要对元素进行位移
时间复杂度的期望是O(n)
  • 8 判断一个有向图是否存在回路,可以用:(B )
    A 深度优先遍历算法
    B 拓扑排序
    C Djikstra方法
    D 广度优先遍历方法
拓扑排序的依据是结点之间的指向,若A->B,则A在整个排序序列中
被规定必须在B前面,所以明显可以看出,如果存在回路,则无法确定
整个顺序,会变成死循环的向下走,所以拓扑排序能成功的前提条件
是没有回路,也即是拓扑排序算法	可以用来判断有向图是否存在回路

10、若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[1…(n(n+1))/2]中,则在B中确定aij(i
A、 j(j-1)/2+i
B、 i(i-1)/2+j
C、 i(i+1)/2+j
D、 j(j+1)/2+i
正确答案: B

i是行的位置下标(y),j是列的位置下标(x),
下三角矩阵中:i>=j 反之上三角中:i<=j
**             **
n阶对称矩阵中的元素满足下述条件:aij=aji,(1<=i,j<=n)。
对称矩阵中的每一对数据元素可以共用一个存储空间,因此可以将n2个
元素压缩存储到n(n+1)/2个元的空间中,即可以一维数组保存。
假设用一维数组B[n(n+1)/2]作为对称矩阵A的存储结构,则B[k]和
矩阵元素aij的下标i、j的对应关系为:
当i>j时,k=i(i-1)/2+i;
当i<j时,k=j(j-1)/2+i;
(以上公式是针对aij和aji保存在同一个单元中的情况)
由上可知,正确答案应该是B
 

11、递归过程或函数调用时,处理参数及返回地址需要用一种( )的数据结构。
A、 栈
B、 队列
C、 多维数组
D、 线性表
正确答案: A

在多函数嵌套和递归的时候,返回的时候应该是后调用的先返回
从逻辑性上判断根据这种规则可以得出使用栈作为数据结构比较合理

12、串是一种特殊的线性表,其特殊性体现在( )。
A、 数据元素是字符
B、 顺序存储
C、 链式存储
D、 逻辑结构是线性结构
正确答案: A

字符串。。。。。阿巴阿巴

13、顺序存储,存储单元的地址( )。
A、 一定连续
B、 一定不连续
C、 不一定连续
D、 部分连续,部分不连续
正确答案: A

顺序存储,联系数组,储存单元是连续的

15、一个具有n个顶点的无向图最多有( )边。
A、 n(n-1)/2
B、 n(n-1)
C、 n
D、 2n
正确答案: A

第n个结点可以链接n-1条边,之后第n-1个结点可以链接n-2条边,
最终的边数和等于从1到n-1的等差数列求Sn的问题。
(1+(n-1))*(n-1)/2

17、一棵具有N个结点的二叉树采用二叉链表进行存储,其中空指针域有( )个。
A、 N+1
B、 N
C、 N-1
D、 不确定
正确答案: A

根据链域(指针域)的思路,能链接k个结点的情况下,假设有n个结点
则全链域有n*k大小,n个结点中链接了n-1条链
剩下的就都是空链域:
n*k-(n-1),二叉树中k=2,带入得空指针域有n+1个

18、对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是()。
A、 head→next=NULL;
B、 head=NULL;
C、 head→next=head;
D、 head!= NULL;
正确答案: A

头结点始终存在,判定空表的标准是头结点后面没有连接任何结点 

19、已知串 S=‘aaab’,其next函数值为( )。
A、 0123
B、 1123
C、 1231
D、 1211
正确答案: A

解析: 注意这里和课本不一致,课本是j=0时开始,next[0]=-1;
所以next函数值为-1,0,1,2
而此题是从j=1时开始,next[0]=0;所以next函数值为0,1,2,3。
next[1]默认1 a
next[2]=2  aa,a与a匹配
next[3]=3 aaa ,aa与aa【匹配】

20、若串S= ‘software’,其前缀真子串的数目是( )。
A、 7
B、 10
C、 9
D、 8
正确答案: A

类比真子集吧-----

21、最大容量为n的循环队列,队尾指针为rear,队头指针为front,则队空的条件是( )。
A、 rear=front
B、 (rear+1)%n=front
C、 rear+1=front
D、 (rear-l)%n=front
正确答案: A

判断队空应用了原本的接触,而留下了额外的一个空间用来
判断满

23、任意一棵二叉树的叶子结点在其先序、中序、后序序列中的相对位置( )。
A、 肯定发生变化
B、 肯定不发生变化
C、 有时发生变化
D、 无法确定
正确答案: B

因为不管哪种遍历方式都是把“根”插入“左右”,所以
通过左右将叶子结点的相对位置限制住了
比如
	 1
   /   \
  2     3
  无论是123,231,213,2始终被限制在3的左侧

24、在单链表指针为p的结点之后插入指针为s的结点,正确的操作是()。
A、 s->next=p->next;p->next=s;
B、 p->next=s;s->next=p->next;
C、 p->next=s;p->next=s->next;
D、 p->next=s->next;p->next=s;
正确答案: A

让s连接p的后续链,再将s链作为p的后续链,则s就进入到了原链中。

25、若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。
A、 顺序表
B、 双链表
C、 带头结点的双循环链表
D、 单循环链表
正确答案: A

对于频繁进行元素存取的情况,使用顺序表会比较节省时间,
且在最后进行插入删除避免了操作时可能出现的对元素位置
移动的需求

26、设有两个串p和q ,其中q是p的子串,求q在p中首次出现的位置的算法称为( )。
A、 串的模式匹配
B、 求子串
C、 串联接
D、 求串长
正确答案: A

28、评价排序算法好坏的标准主要是( )。
A、 执行时间和所需的辅助空间
B、 执行时间
C、 辅助空间
D、 算法本身的复杂度
正确答案: A

时间空间复杂度是在算法衡量时的重要因素

29、树最适合用来表示的结构是( )。
A、 元素间具有分支及层次关系的结构
B、 元素间的有序结构
C、 元素间的无序结构
D、 元素间无联系的结构
正确答案: A

树未必有序或者无序,主要的意义是用来表示树形从根开散到
树叶的层次结构。

31、已知一棵度为3的树有2个度为1的结点,3个度为2的结点,4个度为3的结点,则该树中有( )个叶子结点。
A、 10
B、 11
C、 12
D、 13
正确答案: C

这里的度是指出度2333
所有的度数=2*1+3*2+4*3=3+2+4+x-1
20=8+x
x=12
我们在这里是默认叶子结点的出度为0的

32、在稀疏矩阵的三元组顺序表中,每个三元组表示( )。
A、 矩阵中数据元素的行号、列号和数据值
B、 矩阵中非零元素的数据值
C、 矩阵中数据元素的行号和列号
D、 矩阵中非零元素的行号、列号和数据值
正确答案: D

稀疏矩阵三元组的储存思路:
记录原数组的两个维度值(x,y)
————
记录稀疏数出现的位置以及值value
以及不知道为啥要排序的排序

34、在下面的程序段中,x=x+1;的语句频度为( )。
for( i=1;i<=n;i++)
for( j=1;j<=n;j++) x=x+1;
A、 O(2n)
B、 O (n)
C、 O (n^2)
D、 O (log2n)
正确答案: C
解析:

双重循环按乘算,应为n的2次方

35、已知一如下10个记录的表,其关键字序列为(2,15,19,25,30,34,44,55,58,80),用折半查找法查找关键字为55的记录,比较次数是( )。
A、 1次
B、 2次
C、 3次
D、 4次
正确答案: B

第一次折半:30 向上取
第二次折半:55 符合查找要求,返回
比较次数为2

36、广度优先遍历类似于二叉树的( )。
A、 先序遍历
B、 中序遍历
C、 后序遍历
D、 层次遍历
正确答案: D

广度优先要求向广扩散,映射到二叉树就是把一层中所有结点都
加到遍历序列中

37、如果按关键码值递增的顺序依次将99个关键码值插入到二叉排序树中,则对这样的二叉排序树检索时,在等概率情况下查找成功时的平均查找长度ASL为( )。
A、 50
B、 48
C、 45
D、 47
正确答案: A

解析: (n+1)/2
题目中的意思大概是一直向右边延展右斜树,然后所有的
C1~Cn的总查找数:(n+1)*n/2
平均查找数:(n+1)/2

38、对n个不同的排序码进行冒泡(递增)排序,在下列( )情况比较的次数最多。。
A、 从大到小排列好的
B、 从小到大排列好的
C、 元素无序
D、 元素基本有序
正确答案: A

解析: 逆序重新排列
需要更多的冒泡次数

39、对包含n个元素的散列表进行查找,平均查找长度为( )。
A、 不直接依赖于n
B、 O(n2)
C、 O(log2n)
D、 O(n)
正确答案: A
解析:

散列表查找到一个元素的期望和元素的总数无关!

40、某算法的时间复杂度是O(n2),表明该算法的( )。
A、 执行时间与n2成正比
B、 问题规模是n2
C、 执行时间等于n2
D、 问题规模与n2成正比
正确答案: A

大O计数时间复杂度,意义是执行时间的级数

二、 多选题
1、在数据结构中,从存储结构上可以将之分为( )。
A、 顺序结构
B、 非顺序结构
C、 紧凑结构和非紧凑结构
D、 线性结构和非线性结构
正确答案: AB

在数据结构中,从储存结构上可以将之分为顺序结构和非顺序结构有穷性,

2、算法必须具备( ) 这三个特性。
A、 可扩充性
B、 可执行性
C、 确定性
D、 有穷性
正确答案: BCD

算法必须具备的特性:
有穷性
确定性
执行性
具有的结构:
输入结构
输出结构

3、在稀疏矩阵的三元组顺序表中,每个三元组表示( )。
A、 矩阵中非零元素的行号
B、 矩阵中非零元素的列号
C、 矩阵中数据元素的行号和列号
D、 矩阵中非零元素的数据值
正确答案: ABD

C不对,三元组不存储相同元素的具体位置,而是作为全局填充

4、对线性表进行折半查找时,要求线性表( )。
A、 没有要求
B、 关键字有序
C、 顺序存储
D、 没有正确答案
正确答案: BC

要求是1有序序列
	 2顺序存储好直接使用下标索引定位

5、下面正确的说法是( )。
A、 任何一个关键活动提前完成,将使整个工程提前完成
B、 关键活动不按期完成就会影响整个工程的完成时间
C、 所有关键活动都提前完成,则整个工程提前完成
D、 某些关键活动若提前完成,将使整个工程提前完成
正确答案: BCD

关键活动决定了其他的活动可调整的范围

7、关于哈希查找,以下说法正确的是( )。
A、 哈希查找中,记录的存储地址是计算出来的,因而不需要比较
B、 装填因子越大,越容易产生冲突
C、 哈希查找有两个关键问题:哈希函数和处理冲突的方法
D、 链地址法和线性探测再散列都是解决冲突的方法
正确答案: BCD
解析:

A需要判断这个元素是否已经在哈希表中

8、以下不适合用分块查的数据集是( )。
A、 数据分成若干块,块内数据不必有序,但块间必须有序
B、 数据分成若干块,每块(除最后一块外)中数据个数需相同
C、 数据分成若干块,块内数据必须有序,块间不必有序
D、 数据分成大小相等的若干块,块内数据有序
正确答案: BCD
解析:

9、下列陈述中不正确的是( )。
A、 二叉树中最多只有两棵子树,且有左右子树之分
B、 二叉树是度为2的有序树
C、 二叉树中结点只有一个孩子时无左右之分
D、 二叉树中必有度为2的结点
正确答案: BCD
解析:

11、在数据结构中,从逻辑上可以把数据结构分成( )。
A、 线性结构
B、 树型结构
C、 图状结构
D、 集合
正确答案: ABCD
12、下面关于图的存储结构叙述中不正确的是( )。
A、 用邻接矩阵存储图,占用空间大小只与图中顶点数有关,而与边数无关
B、 用邻接矩阵存储图,占用空间大小只与图中边数有关,而与顶点数无关
C、 用邻接表存储图,占用空间大小只与图中顶点数有关,而与边数无关
D、 用邻接表存储图,占用空间大小只与图中边数有关,而与顶点数无关
正确答案: BCD
解析:

用邻接矩阵存储图,占用空间大小只与图中顶点数有关,而与边数无关
邻接表都有关 

13、最小生成树的构造可使用( )算法。
A、 Prim算法
B、 Kruskal算法
C、 哈夫曼算法
D、 迪杰斯特拉算
正确答案: AB

最小生成树的构建用Prim算法和Kruskal算法
Dijkstra算法是用来求带权图的最短路径的

三、 判断题
1、Hash表的平均查找长度与处理冲突的方法无关。
正确答案: 错误

哈希表的平均查找长度与处理冲突的方法有关

3、由同一关键字集合构造的各棵二叉排序树形态和平均查找长度都不一定相同
正确答案: 正确
4、在完全二叉树中,若一个结点没有左孩子,则它必然是叶子结点。
正确答案: 正确

完全二叉树,要么满,要么一定有左孩子

5、如果两个串含有相同的字符,则说明它们相等。
正确答案: 错误

字符序列要相同,也就是说出现位置和顺序相同

6、在查找过程中,不做增加、删除或修改的查找称为动态查找。
正确答案: 错误

静态查找

首先无论是静态查找还是动态查找,都要有查找的对象,也就是包含很多同类型
数据的“表”,这个“表”可以理解为一个由同类型数据元素组成的一个“集合”,该
集合可以用各种容器来存储,例如数组、链表、树等,我们统称这些存储数据的
数据结构为——查找表。可见,查找表有时是我们传统意义的表,有时候是很复杂
的一种结构。

静态查找就是我们平时概念中的查找,是“真正的查找”。之所以说静态查找是真
正的查找,因为在静态查找过程中仅仅是执行“查找”的操作,即:(1)查看某
特定的关键字是否在表中(判断性查找);(2)检索某特定关键字数据元素的
各种属性(检索性查找)。这两种操作都只是获取已经存在的一个表中的数据
信息,不对表的数据元素和结构进行任何改变,这就是所谓的静态查找。
(数组,索引顺序表的查找)
2、动态查找

看到上面静态查找的概念,动态查找就很好理解了,个人总觉得动态查找不像
是“查找”,更像是一个对表进行“创建、扩充、修改、删除”的过程。动态查找
的过程中对表的操作会多两个动作:(1)首先也有一个“判断性查找”的过程,
如果某特定的关键字在表中不存在,则按照一定的规则将其插入表中;(2)
如果已经存在,则可以对其执行删除操作。动态查找的过程虽然只是多了“插入
”和“删除”的操作,但是在对具体的表执行这两种操作时,往往并不是那么简单。
(树的查找,二叉树等的查找)

7、顺序表适宜于顺序存取,而链表适宜于随机存取。
正确答案: 错误

顺序表随机存取,可以直接由索引映射到对应的值

8、稀疏矩阵中非零元素的个数远小于矩阵中元素的总数。
正确答案: 正确

即所谓的稀疏性

9、静态链表与动态链表在元素的插入、删除上类似,不需做元素的移动。
正确答案: 正确

12、算法可以用不同的语言描述,如果用C 语言或PASCAL语言等高级语言来描述,则算法实际上就是程序了。
正确答案: 错误

缺乏数据结构

13、迪杰斯特拉算法求最短路径时,是按照路径长度递增的顺序求解的。
正确答案: 正确

也就是从源点无限的向终点延伸

14、在有序的顺序表和有序的链表上,均可以采用折半查找来提高查找速度。
正确答案: 错误

有序的链表不能通过索引来对应元素

15、线性表的特点是每个元素都有一个前驱和一个后继。
正确答案: 错误

起始元素和末尾元素并不是二者都有

16、有n个元素存放在一维数组A[1…n]中,在进行顺序查找时,这n个数的不同排列,其平均查找长度不同。
正确答案: 错误

17、一个数据结构在计算机中的表示(又称映像)称为存储结构。
正确答案: 正确
18、子串的定位运算称为串的模式匹配。
正确答案: 正确
19、二分查找法要求待查表的关键字值必须有序。
正确答案: 正确
21、线性表的链式存储结构中,逻辑上相邻的两个元素在物理位置上并不一定相邻。
正确答案: 正确
25、任何一个递归过程都可以转换成非递归过程。
正确答案: 正确
26、数据结构中评价算法的两个重要指标是算法的时间复杂度和空间复杂度。
正确答案: 正确
27、一棵树中的叶子数一定等于与其对应的二叉树的叶子数。
正确答案: 错误

没有这种说法8

28、一个稀疏矩阵A[m,n]采用三元组顺序表形式表示,若把三元组中有关行下标与列下标的值互换,并把m和n的值互换,则就完成了A[m,n]的转置运算。
正确答案: 错误

还需要排序?

29、在对不带头结点的链队列作出队操作时,不会改变头指针的值。
正确答案: 错误

错,不带头结点的话头指针会进行位移用以定位
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值