1、abcdef 拓扑序列 2:adbcef.二叉树图如下:.略。已经不纳入考纲.哈夫曼编码问题编码: 3: 000020: 1010: 000122: 1118: 00137: 016.二叉排序树问题比根节点小的往左子树插,大的往右子树插。图如下:删除 50有两种做法:数据结构中的解析这里我用第二种做法:五.算法设计题&.算法填空(L.elemi-1) L.length-1 +p *p L.length-1;2. 设计算法: 输入 n 个元素的值 创建带头结点的单链线性表 L。void CreateList_L(LinkList &L,int n)L=(LinkList)malloc(sizeo
2、f(LNode);L-next=NULL;for(int i=n;i0;i-)p=(LinkList)malloc(sizeof(Lnode);scanf(&p-data);next=L-next;next=p;3.弗洛伊德算法 或者 迪杰斯特拉算法都可以解决采用弗洛伊德算法(1) 采用邻接矩阵,邻接矩阵的值代表乘车费用。(2) 这里算法不详细给出,数据结构书中有算法,这两个算法很重要。一定要自己完全理解。011参考答案一选择题.C 2.A 3.C 4.D 5.B 6.D 7.C.C 9.D 10.C 11.A 12. D 13.D 14.A 15.A二填空题. 线性结构 非线性结构. (8,
3、9,4,3,6,2,12,13,19,18). 二叉树 小顶堆.89.存入元素 移动指针 (严蔚敏书中入栈是这么操作,实际看自己怎么规定). 队列中仅有一个元素(或删除队列变成空).n-1.k2.b0.n三、判断题0.F四简答题第一趟结果: 13,27,51,55,10,49,38,65,97,75元素移动五次。.邻接矩阵图如下:邻接表图如下:拓扑序列:abgcdfe.关键活动和关键路径关键路径:从起点到终点的最长路径长度,这个最长的路径就叫做关键路径。关键活动:关键路径上的所有活动都是关键活动。a1-a4-a8-a11 关键路径:a-b-e-h-k.这道题很重要。数据结构上有解析,请认真理解
4、好。(.哈夫曼树问题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-datanext=null | p-data=maxk (3) p-next=q;. (4)vLeft);Right);printf(%c,BT-TData);/.这道题也可以参考高分笔记/ 邻接矩阵typedef struct _graph char vexsMAX; / 顶点集合int vexnum; /
5、 顶点数int edgnum; / 边数int matrixMAXMAX; / 邻接矩阵Graph, *PGraph;/ 边的结构体typedef struct _EdgeData char start; / 边的起点char end; / 边的终点int weight; / 边的权重EDatavoid kruskal(Graph G)int i,m,n,p1,p2;int length;int index = 0; / rets 数组的索引int vendsMAX=0; / 用于保存已有最小生成树中每个顶点在该最小树中的终点。EData retsMAX; / 结果数组,保存kruskal 最
6、小生成树的边EData *edges; / 图对应的所有边/ 获取图中所有的边edges = get_edges(G);/ 将边按照权的大小进行排序(从小到大)sorted_edges(edges, G.edgnum);for (i=0; ilchild=NULL&rchild=NULL0021,235,346,256,558不一定,要是有两条关键路径,有一段是重合的,那么提高重合这一段的活动速度是可以缩短工期的。否则是,是不能缩短整个工期的。.F 先序和后序是不能确定一颗树的0.F 需要 1+2+n=(1+n)n/2 个空间四、简答题./快速排序,两边同时遍历,当遇到小于枢轴的数就往左边放,
7、大于枢轴的就往右边放,一趟排序下来,比枢轴小的都在枢轴左边,比枢轴大的都在枢轴右边5,57,45,39,12,98,86,355, 57,45,39,12,98,86,355, 57,45,39,12,98,86,985, 57,45,39,12,65,86,98.删除线性表 L 中大于 X 小于 Y 的节点3.按边的权值排序:3,5,12,14,15,17,25依次选取,如果不构成回路,则加入;否则,就跳过该边。最小生成树如下:. 深度优先搜索遍历:V0V1V4V2V3V5V6广度优先遍历:V0V1V2V3V4V5V6.弗洛伊德算法,请认真理解。. (QueuePtr)malloc(size
8、of(QNode) NULL Q.rear-next p. !StackEmpty()|p!=NULL Push(S,p) Pop(S,p) p-rchild. void preOrderTraverse(BiTree T,int *count)if(T) / T 不空/如果为叶子节点,就加1if(T- T-rchild=NULL)*count+;preOrderTraverse(T-lchild,count);rchild,count);2. 设计一个图的数组表示存储结构,并编写采用数组表示法构造一个无向网的算法#define MAX_VERTEX_NUM 20typedef struct
9、ArcCellVRType adj;InfoType *info;ArcCell,AdjMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM;typedef struct VertexType vexsMAX_VERTEX_NUM;AdjMatrix arcs;int vexnum,arcnum;GraphKind kind;MGraph;013参考答案.C 2.D 3.C 4.C 5.A 6.C 7.C 8.C 9.A 10.A 11.A2.C 13.D 14.A 15.C十字链表 三元组.一对一 一对多.前驱结点 后继结点.n2+1.60解释:三元组存储行标,列表,非零元。
10、一个需要六个字节,0*6=60.L-next=L.440.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!=NULL p=p-ne
11、xt p-next=q-next free(q).jj ai=ai+1 ai+1=temp flag=01设计在顺序有序表中实现折半查找的算法。(10 分)设计 AOV-网拓扑排序的算法(12 分)数据结构第七章有向无环图及其应用拓扑排序014参考答案1.C 2.A 3.A 4.B 5.D 6.D 7.C 8.C 9.C 10.A 11.A 12.D 13.B 14.A 15.A.一对多 多对多. 将矩阵第 i 行全部置为零.队尾 对头 先进先出.能否将关键字均匀影射到哈希空间上 有无好的解决冲突的方法. 关键路径:从源点到汇点的路径长度最长的路径叫关键路径。a1 a5 a6 a8 a7 a1
12、0. 在排好序的线性表中,删除值为 X 的所有元素。.sizeof(ElemType) !S.base S.stacksize e top+1.vnext=p- p-next=s;表头没有前驱,表尾没有后继不唯一. 树的非递归中序遍历.快速排序:两边同时遍历,大于枢轴的交换到右边,小于的交换到左边此处不给该题的具体实现,解题过程参照下图:1)2)拓扑排序:V1 v3 v2 v6 v5 v43)迪杰斯特拉算法问题:构造哈夫曼树如上图,编码a:11 b:100 c:001 d:0001 e:101 f:01 g:0000、!P e NULL Q.rear-next p、v=0DFS(G,w)1.
13、void Process(LinkList &L, int x, int y) / L 线性表的元素递增有序排列LinkList p=L, q, s;if (p-=NULL) & (x=NULL &=x) p=p-if (p-next=NULL | p-=y) return ERROR;q=p-while (q- q-y) s=q; q=q- free(s); 2.思路:利用图的广度优先遍历,那么最后一个遍历的节点一定离顶点最远。int Maxdist(AGragh *G,int v)ArcNode *p;int QuMAXV;/循环队列int front=0,rear=0;/队列的头、尾指针
14、int visitedMAXV;/初始化访问数组int i,j,k;for(i=0;in;i+)visitedi=1;/初始化访问标志数组rear+;Qurear=v;/顶点v 进队visitedv=1;/顶点v 已访问while(front!=rear)front=(front+1)%MAXV;k=Qufront;/顶点k 出队p=G-adjlistk.firstarc;/找到第一个邻节点while(p!=NULL)/所有未访问过的相邻点进队j=p-adjvex;/邻接点为顶点jif(visitedj=0)/若j 未访问过visitedj=1;rear=(rear+1)%MAXV;/进队Qu
15、rear=j;p=p-nextarc;/找下一个邻接点return k;016参考答案1.B 2.B 3.A 4.C 5.A 6.A 7.A 8.B 9.C 10.D 11.D 12.A 13.D 14.C 15.A.n-i.(SQ.front+1)%(m+1).n+1.O(log2 n) O(nlog2 n).d. 1、4、2、31.(1)(2)2.3.平衡二叉树旋转的问题4.(3)深度优先搜索序列:a,b,c,d,e,f深度优先生成树:5.(1)希尔排序(2)出始堆(题目要求升序,因此要构建大顶堆)第一趟排序后的结果:推荐阅读以便理解堆排:五算法填空next=L L=p;.T-lchildlchild p-rchild!=T p=p-rchild p=p-T T-lchild T-i i(1)参照快速排序思想。i,j 分别从前后遍历,要是 aiK 将其往后仍,ajK 则将其往前扔(2)哈夫曼算法(构造哈夫曼树and求各个字符的哈夫曼编码)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1