给出如图所示的无向图G的邻接矩阵和邻接表两种存储结构.
(2)解答下面的问题(6分)
(1) 求网的最小生成树有哪些算法?各适用何种情况?为什么?
(2) 由以下的网络邻接矩阵,画出一棵最小生成树
(3)已知一棵非空二叉树,其按中根和后根遍历的结果分别为:
中根:CGBAHEDJFI 后根:GBCHEJIFDA
试将这样的二叉树构造出来。若已知先根和后根的遍历结果,能否构造出这棵二叉树,为什么? 5分
(4)一项工程由P1、P2、…P6六项子工程组成, 这些工程之间有下列关系: P1 (5)假定用于通信的电文由8个字母A,B,C,D,E,F,G,H组成,各字母在电文中出现的概率为5%,25%,4%,7%,9%,12%,30%,8%,试为这8个字母设计哈夫曼编码。(7分) 五、 (1) 读程序,分析其时间复杂度: 4分 此程序的时间复杂度是____________ 。 (2)以下程序为求二叉树深度的递归算法,请填空完善之 6分 (3)已知N元整型数组a 存放N个学生的成绩,已按由大到小排序,以下算法是用折半查找方法统计成绩大于或等于x分的学生人数,请填空完善之。6分 (4)简述以下算法的功能:4分 (2) 用普里姆算法构造出如图所示的图G的一棵最小生成树. 6分 (3)已知序列{17,18,60,40,7,32,73,65,85},请给出采用起泡排序法对该序列作升序排序时的每一趟的结果。 (6分) (4)输入下列整数序列,画出建立的二叉排序树,最后分别图示将其中的50,86删除后的二叉排序树(7分)。 (5)一棵完全二叉树共有21个结点,现顺序存放在一个向量中,向量的下标正好为结点的序号,请问有序号为12的双亲结点存在吗?为什么?5分 五、 (1) 读程序,分析时间复杂度 4分 此程序的时间复杂度是_________ 。 (2)以下程序的功能是实现带附加头结点的单链表数据结点逆序连接,请填空完善之 6分 (3)二叉排序树的结点类型如下:6分 (4)阅读下述程序,指出其输出结果:4分 四、画图/计算/证明 (30分) 2.一项工程由P1、P2、…P6六项子工程组成, 这些工程之间有下列关系: P1 五. 程序填空题 (20分,每个函数5分) 3.设顺序表la的数据结构定义如下: 试将下面删除顺序表la中所有值为x的数据元素的算法补充完整。 四、 画图/计算/证明/应用题 (30分) (2)解答下面的问题(6分) (3)已知一棵非空二叉树,其按中根和后根遍历的结果分别为: (4)对于如图所示的事件结点网络,求出各活动可能的最早开始时间和允许的最晚完成时间,并问哪些活动是关键活动? (6分) (5)已知某字符串S共有8种字符,各种字符分别出现2次、1次、4次、5次、7次、3次、4次和9次,对该字符串用{0,1}进行前缀编码,问该字符串的编码至少有多少位?(7分) 五、 程序填空题 (20分) 此程序的时间复杂度是 _________ 。 (2)以下程序为求二叉树深度的递归算法,请填空完善之 6分 四、画图/计算/证明 (30分) 2.n个结点的m叉树转化为二叉树所需存储资源比未转化前用定长结点存储节省多少?(设链域占两个单元,数据域占一个单元)(5分) 四、画图/计算/证明 (30分) 2.n个结点的m叉树转化为二叉树所需存储资源比未转化前用定长结点存储节省多少?(设链域占两个单元,数据域占一个单元)(5分)
m = 91;
n = 100;
while (n > 0)
if (m > 0)
{
m = m - 10;
n = n - 1;
}
else
m = m + 1;
typedef struct node
{
char data;
struct node lchild, rchild;
} *bitree;
int depth(bitree bt) /* bt为根结点的指针*/
{
int hl, hr;
if (br == NULL)
return (____________);
hl = depth(bt->lchild);
hr = depth(bt->rchild);
if (____________)
____________________
return(hr + 1);
}
#define N /*学生人数*/
int uprx(int a[N], int x) /*函数返回大于或等于x分的学生人数 */
{
int head, mid, rear;
do
{
mid = (head + rear) / 2;
if (x <= a[mid])
____________________
else________________;
} while (____________);
if (a[head] < x)
return head - 1;
return head;
}
void BB(LNode *s, LNode *q)
{
p = s;
while (p->next != q)
p = p->next;
p->next = s;
}
void AA(LNode *pa, LNode *pb)
{ // pa和pb分别指向单循环链表中的两个结点
BB(pa, pb);
BB(pb, pa);
}
LZH 组二
(86,50,78,59,90,64,55,23,100,40,80,45)
for (i = 0; i < m; i++)
for (j = 0; j < t; j++)
c[i][j] = 0;
for (i = 0; i < m; i++)
for (j = 0; j < t; j++)
for (k = 0; k < n; k++)
c[i][j] = c[i][j] + a[i][k] * b[k][j];
void reverse(pointer h)
{
pointer p, q;
p = h->next;
h->next = NULL;
while (__________)
{
q = p;
p = p->next;
q->next = h->next;
h->next = _______________________;
}
}
typedef struct node
{
datatype data;
struct node *lchild, *rchild;
} bitreptr;
请在下面算法划线处填上适当内容,以完成在二叉排序树中查找键值为k的结点。
bitreptr *
search(t, k) /*在二叉排序树上查找键值k的结点 */
/*成功时返回指向该结点的指针,否则返回空指针*/
{
bitreptr *t;
datatype k;
if (t = = NULL)
returen NULL;
else if (t->data = = k)
return t;
else if (t->data > k)
________;
else if (t->data < k)
_____________;
} /*search*/
void g(int **);
main()
{
int line[100], i;
int *p = line;
for (i = 0; i < 100; i++)
{
*p = i;
g(&p);
}
for (i = 0; i < 100; i++)
cout << line[i];
}
void g(int **p)
{
(**p)++;
(*p)++;
}
LZH 组三
1. 证明题(5分)
试证明有n0个叶子的哈夫曼树共有2n0-1个结点。
1. 构造出这颗二叉树;
2. 画出这颗二叉树中序线索化后的结构
E={,,,
(1) 请画出该图,并写出邻接矩阵
(2) 根据邻接矩阵,分别给出从顶点a出发的深度优先和广度优先遍历序列
(3) 画出由此得到的深度优先和广度优先生成树(或森林)
selectsort(head)
{
p = head;
while (p ___________)
{
q = p;
r = ___________;
while (___________)
{
if (q->next->data > r->data)
q = r;
r = ___________;
}
tmp = q->data;
q->data = p->data;
p->data = tmp;
p = ___________;
}
}
(1) 图的顶点号从0开始计;
(2) indegree是有n个分量的一维数组,放顶点的入度;
(3) 函数crein用于计算顶点的入度;
(4) 有三个函数push(data)、pop()、check(),它们的含义为数据data进栈、退栈和测试栈是否为空(不空返回1,否则返回0)。#include
typedef struct
{
Datatype list[Maxnum];
int num;
} SeqList;
void DeleteSeqList(SeqList *la, Datatype x)
{
int j, k;
for (j = 1; j <= la->num; j++)
{
if ()
{
for (k = j; k < la->num; k++)
;
la->num--;
j--;
}
}
}
LZH 组四
(1) (6分)
试说明是否存在这样的二叉树,可以实现后序线索树进行后序遍历时不使用栈?对前序线索二叉树进行前序遍历时,什么样的二叉树可不使用栈?
(1) 求网的最小生成树有哪些算法?各适用何种情况?为什么?
(2) 由以下的网络邻接矩阵,画出一棵最小生成树
中根:CGBAHEDJFI 后根:GBCHEJIFDA
试将这样的二叉树构造出来。若已知先根和后根的遍历结果,能否构造出这棵二叉树,为什么? 5分
(1) 读程序,分析其时间复杂度: 4分m = 91;
n = 100;
while (n > 0)
if (m > 0)
{
m = m - 10;
n = n - 1;
}
else
m = m + 1;
typedef struct node
{
char data;
struct node lchild, rchild;
} *bitree;
int depth(bitree bt) /* bt为根结点的指针*/
{
int hl, hr;
if (br == NULL)
return (_________);
hl = depth(bt->lchild);
hr = depth(bt->rchild);
if (_________)
return (hr + 1);
}
LZH 组五
1. 如果二叉树有n个结点,试问:当执行中序遍历的递归程序时,在最坏情况下为处理递归调用所设的单元至少要有多少个才行?(5分)
1. 构造出这颗二叉树;
2. 画出这颗二叉树中序线索化后的结构
1)A中非零元素的行下标与列下标的关系;
2)给出A中非零元素aij的下标(i,j)与B中的下标R的关系;
3)假定矩阵中每个元素占一个存储单元,且B的起始地址为A0,给出利用aij的下标(i,j)定位在B中的位置公式。
LZH 组七
1. 试说明一棵二叉树进行前序、中序、后序遍历,其叶结点的相对次序是否会发生改变?为什么?(5分)
1. 构造出这颗二叉树;
2. 画出这颗二叉树中序线索化后的结构
// ToDo
## 四、LB组
### LB组一
### LB组二
### LB组三
### LB组四
### LB组五
### LB组六
### LB组七
### LB组八