830数据结构真题答案有错Word下载.docx
- 文档编号:21141123
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:27
- 大小:22.44KB
830数据结构真题答案有错Word下载.docx
《830数据结构真题答案有错Word下载.docx》由会员分享,可在线阅读,更多相关《830数据结构真题答案有错Word下载.docx(27页珍藏版)》请在冰豆网上搜索。
abcdef拓扑序列2:
adbcef
.二叉树图如下:
.略。
已经不纳入考纲
.哈夫曼编码问题
编码:
3:
0000
20:
10
10:
0001
22:
11
18:
001
37:
01
6.二叉排序树问题
比根节点小的往左子树插,大的往右子树插。
图如下:
删除50有两种做法:
《数据结构》中的解析
这里我用第二种做法:
五.算法设计题
&
.算法填空
(L.elem[i-1])L.length-1++p*pL.length-1;
2.设计算法:
输入n个元素的值创建带头结点的单链线性表L。
voidCreateList_L(LinkList&
L,intn){
L=(LinkList)malloc(sizeof(LNode));
L->
next=NULL;
for(inti=n;
i>
0;
i--){
p=(LinkList)malloc(sizeof(Lnode));
scanf(&
p->
data);
next=L->
next;
next=p;
}
3.弗洛伊德算法或者迪杰斯特拉算法都可以解决
采用弗洛伊德算法
(1)采用邻接矩阵,邻接矩阵的值代表乘车费用。
(2)这里算法不详细给出,《数据结构》书中有算法,这两个算法很重要。
一
定要自己完全理解。
011参考答案
一.选择题
.C2.A3.C4.D5.B6.D7.C
.C9.D10.C11.A12.D13.D14.A15.A
二.填空题
.线性结构非线性结构
.(8,9,4,3,6,2,12,13,19,18)
.二叉树小顶堆
.89
.存入元素移动指针(严蔚敏书中入栈是这么操作,实际看自己怎么规定)
.队列中仅有一个元素(或删除队列变成空)
.n-1
.k2
.b
0.n²
三、判断题
0.F
四.简答题
.
第一趟结果:
13,27,51,55,10,49,38,65,97,75
元素移动五次。
.邻接矩阵图如下:
邻接表图如下:
拓扑序列:
abgcdfe
.关键活动和关键路径
关键路径:
从起点到终点的最长路径长度,这个最长的路径就叫做关键路径。
关键活动:
关键路径上的所有活动都是关键活动。
a1-a4-a8-a11关键路径:
a-b-e-h-k
.这道题很重要。
《数据结构》上有解析,请认真理解好。
(
.哈夫曼树问题
1)注意:
规定权值较小的结点为左子树
3)需要总bit数:
17*2+12*3+5*4+28*2+35*2+3*4=228
需要字节数:
228/8=28.5=29需要29个字节。
(4)
翻译后的正文是:
BCBAE
.哈希平均查找长度问题
五、算法填空
.
(1)p->
next->
data<
=mink
(2)p->
next==null||p->
data>
=maxk(3)p->
next=q;
.(4)v<
G.vexnum(5)visit(v)(6)!
QueueEmpty(Q)
(7)DeQueue(Q,u)(8)EnQueue(Q,w)
六、编写算法
1.后序遍历二叉树
voidPostOrderTraversal(BinTreeNode*BT)
{
if(BT!
=NULL){
PostOrderTraversal(BT->
Left);
Right);
printf("
%c"
BT->
TData);
/
.这道题也可以参考《高分笔记》
/邻接矩阵
typedefstruct_graph{
charvexs[MAX];
//顶点集合
intvexnum;
//顶点数
intedgnum;
//边数
intmatrix[MAX][MAX];
//邻接矩阵
Graph,*PGraph;
/边的结构体
typedefstruct_EdgeData{
charstart;
//边的起点
charend;
//边的终点
intweight;
//边的权重
}EData
voidkruskal(GraphG)
inti,m,n,p1,p2;
intlength;
intindex=0;
//rets数组的索引
intvends[MAX]={0};
//用于保存"
已有最小生成树"
中每个顶点在该最小树中
的终
点。
EDatarets[MAX];
//结果数组,保存kruskal最小生成树的边
EData*edges;
//图对应的所有边
/获取"
图中所有的边"
edges=get_edges(G);
/将边按照"
权"
的大小进行排序(从小到大)
sorted_edges(edges,G.edgnum);
for(i=0;
i<
G.edgnum;
i++)
p1=get_position(G,edges[i].start);
//获取第i条边的"
起点"
的序号
p2=get_position(G,edges[i].end);
终点"
m=get_end(vends,p1);
//获取p1在"
已有的最小生成树"
中的
终点
n=get_end(vends,p2);
//获取p2在"
/如果m!
=n,意味着"
边i"
与"
已经添加到最小生成树中的顶点"
没有形成环路
if(m!
=n)
vends[m]=n;
//设置m在"
终点为n
rets[index++]=edges[i];
//保存结果
free(edges)
012参考答案
一、选择题
1.A2.C3.C4.B5.A6.C7.A8.D9.C10.B11.B12.C13.D14.B15.D
13解释:
判断对满的条件(Q.rear+1)%MAXQSIZE==Q.front,可以看出跟队列
大小,头尾指针有关,所以D对。
二、填空题
.7
.线性和非线性结构
.能否将关键字均匀影射到哈希空间上有无好的解决冲突的方法
.插入和删除首结点时不必对头指针进行特殊处理
.2k-12k-1
.2e
.p->
lchild==NULL&
rchild==NULL
0.021,235,346,256,558
不一定,要是有两条关键路径,有一段是重合的,那么提高重合这一段的活动速
度是可以缩短工期的。
否则是,是不能缩短整个工期的。
.F先序和后序是不能确定一颗树的
0.F需要1+2+……+n=(1+n)n/2个空间
四、简答题
.//快速排序,两边同时遍历,当遇到小于枢轴的数就往左边放,大于枢轴的就
往右边放,一趟排序下来,比枢轴小的都在枢轴左边,比枢轴大的都在枢轴右边
5,57,45,39,12,98,86,35
5,57,45,39,12,98,86,35
5,57,45,39,12,98,86,98
5,57,45,39,12,65,86,98
.删除线性表L中大于X小于Y的节点
3.按边的权值排序:
3,5,12,14,15,17,25
依次选取,如果不构成回路,则加入;
否则,就跳过该边。
最小生成树如下:
.深度优先搜索遍历:
V0V1V4V2V3V5V6
广度优先遍历:
V0V1V2V3V4V5V6
.弗洛伊德算法,请认真理解。
.
.(QueuePtr)malloc(sizeof(QNode))NULLQ.rear->
nextp
.!
StackEmpty()||p!
=NULLPush(S,p)Pop(S,p)p->
rchild
.voidpreOrderTraverse(BiTreeT,int*count){
if(T){//T不空
/如果为叶子节点,就加1
if(T->
T->
rchild==NULL){
*
count++;
preOrderTraverse(T->
lchild,count);
rchild,count);
2.设计一个图的数组表示存储结构,并编写采用数组表示法构造一个无向网的
算法
#
defineMAX_VERTEX_NUM20
typedefstructArcCell{
VRTypeadj;
InfoType*info;
ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedefstruct{
VertexTypevexs[MAX_VERTEX_NUM];
AdjMatrixarcs;
intvexnum,arcnum;
GraphKindkind;
MGraph;
013参考答案
.C2.D3.C4.C5.A6.C7.C8.C9.A10.A11.A
2.C13.D14.A15.C
十字链表三元组
.一对一一对多
.前驱结点后继结点
.n2+1
.60
解释:
三元组存储行标,列表,非零元。
一个需要六个字节,
0*6=60
.L->
next=L
.44
0.15,40,95,20,50,70
三.判断题
.F相当于树的先序遍历
1.从顶点0到其余各节点的最短路径
.计算节点值为0的节点个数。
.这里要区别克鲁斯卡尔跟普利姆算法的区别
普利姆算法:
每次选取从这个节点到其他未被选择节点的最短边加入。
克鲁斯卡尔:
给边排好序,每次选取最短的边,如果不构成回路就加入
先序序列:
ABDGCEHIF中序遍历:
DGBAHEICF
后序遍历:
GDBHIEFCA
(1)采用头插法,看清楚题目
(2)比较4次
(3)(1*5+2*2+3+4)/9=1.78平均查找长度为1.78
.p->
next!
=NULLp=p->
nextp->
next=q->
nextfree(q)
.j<
ni>
ja[i]=a[i+1]a[i+1]=tempflag==0
1.设计在顺序有序表中实现折半查找的算法。
(10分)
.设计AOV-网拓扑排序的算法(12分)
数据结构》第七章有向无环图及其应用拓扑排序
《
014参考答案
1.C2.A3.A4.B5.D6.D7.C8.C9.C10.A11.A12.D13.B14.A15.A
.一对多多对多
.将矩阵第i行全部置为零
.队尾对头先进先出
.能否将关键字均匀影射到哈希空间上有无好的解决冲突的方法
.关键路径:
从源点到汇点的路径长度最长的路径叫关键路径。
a1a5a6a8a7a10
.在排好序的线性表中,删除值为X的所有元素。
.sizeof(ElemType)!
S.baseS.stacksizeetop+1
.v<
G.vexnumDeQueueEmpty(Q,u)!
Visited[w]TRUEEnQueue(Q,w)
.设计将两个有序链表合并为一个有序链表的算法.假设有序链表的元素按照非递减排
列.(10分)
.给定带权有向图G和源点V0,设计V0到其余顶点的最短路径.(15分)
015参考答案
1.D2.C3.C4.B5.C6.A7.A8.B9.A10.C11.A12.C13.B14.A15.A
、从任意节点出发都能访问到整个链表
、集合
、520
、O(n²
)
、2h-1
图形结构
、m⌈m/2⌉
、s->
next=p->
p->
next=s;
表头没有前驱,表尾没有后继
不唯一
.树的非递归中序遍历
.快速排序:
两边同时遍历,大于枢轴的交换到右边,小于的交换到左边
此处不给该题的具体实现,解题过程参照下图:
1)
2)拓扑排序:
V1v3v2v6v5v4
3)迪杰斯特拉算法问题:
构造哈夫曼树如上图,编码
a:
11b:
100c:
001d:
0001e:
101f:
01g:
0000
、①!
P②e③NULL④Q.rear->
next⑤p
、v<
G.vexnum!
visited[v]TRUEw>
=0
DFS(G,w)
1.voidProcess(LinkList&
L,intx,inty){//L线性表的元素递增有
序排列
LinkListp=L,q,s;
if((p->
=NULL)&
(x<
=y))
while(p->
=NULL&
=x)p=p->
if(p->
next==NULL||p->
=y)returnERROR;
q=p->
while(q->
q->
y)
{s=q;
q=q->
free(s);
}
2.思路:
利用图的广度优先遍历,那么最后一个遍历的节点一定离顶点最远。
intMaxdist(AGragh*G,intv){
ArcNode*p;
intQu[MAXV];
//循环队列
intfront=0,rear=0;
//队列的头、尾指针
intvisited[MAXV];
//初始化访问数组
inti,j,k;
for(i=0;
i<
G->
n;
i++)
visited[i]=1;
//初始化访问标志数组
rear++;
Qu[rear]=v;
//顶点v进队
visited[v]=1;
//顶点v已访问
while(front!
=rear)
front=(front+1)%MAXV;
k=Qu[front];
//顶点k出队
p=G->
adjlist[k].firstarc;
//找到第一个邻节点
while(p!
=NULL)//所有未访问过的相邻点进队
j=p->
adjvex;
//邻接点为顶点j
if(visited[j]==0)//若j未访问过
visited[j]==1;
rear=(rear+1)%MAXV;
//进队
Qu[rear]=j;
p=p->
nextarc;
//找下一个邻接点
returnk;
016参考答案
1.B2.B3.A4.C5.A6.A7.A8.B9.C10.D11.D12.A13.D14.C15.A
.n-i
.(SQ.front+1)%(m+1)
.n+1
.O(log2n)O(nlog2n)
.d
.1、4、2、3
1.
(1)
(2)
2.
3.平衡二叉树旋转的问题
4.
(3)深度优先搜索序列:
a,b,c,d,e,f
深度优先生成树:
5.
(1)希尔排序
(2)出始堆(题目要求升序,因此要构建大顶堆)
第一趟排序后的结果:
推荐阅读以便理解堆排:
五.算法填空
next=LL=p;
.T->
lchild
lchildp->
rchild!
=Tp=p->
rchildp=p->
TT->
lchildT->
ii
(1)参照快速排序思想。
i,j分别从前后遍历,要是a[i]>
K将其往后仍,a[j]<
K则将其往前
扔
(2)哈夫曼算法(构造哈夫曼树and求各个字符的哈夫曼编码)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 830 数据结构 答案 有错