数据结构习题集和答案(2014 05 29) 2

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

head(tail(head(tail(A))))。
(√)
第 6 章 树和二叉树
1、填空题
1.一棵 62 个叶结点的完全二叉树,最多有__62*2=124______个结点。 2.若规定仅有根的二叉树的高度为 1,那么高为 h 的完全二叉树最多有
____2^h-1___个结点,最少有__2^(h-1)_个结点。
1.具有 N 个结点的完全二叉树的深度是__B___。
(A)⌊ log2N ⌋ (C) ⌊ log2(N) ⌋
(B) ⌊ log2N ⌋ +1 (D) ⌊ log2N ⌋ -1
8
2.设二叉树的树根为第一层,则第 i 层上至多有__C_____结点。
(A)1
(B)2
(C)2i-1
(D)2i-1
3、判断题
1
while(i<n) {
i=i*10; k=k+1; } } 时间复杂度为____O(log n)___________。
第 2 章 线性表
1、填空题
1. 线性表按照存储结构不同主要有两种实现方式,一种是__顺序_表,另 一种是___链___表。
2.顺序表采用__随机___访问机制对数据元素进行访问。
素需要移动的元素个数为( B )。(1≤i≤n+1)
A.n-i B.n-i+1
C. i
D.n-i-1
3、判断题
1.线性表中每一个元素都有一个前驱和一个后继。( × )
4、程序设计题
1、单链表的结点结构定义如下: struct LinkNode {
LinkNode *next; int data; }; 请根据述函数的功能写程序。 void Insert(LinkNode *h,LinkNode *s) {//h 指向链表的头结点(即使链表中没有元素,头结点也存在。) //链表中元素已经递增有序 //函数功能为将结点 s 插入到链表 h 中。插入后链表仍然保持递增的顺序 LinkNode *p,*q;//q 指向 p 的前驱 q=h; p=h->next; while(p) {
第 1 章 绪论
1、填空题
1.常见的数据结构有_线性__结构,__树形___结构,__图形__结构等三种。 2.常见的存储结构有__顺序存储___结构,__链式存储____结构等两种。 3.数据的基本单位是_数据元素__,它在计算机中是作为一个整体来处理 的。 4.数据结构中的结构是指数据间的逻辑关系,常见的结构可分为两大类, __线性结构____和__非线性结构___。
3、判断题
1.栈的特点是先进先出。( × )
2.可以在队列的任意位置插入元素。( ×)
3.递归程序化非递归程序必须用到栈。( × )
4.如果进栈的序列为(1,2,3,4),则(4,2,3,1)不可能是出栈序列。 (√)
5.在用顺序表表示的循环队列中,可用标志位来区分队空或队满的条件。 (√)
6
第4章 串
}
2、设顺序表 L 是一个递增有序表,试写一算法,将 x 插入 L 中,并使 L
仍是一个有序表。顺序表的结构定义如下:
#define ListSize 100
// 假定表空间大小为 100
struct SqList {
int elem[ListSize]; // 数组 elem 用于存放表中的数据
int length;
一种是 列 优先存储。
2.设广义表 L=((),(),(()))。则 head(L)是 () ;
tail(L)是 ((),(())) ;L 的长度是 3
;L 的深度是
3。
3.设广义表 L=((a),(b),((c))) 则 head(L)是__(a)__;
tail(L)是_((b),((c)))___。
2、选择题
1.在 C 语言中,如果有数组定义 int A[8][9];假定每个整型数据占 2 字节,则数组元素 A[4][4]的地址是( A )。
A. A+80 B. A+76 C.A+82 D.以上都不对
2.广义表 A=(a,b,(c,d),(e,(f,g))),则下面式子的值为( D ); Head(Tail(Head(Tail(Tail(A)))))
L.elem[ i ]=L.elem[ i-1 ] ; // 比较并移动元素
4
L.elem[ i ] =x; //插入 x
L.length++; //表长增 1
}
///////
3、单链表中结点的结构如下所示: typedef struct node { int data;
struct node *next; }node; 请设计满足下述功能的函数。 要求: 建立带头结点的单链表 H,要求函数从屏幕上读入 m 个整数,每读 入一个,便生成相应的结点,并且把它插入到链表 H 的尾部。函数形式为 void CreateLinkList(node *H)。
if(p->data>s->data)
3
{//寻找到插入点位置,插入 s q->next=s; s->next=p; return;
} else {
q=p; (1 分) p=p->next; (1 分) } } //当表中没有比 s 大的结点时,插入到表尾 s->next=q->next; (2 分) q->next=s; (2 分)
}
5
第 3 章 栈和队列
1、填空题
1.栈和队列在本质上都是___线性表__________。 2.栈的操作特点是__后进先出_。队列的操作特点是_先进先出__。
2、选择题
1.消除递归不一定需要使用栈,此说法___A____。
A. 正确
B. 错误
2.对于栈,输入序列为(1,2,3,4),不可能得到的输出序列有__D_____。 (A)(1,2,3,4) (B)(4,3,2,1) (C)(1,3,4,2) (D)(3,1,2,4) 3.用单循环链表表示队列,正确的说法是 B 。 (A)可设一个头指针使入队、出队都方便; (B)可设一个尾指针使入队、出队都方便; (C)必须设头尾指针才能使入队、出队都方便; (D)无论如何,只可能使入队方便。
(1)什么是哈夫曼树?(3 分) (2)根据题目所给频率值,画出相应的哈夫曼树。(11 分) (3)给出各个字符对应的哈夫曼编码。(6 分) (4)该段文字经过哈夫曼编码后,长度是多少。(4 分) 参考答案如下: (1)答案为:带权路径长度最小的二叉树称为哈夫曼树。(3 分) (2)根据题目所给频率值,画出相应的哈夫曼树。(11 分,每个结点 1 分)
1. 将两个各有 n 个元素的有序表归并成一个有序表,其最少的比较次数
是A。
(A)n
(B)2n-1
(C)2n
(D)n-1
2. 在单链表中,如果在结点 p 之后插入一个新结点 s,其操作为 A 。
(A)s->next=p->next; p->next=s;
(B)p->next=s; s->next=p->next;
2、应用题
1、给出以下算法的时间复杂度.
void fun(int n) {
int i=1,k=100; while(i<n) {
k=k+1; i=i+2; } } 时间复杂度为____O(n)_____。 2、给出以下算法的时间复杂度.
void fun2(int n) {
int i=1,k=100;
3.设只包含有根结点的二叉树的高度为 0,则高度为 k 的二叉树的最大结 点数为___2^(k+1)-1____________,最小结点数为___k+1______。
4.设仅包含根结点的二叉树的高度为 1,则高度为 k 的二叉树的最大结点 数为___2^k-1___,最小结点数为___k___。
2、选择题
参考程序: void CreateList(node *H) {//H 指向头指针
int m,temp; cout<<"输入数据的个数:";
cin>>m;// int i=1; node *tail; H->next=NULL; tail=H; while(i<=m) {
cout<<"please input your number:"<<endl; cin>>temp; node *t=new node ; t->data=temp; t->next=tail->next; tail->next=t; tail=t; i++;
9
0
100
1
45 0
0 55
1
1
22
23
27
0 28
1
e
d
f 12
0 16
1
c
7
9
a
b
(3)给出各个字符对应的哈夫曼编码。(6 分) a:1110 b:1111 c:110 d:00 e:01 f:10 (4)该段文字经过哈夫曼编码后,长度是多少。(4 分)
(7+9)*4+12*3+(22+23+27)*2=244 或者 100+45+55+28+16=244
// 当前的表长度
};
//以上为顺序表的结构
//函数头定义如下
void InsertIncreaseList( SqList &L ,int x )
{ int i;
if ( L.length>=ListSize) cout<<”OVERFLOW”; //判断是否溢出
for ( i=L.length ; i>0 && L.elem[ i-1 ] > x ; i--)
A.(g)
B.(d)
C.c
D.d
7
3、判断题
1.在 C 语言中,多维数组的存储采取的是行优先的方式。( √ )
2.广义表在本质上也是线性表。( × )
3.可以用三元组存储法来压缩存储稀疏矩阵。( √)
4. 已 知 广 义 表 A=((a,b,c),(d,e,f)), 从 A 中 取 出 原 子 e 的 运 算 是
1.二叉树的左右子树次序是严格的,不能够任意改变。( √ )
2. 若 根 为 第 一 层 , 则 深 度 为 k 的 满 二 叉 树 的 结 点 为 2^k-1 。 ( √)
3.二叉树的三叉链表存储结构可以方便的访问到双亲结点。 (√ )
4、应用题
1.在一段文字中,共出现 a、b、c、d、e、f 六种字符,每种字符出现的频 率分别为 7,9,12,22,23,27。请回答下列问题:
1、选择题
1. 设有两个串 p 和 q,求 q 在 p 中首次出现的位置的运算称作( B )
A.连接
B.模式匹配 C.求子串
D.求串长
2、判断题
1.空串和空格串是同一个概念,二者没有区别。( × )
第 5 章 数组和广义表
1、填空题
1.二维数组在内存中存储可以有两种存储方式,一种是___行__优先存储,
2. 设一棵二叉树的先序遍历序列为 abcde,中序遍历序列为 badce,请画 出对应的二叉树,并写出对应后序遍历序列。(15 分)
参考答案如下:
(1)画出二叉树(10 分) 错一个结点扣 2 分。
a
b
c
d
e
10
(2)后序遍历序列为:bdeca
(5 分)
3. 通信报文中出现的字符 A、B、C、D、E,在报文中出现的频率分别为 0.23、0.2、0.32、0.12、0.13,分别给出相应字符的哈夫曼编码(要 求画出哈夫曼树,并且把权值小的结点放在左边)。(共 14 分)
2
(C)s->next=p; p->next=s->next; (D)p->next=s; s->next=p;
Biblioteka Baidu
3.若长度为 n 的线性表采用顺序存储结构,在其第 i 个位置删除一个元素
的算法的平均时间复杂度为( C )。(1≤i≤n)
A.O(0)
B.O(1)
C.O(n)
D.O(n2)
4. 若长度为 n 的线性表采用顺序存储结构,在其第 i 个位置插入一个新元
对应的二叉树为:(7 分,每个结点 1 分)
11
E
H
3.若在单链表结点 p 的后面插入一个新的结点 s,则其操作序列为:
①____s->next=p->next_____________;
②____p->next=s___________________;
4.在单向链表中,若要删除某个结点 p,一般要找到__p 的前趋__结点,才 能实现该操作。
2、选择题
参考答案如下:
为处理方便,关键字都乘以 100,为{23,20,32,12,13} 构造哈夫曼树为:(9 分,每个结点 1 分)
0
100
1
43
0
1
57
0
1
20
23
25
32
B
A
0
C 1
12
13
D
E
所以编码为:A:01 B:00 C:11 D:100 E:101 (5 分,每个 编码 1 分)
4. 某二叉树结点的中序序列为 H,B,C,D,E,F,G,后序序列为 B,D, C,H,F,G,E,请据此画出该二叉树,再给该树加上中序线索。(共 15 分)
相关文档
最新文档