数据结构期末练习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.数据的不可分割的基本单位是( A )。
A.元素B.结点C.数据类型D.数据项
2.计算机处理数据的最小单位是(D )。
A.元素B.结点C.数据类型D.数据项
3.算法是指( C )。
A.计算方法B.排序方法
C.解决问题的有限运算步骤D.查找方法
4.顺序存储结构中数据元素之间的逻辑关系是由(C )表示的
A 线性结构
B 非线性结构
C 存储位置
D 指针
5.单循环链表的主要优点是(B )。
A 不再需要头指针了
B 从表中任一结点出发都能扫描到整个链表;
C 已知某个结点的位置后,能够容易找到它的直接前趋;
D 在进行插入、删除操作时,能更好地保证链表不断开。
6.一个栈的入栈序列是1,2,3,4,5,则栈的不可能的输出序列是( C )。
此题的解决步骤是如果出现一个三元素顺序是a、b、c,且a>c>b,则为不可能序列
A 54321
B 45321
C 43512
D 12345
7.常对数组进行的两种基本操作是( B )
A.建立和删除B.索引和修改C.插入和修改D.插入和索引8.算法分析的两个主要方面是(A )。
A空间性能和时间性能B正确性和简明性C 可读性和文档性D 数据复杂性和程序复杂性
9.在解决计算机主机与打印机之间速度不匹配问题时通常设置一个打印缓冲
区,该缓冲区应该是一个(B )结构。
//需满足先进先出原则
A 栈
B 队列
C 数组
D 线性表
10.二维数组A的每个元素是由6个字符组成的串,行下标的围从0~8,列下标
的围是从0~9,则存放A至少需要(D)个字节。
A 90
B 180
C 240
D 540
11.讨论树、森林和二叉树的关系,目的是为了(B )。
A 借助二叉树上的运算方法去实现对树的一些运算
B 将树、森林按二叉树的存储方式进行存储并利用二叉树的算法解决树的有关问题
C 将树、森林转换成二叉树
D 体现一种技巧,没有什么实际意义
12.算法在发生非法操作时可以作出处理的特性称为(A )。
A 健壮性
B 确定性
C 可行性
D 正确性
13.二叉排序树中,最小值结点的(A )。
A 左指针一定为空
B 右指针一定为空
C 左、右指针均为空
D 左、右指针均不为空
14.算法指的是(A )。
A 对特定问题求解步骤的一种描述,是指令的有限序列。
B 计算机程序
C 解决问题的计算方法
D 数据处理
15.算法分析的目的是( C )。
A.找出数据结构的合理性B.研究算法中输入和输出的关系
C.分析算法的效率以求改进D.分析算法的易读性和文档性
16.若某线性表中最常用的操作是取第i 个元素和找第i个元素的前趋,则采用
(A )存储方法最节省时间。
A 顺序表
B 单链表
C 双链表
D 单循环链表
17.在一个单链表中,已知q所指结点是p所指结点的直接前驱,若在q和p之
间插入s所指结点,则执行(B )操作。
A s->next=p->next; p->next=s;
B q->next=s; s->next=p;
C p->next=s->next; s->next=p;
D p->next=s; s->next=q;
18.若一个栈的输入序列是1,2,3,…,n,输出序列的第一个元素是n,则第
i个输出元素是(D )。
A 不确定
B n-i
C n-i-1
D n-i+1
19.设有两个串p和q,求q在p中首次出现的位置的运算称作(B )。
A 连接
B 模式匹配
C 求子串
D 求串长
20.将数组称为随机存取结构是因为(B )。
A 数组元素是随机的
B 对数组任一元素的存取时间是相等的
C 随时可以对数组进行访问
D 数组的存储结构是不定的
21.一个高度为h的满二叉树共有n个结点,其中有m个叶子结点,则有(D)
成立。
A n=h+m
B h+m=2n
C m=h-1
D n=2m-1
22.队列的操作原则是(B )。
A.先进后出B.先进先出C.只能进行插入D.只能进行删除
23.散列技术中的冲突指的是(D )。
A 两个元素具有相同的序号
B 两个元素的键值不同,而其他属性相同
C 数据元素过多
D 不同键值的元素对应于相同的存储地址
24.在栈中,栈顶指针top指示( B )。
A.栈底元素的位置B.栈顶元素的位置
C.栈中任何元素的位置D.以上均不对
25.将数组称为随机存取结构是因为(B )。
A.数组元素是随机的B.对数组任一元素的存取时间是相等的C.随时可以对数组进行访问D.数组的存储结构是不定的
26.下面(C )不是算法所必须具备的特性。
A 有穷性
B 确切性
C 高效性
D 可行性
27.在一棵树中,(B )没有后继结点。
A.根结点B.叶子结点C.分支结点D.所有结点
28.若链表中最常用的操作是在最后一个结点之后插入一个结点和删除第一个
结点,则采用(D )存储方法最节省时间。
A 单链表
B 带头指针的单循环链表
C 双链表
D 带尾指针的单循环链表
29.设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5、e6依次通过栈
S,一个元素出栈后即进入队列Q,若6个元素出队的顺序是e2、e4、e3、
e6、e5、e1,则栈S的容量至少应该是(C )。
A 6
B 4
C 3
D 2
30.二维数组A的每个元素是由6个字符组成的串,行下标的围从0~8,列下标
的围是从0~9, A的第8列和第5行共占(C )个字节。
A 114
B 54
C 108
D 540
31.在一棵树中,每个结点最多有(B ) 个前驱结点。
A.0 B.1C.2 D.任意多个
32.一个队列的入队顺序是1,2,3,4,则队列的输出顺序是(B )。
A 4321
B 1234
C 1432
D 3241
33.下面的说法中,不正确的是(C )。
A 数组是一种线性结构
B 数组是一种定长的线性结构
C 除了插入与删除操作外,数组的基本操作还有存取、修改、检索和排序等
D 数组的基本操作有存取、修改、检索和排序等,没有插入与删除操作
34.队列的操作原则是( B )。
A.先进后出B.先进先出C.只能进行插入D.只能进行删除
35.如果结点A有3个兄弟,B是A的双亲,则结点B的度是(D )。
A 1
B 2
C 3
D 4
36.静态查找与动态查找的根本区别在于(B )。
A 它们的逻辑结构不一样
B 施加在其上的操作不同
C 所包含的数据元素的类型不一样
D 存储实现不一样
37.在一个具有n个单元的顺序栈中,假定以地址低端(即下标为0的单元)作
为栈底,以top作为栈顶指针,当出栈时,top的变化为(B )。
A 不变
B top=top-1
C top=0
D top=top+1
38.算法是指(C)
A.计算方法B.排序方法C.解决问题的有限运算步骤D.查找方法
39.算法能正确地实现预定功能的特性称为( A ) 。
A.正确性B.易读性C.健壮D.高效率
40.线性表的顺序存储结构是一种(A )的存储结构。
A 随机存取
B 顺序存取
C 索引存取
D 散列存取
41.假设有如下遗产继承规则:丈夫和妻子可以相互继承遗产;子女可以继承
父亲或母亲的遗产;子女间不能相互继承。
则表示该遗产继承关系的最合适的数据结构应该是(B )。
A 树
B 图
C 线性表
D 集合
42.数组通常具有两种基本运算,即(B )
A.创建和删除B.读取和修改
C.插入和删除D.排序和查找
43.线性表采用存储时,其地址(D )。
A 必须是连续的
B 部分地址必须是连续的
C 一定是不连续的
D 连续与否均可以
44.下面(C )不属于特殊矩阵。
A 对角矩阵
B 三角矩阵
C 稀疏矩阵 E 对称矩阵
45.线性表的第一个元素叫做( A )。
A.表头元素B.表尾元素C.前驱元素D.后继元素
46.线性表的最后一个元素叫做(B )。
A .表头元素
B .表尾元素
C .前驱元素
D .后继元素
47. 设二叉树有n 个结点,则其深度为(C )。
A n-1
B n
C log2n 向下取整+1
D 不能确定 48. G 是一个非连通无向图,共有28条边,则该图至少有(D )个顶点。
A 6
B 7
C 8
D 9
49. 在以下哪种情况下,不能执行出栈操作?(B )
A .栈满
B .栈空
C .任何情况均可
D .任何情况均不可
50. 下列数据结构中,(D )不是线性结构。
A .栈
B .队列
C .数组
D .树
51. 栈又称为( B )表。
A . 先进先出
B . 后进先出 D . 不进不出 D . 以上均不对
52. 在以下哪种情况下,不能执行入栈操作?( A )
A .栈满
B .栈空
C .任何情况均可
D .任何情况均不可
53. 下面(C )不属于特殊矩阵。
A . 对角矩阵
B .三角矩阵
C . 稀疏矩阵
D . 对称矩阵
54. 一个队列的入队顺序是1,2,3,4,则队列的输出顺序是( B )。
A .4321
B . 1234
C .1432
D .3241
取出一个点作为一个无向图,其余点作为另一个无向图,则其点连线最多,使用的点最少,8282)
1(282=⇒=-⇒=n n n C n ,共需9个点
当深度(高度)为h 时,结点数n 满足:h h n 22
1<≤-,可知h n h <≤-2log 1,
所以其深度h 为n 2log 向下取整+1
55.在一棵树中,每个结点最多有(B )个前驱结点。
A.0 B.1 C.2 D.任意多个
56.非空树有(B )个根结点。
A.0 B.1 C.2 D.任意多个
57.串是一种特殊的线性表,其特殊性体现在(B )
A.可以顺序存储B.数据元素是一个字符
C.可以存储D.数据元素可以是多个字符
58.在以下哪种情况下,不能执行出栈操作?( B )
A.栈满B.栈空C.任何情况均可D.任何情况均不可59.数组中的数据元素的类型(A )。
A.必须相同B.不必相同C.一定不能相同D.以上都不对60.下列数据结构中,( D )不都是线性结构。
A.栈和队列B.队列和数组C.数组和串D.树和队列61.关于空串与空格串,下面说确的是( C )。
A.空串与空格串是相同的B.空串与空格串长度是相同的
C.空格串中存放的都是空格D.空串中存放的都是NULL
62.递归可采用下面哪种结构实现(B )//栈实现了递归
A.队列B.栈C.树D.图
63.栈操作的原则是( B )
A.先进先出B.后进先出C.只能进行插入D.只能进行删除
64.在关键字序列(4, 12, 23, 55, 56,67,88)中,使用折半查找法查找56,需要
比较多少次(C )
A. 1
B.2
C.3
D.4
65. 如果一个函数在其函数体中调用自己本身,则该函数叫做 ( B )。
A .重载函数
B .递归函数
C .普通函数
D .成员函数
66. 线性表若采用链式存储结构时,要求存中可用存储单元的地址 ( D )
A .必须是连续的
B .部分地址必须是连续的
C .一定是不连续的
D .连续或不连续都可以
67. 设计一个判别表达式中左右括号是否配对的算法,采用( B )数据结构最
佳。
A 顺序表
B 栈
C 队列
D 链表
68. 下面的说法中,不正确的是(D )。
A 对称矩阵只须存放包括主对角线元素在的下(或上)三角的元素即可。
B 对角矩阵只须存放非零元素即可。
C 稀疏矩阵中值为零的元素较多,因此可以采用三元组表方法存储。
D 稀疏矩阵量值为零的元素分布有规律,因此可以采用三元组表方法存储。
69. 按( B )遍历二叉排序树得到的序列是一个有序序列。
A 前序
B 中序
C 后序
D 层次
二.应用题
1. 计算下列式子的时间复杂度。
(1) 2n 3
+100log 2n+12)(3n O (2) 5+n 2+n!)!(n O
(3) 10+20n+2n )2(n O
2.有三个元素按a、b、c的次序依次进栈,且每个元素只允许进一次栈,列出
所有可能的出栈序列。
abc,acb,bca,bac,cba
3.栈S=(a,b,c),在栈中插入1个元素d,再从栈中删除一个元素,请写出S
的变化过程。
S=(a,b,c,d)-> S=(a,b,c)
4.队列Q=(a,b,c),在队列中插入1个元素d,再从队列中删除一个元素,请
写出Q的变化过程。
Q=(a,b,c,d)-> Q=(b,c,d)
5.
①哪个是根结点?A
②哪些是叶子结点? DEG
③哪个是结点C的双亲? A
④哪些是结点C的孩子? EF
⑤C的兄弟是哪个结点?B
⑥F的堂兄弟是哪个结点?D
⑦哪些结点是C的子结点?EFG
⑧树的深度是多少? 4
⑨树的度是多少?2
⑩请写出该树的先根遍历序列、中根序列、后根序列、层次遍历序列。
先序:ABDCEFG
中序:BDAECGF
后序:DBEGFCA
层序:ABCDEFG
6.分别用prim算法和kruskal算法构造下图的最小生成树。
√
7.若对序列(56,23,67,4,88,12,55)采用直接插入排序法和冒泡排序法进
行排序,请写出每一趟的结果。
直接插入排序法:
(23,56)67,4,88,12,55
(23,56,67)4,88,12,55
(4,23,56,67)88,12,55
(4,23,56,67,88)12,55
(4,12,23,56,67,88)55
(4,12,23,55,56,67,88)
冒泡排序法:
(23,56,4,67,12,55,88)
(23,4,56,12,55,67,88)
(4,23,12,55,56,67,88)
(4,12,23,55,56,67,88)
8.写出利用线性表求集合交集、并集和差集的算法
(1)求并集
1 初始化集合A、B、C
A=new List() ; B=new List() ; C=new List() ;
2 for(i=0;i<n;i++) A.insert(e); //输入集合A的数据元素
for(i=0;i<m;i++) B.insert(e); //输入集合B的数据元素
3 for(i=0;i<A.size();i++) //逐个取出集合A中的数据元素,放入到集合C
中
{ e=A.get(i); C.insert(e); }
4 个取出集合B中的元素,判断该元素是否已存在集合C中
4.1 该元素如果不在集合C中,则将其放入集合C中
4.2 该元素如果已在集合C中,则重复第4步
for(i=0;i<B.size();i++)
{
e=B.get(i);
if(A.contains(e)==false)
C.insert(e);
}
5 出集合C中的所有数据元素
C.toString();
(2)求交集
1、初始化集合A、B、C
A=new List() ; B=new List() ; C=new List() ;
2、for(i=0;i<n;i++) A.insert(e); //输入集合A的数据元素
for(i=0;i<m;i++) B.insert(e); //输入集合B的数据元素
3、逐个取出集合B中的元素,判断该元素是否已存在集合C中
3.1 该元素如果在集合A中,则将其放入集合C中
3.2 该元素如果不在集合A中,则重复第3步
for(i=0;i<B.size();i++)
{
e=B.get(i);
if(A.contains(e)==true)
C.insert(e);
}
4、//输出集合C中的所有数据元素
C.toString();
(3)求差集
1、初始化集合A、B、C
A=new List() ;
B=new List() ;
C=new List() ;
2、for(i=0;i<n;i++)
A.insert(e); //输入集合A的数据元素
for(i=0;i<m;i++)
B.insert(e); //输入集合B的数据元素
3、逐个取出集合A中的元素,判断该元素是否已存在集合B中
4.1 该元素如果不在集合B中,则将其放入集合C中
4.2 该元素如果已在集合B中,则重复第4步
for(i=0;i<A.size();i++)
{
e=A.get(i);
if(B.contains(e)==false)
C.insert(e);
}
4、//输出集合C中的所有数据元素
C.toString();
9.写出对字符串中的字符ASCII值进行运算来进行加密和解密的算法。
1.从键盘中输入并初始化字符串
Scanner sc=new Scanner(System.in);
StringBuffer s=new StringBuffer(sc.next());
2. 定义一个变量char ch;
定义一个变量int i;
3. 加密过程
对字符串中每个字符的ASCII值+1
for(i=0;i<s.length();i++)
{
ch=s.charAt(i);
ch=(char)((int)(ch)+1);
s.setCharAt(i,ch);
}
4.输出加密之后的结果
System.out.println("加密之后的字符串是:"+s);
5.解密过程
对加密串中每个字符的ASCII值执行-1操作
for(i=0;i<s.length();i++)
{
ch=s.charAt(i);
ch=(char)((int)(ch)-1);
s.setCharAt(i,ch);
}
6.输出加密之后的结果
System.out.println("解密之后的字符串是:"+s);
10.写出利用栈,将非负的十进制整数M转化为基于N的N进制数的算法。
1.定义变量
int m,n,e,i;
定义栈
SeqStack<Integer> s=new SeqStack<Integer>();
2.从键盘获取非负的十进制整数
System.out.println("请输入要转换的十进制正数:");
Scanner sc=new Scanner(System.in);
m=sc.nextInt();
3.获取转化为基于N的N进制数
System.out.println("请输入要转换的数制:");
n=sc.nextInt();
4.用M除N,得到商数和余数,将余数放入栈中;
当商数不为0,继续用商数除N,得到新的商数和余数,余数入栈。
当商数为0,循环结束。
while(m!=0)
{
e=m%n;
s.push(e);
m=m/n;
}
5.输出转化结果,若N为16时则按照如下规则输出结果
System.out.println("转化结果为:");
while(s.isEmpty()!=true)
{
i=s.pop();
if(n==16)
{
if(i==10) System.out.print('A'+"");
else if(i==11) System.out.print('B'+"");
else if(i==12) System.out.print('C'+"");
else if(i==13) System.out.print('D'+"");
else if(i==14) System.out.print('E'+"");
else if(i==15) System.out.print('F'+"");
else System.out.print(i+"");
}
else System.out.print(i+"");
}
System.out.println();
}
}
11.写出利用栈和队列,判断一个字符串是否是回文串的算法。
1.取出字符串中的一个字符,分别入栈和入队列。
boolean pal(String str)
{
for(i=0;i<str.length();i++)
{
ch=str.charAt(i);
S.push(ch); Q.add(ch);
}
2.重复第1步,直到字符串结束。
3.栈顶元素出栈,队头元素出队列,两者比较是否相等
3.1如果不相等,则该字符串不是回文串
3.2 如果相等,重复第3步,直到栈为空或者队列为空。
while(S.isEmpty()==false)
{
ch1=S.pop(); ch2=Q.poll();
if(ch1!=ch2) return false;
}
4.如果栈为空或者队列为空,则该字符串是回文串。
if(S.isEmpty()==true) return true;
12.写出求n!的递归算法。
intfun(int n){
if(n==1||n==0)
return 1;
else
return n*fun(n-1);
}
13.写出求2个正整数m*n的递归算法。
int mul(int m,int n){
if(m==0||n==0)return 0;
else if(m==1)return n;
else return n+mul(m-1,n);
}
14.写出递归算法求数组中最大值、最小值和平均值。
求数组中的最大值
1.定义递归函数
int max(int A[], int n)
2.判断n是否为1
2.1若n为1则返回结果A[0]跳转至3
2.2若n不为1则执行递归体并跳转至2
if(n==1) return A[0];
else
return (max(A,n-1)>A[n-1]?max(A,n-1):A[n-1]);
3.结束算法
求数组中的最小值
1.定义递归函数
int min(int A[], int n)
2.判断n是否为1
2.1若n为1则返回结果A[0]跳转至3
2.2若n不为1则执行递归体并跳转至2
if(n==1) return A[0];
else
return (min(A,n-1)<A[n-1]?min(A,n-1):A[n-1]);
3.结束算法
求数组平均值
1.定义递归函数
double avg(int A[],int n)
2.判断n是否为1
2.1若n为1则返回结果A[0]跳转至3
2.2若n不为1则执行递归体并跳转至2
if(n==1) return A[0];
else return ((A[n-1]+avg(A,n-1)*(n-1))/n);
3.结束算法
15.写出判断字符串是否是回文串的递归算法。
1.定义递归函数
boolean palindrome(StringBuffer s)
2.判断s的长度是否为0或为1
2.1若s的长度为0或为1则返回结果true并跳转至3
2.2若s的头尾不相等则返回false并跳转至3
2.3若s的头尾相等则判断原来的字符串去掉头尾字符之后剩余的部分并跳
转至2
if(s.length()==0 || s.length()==1 )
return true;
else
{
if(s.charAt(0)!=s.charAt(s.length()-1))
return false;
else return palindrome(new StringBuffer(s.substring(1,s.length()-1)));
}
3.结束算法输出字符串是否为回文串
16.写出实现字符串的逆转操作的递归算法。
1.定义递归函数
String reverseString(String s)
2.判断字符串是否为空串,或者字符串中只有一个字符,若是跳转至4
if(s.isEmpty()) return s;
3. 将字符串头尾字符交换;并交换字符串去掉头尾字符之后的字串后跳转至2。
return reverseString(s.substring(1))+s.charAt(0);
4.结束算法并输出s
三.问答题
1.什么是数据结构?
数据的结构指的是数据元素之间存在的关系,一个数据结构是由n(n≥0)个数据元素组成的有限集合,数据元素之间具有某种特定的关系。
数据结构概念包括三个方面:数据的逻辑结构、数据的存储结构和对数据的操作。
2.什么是逻辑结构?数据的逻辑结构分为几类?
数据的逻辑结构就是来表示数据之间的逻辑关系的。
逻辑结构有四种基本类型:集合结构、线性结构、树状结构和图状结构
3.什么是存储结构?数据的存储结构有哪些?
数据的逻辑结构在计算机中的表示。
主要分顺序存储结构和链式存储结构两种。
4.顺序存储结构和链式存储结构的优缺点?顺序表中的数据元素是如何存储
的??链表中的数据元素是如何存储的?在什么情况下使用顺序表和链表比较好?
链式存储结构:
(1)占用额外的空间以存储指针(浪费空间)
(2)存取某个元素速度慢
(3)插入元素和删除元素速度快
(4)没有空间限制,存储元素的个数无上限,基本只与存空间大小有关.
顺序存储结构:
(1)空间利用率高
(2)存取某个元素速度快
(3)插入元素和删除元素存在元素移动,速度慢,耗时
(4)有空间限制,当需要存取的元素个数可能多于顺序表的元素个数时,会出现"溢出"问题.当元素个数远少于预先分配的空间时,空间浪费巨大.
顺序存储占用物理地址连续的一块空间来存储元素,元素之间的关系就是相邻元素间的关系;链式存储占用的物理地址可连续可不连续,所以要找到某个元素的后继必须用指针来指示。
以查找为主用顺序表,以插入为主用链表。
5.什么是算法?算法的五大特性是什么?怎么描述算法?
1.有穷性,算法是执行时候运行的有穷性,程序只是一段实现算法的代码
2.确定性,算法对于特定的输入有特定的输出,程序提供了确定算法结果的
平台
3.可行性,算法需要考虑设计的可能,程序则具体是实现算法上的设计
4.输入,算法有输入,算法的输入依靠程序的平台提供
5.输出,算法的输出也靠代码的支持。
可以用伪代码,用自然语言也可以
描述算法的方法有多种,常用的有自然语言、结构化流程图、伪代码和PAD 图等,其中最普遍的是流程图。
6.栈是什么?请描述栈的操作特性,并画图说明。
栈是一种特殊的线性表,其插入和删除操作只允许在线性表的一段进行。
允许操作的一段称为栈顶,不允许操作的一段称为栈底。
操作特性为:后进先出
7.队列是什么?队列的操作特性?
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端进行删除操作,而在表的后端进行插入操作。
先进先出
8.请阐述栈和队列的异同点。
栈是限定只能在表的一端进行插入和删除操作的线性表。
队列是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。
从"数据结构"的角度看,它们都是线性结构,即数据元素之间的关系相同。
但它们是完全不同的数据类型。
除了它们各自的基本操作集不同外,主要区别是对插入和删除操作的"限定"。
栈和队列是在程序设计中被广泛使用的两种线性数据结构,它们的特点在于基本操作的特殊性,栈必须按"后进先出"的规则进行操作,而队列必须按"先进先出"的规则进行操作。
和线性表相比,它们的插入和删除操作受更多的约束和限定,故又称为限定性的线性表结构。
9.什么是递归?递归的两个基本要素是什么?请阐述递归程序和非递归程序
的优缺点。
序和非递归程序的优缺点。
递归:
就是一个函数直接或间接的调用函数本身,这就是递归。
递归的两个基本要素:
递归体和递归出口。
递归程序和非递归程序优缺点
递归程序:
1.结构清晰过程简洁明了,程序体较小
2.堆栈占用存较大,递归算法的运行效率较低。
非递归:
1.过程更加有条理
2.程序体较大
10.请阐述线性结构和树状结构的异同点。
同:都是逻辑结构
异:线性结构是一对一的结构,是最简单的结构.它只有一个没有前驱、只有后继的结点,叫着首结点;只有一个没有后继、只有前驱的结点,叫着尾结点;其余的结点都只有一个直接前驱和一个直接后继.
树形结构是一对多的结构,是比较复杂的非线性结构.它只有一个没有前驱、只有后继的结点,叫着根结点;可有多个没有后继、只有前驱的结点,叫着
叶子结点;其余的结点都只有一个直接前驱和多个直接后继.
11.二叉树的五种形态?
1.0个结点空二叉树
2.1个结点,根结点
3.由根结点和左子树组成,根的右子树为空
4.由根结点和右子树组成,根的左子树为空
5.由根结点,左子树右子树组成
12.简述顺序查找算法和折半查找算法的优缺点和各自的适用围。
顺序查找的效率很低,但是对于待查的结构没有任何要求,而且算法非常简单,当待查表中的记录个数较少时,采用顺序查找较好.
折半查找法的平均查找长度小,查找速度快,但是它要求表中的记录是有序的,且只能用于顺序存储结构。
若表中的记录经常变化,为保持表的有序性,需要不断进行调整,这在一定程度上要降低查找效率。
因此,对于不常变动的有序表,采用折半查找是比较理想的。