2、______________________________;//在右子表上继续查找}return-1;//查找失败,返回-1} (low+high)/2high=mid-1low=mid+12. intPrime(intn){inti=1;intx=(int)sqrt(n);while(++i<=x)if(n%i==0)break;if(i>x)return1;elsereturn0;}(1) 指出该算法的功能;(2) 该算法的时间复杂度是多少?2.
3、 (1)判断n是否是素数(或质数)(2)O()3.已知一个图的顶点集V和边集E分别为:V={1,2,3,4,5,6,7};E={(1,2)3,(1,3)5,(1,4)8,(2,5)10,(2,3)6,(3,4)15,(3,5)12,(3,6)9,(4,6)4,(4,7)20,(5,6)18,(6,7)25}.用克鲁斯卡尔(Kruskal)算法和prim算法得到最小生成树,试写出在最小生成树中依次得到的各条边。3. 用克鲁斯卡尔算法得到的最小生成树为:(1,2)3,(4,6)4,(1,3)5,(1,
4、4)8,(2,5)10,(4,7)204. LinkListmynote(LinkListL){//L是不带头结点的单链表的头指针if(L&&L->next){q=L;L=L->next;p=L;S1:while(p->next)p=p->next;S2:p->next=q;q->next=NULL;}returnL;}请回答下列问题:(1)说明语句S1的功能;(2)说明语句组S2的功能;(3)设链表表示的线性表为(a1,a2,…,an),写出算法执行后的返回值所表示的线性表。4. (1)查询链表的尾结
5、点(2)将第一个结点链接到链表的尾部,作为新的尾结点(3)返回的线性表为(a2,a3,…,an,a1)5. voidABC(BTNode*BT){ifBT{ABC(BT->left);ABC(BT->right);cout<data<<'';}}该算法的功能是:递归地后序遍历链式存储的二叉树。6.已知二叉树的存储结构为二叉链表,阅读下面算法。typedefstructnode{DateTypedata;Structnode*next;}ListNode;typedefListNode*LinkLis
6、t;LinkListLeafhead=NULL;VoidInorder(BinTreeT){LinkLists;If(T){Inorder(T->lchild);If((!T->lchild)&&(!T->rchild)){s=(ListNode*)malloc(sizeof(ListNode));s->data=T->data;s->next=Leafhead;Leafhead=s;}Inorder(T->rchild);}}对于如下所示的二叉树(1)画出执行上述算法后所建立的结构;(2)说明该算法的功能。
7、6.(1)LeafheadFHGD∧(2)中序遍历二叉树,按遍历序列中叶子结点数据域的值构建一个以Leafhead为头指针的逆序单链表(或按二叉树中叶子结点数据自右至左链接成一个链表)。7.已知一个无向图的顶点集为{a,b,c,d,e},其邻接矩阵如下所示abcde(1)画出该图的图形;(2)根据邻接矩阵从顶点a出发进行深度优先遍历和广度优先遍历,写出相应的遍历序列。7.该图的图形为:深度优先遍历序列为:abdce广度优先遍历序列为:abedc8.已知一个散列表如下图所示:352033485901234567
8、89101112其散列函数为h(key)=key%13,处理冲突的方法为双重散列法,探查序列为:hi=(h(key)+*h1(key))%m=0,1,…,m-1其中h1(key)=key%11+1回答下列问题:(1)对表中关键字35,20,33和48进行查找时,所需进行的比较次数各为多少?(2)该散列表在等概率查找时查找成功的平均查找长度为多少?8.(1)对关键字35、20、33和48进行查找的比较