数据结构课堂习 题1.docVIP

  • 3
  • 0
  • 约2.99千字
  • 约 5页
  • 2019-10-25 发布于广东
  • 举报
数据结构课堂习题 一、综合题。 1. 已知如图所示的AOE-网,试求: 每个事件的最早发生时间和最晚发生时间; 每个活动的最早开始时间和最晚开始时间; 给出关键路径。 2. 已知以二维数组表示的图的邻接矩阵如下图所示。 0 1 2 3 4 5 6 0 0 1 0 0 0 0 0 1 0 0 1 0 1 1 0 2 0 0 0 0 1 0 0 3 0 0 1 0 0 0 0 4 0 1 0 1 0 0 0 5 0 0 0 0 0 0 1 6 0 0 0 0 0 0 0 1)并判别此图为有向图还是无向图。 2)求所有顶点的度数之和。 3)根据数组分别写出至序号为0的顶点开始进行遍历所得到的深度优先序列和广度优先序列。 3. 给定集合{6,9,16,17,15,3,14,2 } (1) 用□表示外部结点,用○表示内部结点,构造相应的huffman树: (2) 计算它的带权路径长度: (3) 写出它的huffman编码: 4.画出下图所示的树对应的二叉树。 A A DBC D B C HEGF H E G F KJI K J I 5. 从空树开始,逐个读入并插入下列关键字:(40,82,26,22,95,30,71,27),构造一颗二叉排序树,并求出在等概率情况下检索成功的平均检索长度。(7分) 二、算法设计题 1. 在带头结点的单链表L中删除第i个元素,并将删除的元素保存到变量*e中。 int DelList(LinkList L,int i,ElemType *e) { Node *pre,*r; int k; pre=L; k=0; while(pre-next!=NULL ki-1) /*寻找被删除结点i的前驱结点i-1使p指向它*/ {  Pre=pre-next ; k=k+1; } if(!(pre-next)) { printf(删除结点的位置i不合理!); return ERROR; } r=pre-next; pre-next=r-next; /*修改指针,删除结点r*/ *e=r-data; free(r); /*释放被删除的结点所占的内存空间*/ printf (成功删除结点!); return OK; } 2.已知二叉树按照二叉链表方式存储,编写算法,计算二叉树中叶子结点的数目。 int LeafCount(Bitree T) //求二叉树中叶子结点的数目 { ??if( ) return 0; //空树没有叶子 ??else if(!T-lchild !T-rchild) return ; //叶子结点 ??else return }//LeafCount 3.定义有序表抽象数据类型,并据此类型设计折半查找算法。 typedef struct { int key; float info; }JD; int binsrch(JD r[],int n,int k) { int low,high,mid,found; low=1; high=n; found=0; while( )(found==0)) { mid= ; if(kr[mid].key) ; else if(k==r[mid].key) found=1; else ; } if( found= =1 ) return(mid); else return(0); } 一、综合题(共40分) 1.二叉树的先序遍历序列ABDECFG,是中序遍历序列是DBEACGF,画出这棵二叉树,并给出后序遍历序列。 2.在一个链队列Q中,假定front和rear分别为队首和队后指针,写出进行S结点进队执行的操作(s为指针)。 3.一组记录的关键码为(46,79,56,38,40,84,27)利用快速排序的方法,求以第一个记录为基准得到的一次划分结果,并说明算法的稳定性。 4. 已知以邻接表表示的图的存储结构如下图所示。 判别此图为有向图还是无向图。 求所有顶点的度数之和。 根据邻接表分别写出以序号为v1的顶点开始进行遍历所得到的深度优先序列

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档