1、B.2n 1C.33n 1D.45. 下列函数中,按它们在n 时的无穷大阶数,最大的是 D 。A. lognB. nlognC. 2n/2D. n! next p s 6. 将下图所示的 s 所指结点加到p 所指的结点之后,其语句应为: D 。A. s-next=p+1; p-next=s;B. (*p).next=s; (*s).next=(*p).next; C. s-next=p-next;next=s- D. s-7. 将两个各有 n 个元素的有序表归并为一个有序表时,其最少的比较次数是 A 。A. nB. 2n-1 C. n-1D. 2n 8. 下面的程序段是合并两个无头结点链表(h
2、a 和hb) 为一个无头结点链表 ha 的过程,作为参数的两个链表都是按结点的data 域由大到小链接的。合并后新链表的结点仍按此方式链接。请填写下述空框,使程序能正确运行。#define NULL 0 typedef struct node int data;struct node *next;node, linklisttype;void combine(linklisttype *ha, linklisttype *hb) linklisttype *h, *p;h = (linklisttype *)malloc(sizeof(linklisttype);h-next = NULL;
3、p = h;while(ha != NULL & hb != NULL) if(ha-data=hb-data)/*较大的元素先插入*/ p-next = (1) ;p = (2) ; (3) ; else p-next = (4) ;p = (5) ; (6) ; if(ha=NULL) (7) ; if(hb=NULL) (8) ; ha = h-free(h);参 考 答 案 : (1) ha (2) p-next (3) ha=ha-next (4) hb (5) p-next (6) hb=hb-next (7) p-next=hb(8) p-next=ha 9. 如果表 A 中所有
4、元素(a1,a2,a n )与表 B 的一个顺序子表(bk,bk+1,b k+n-1)完全相同(即 a1 =bk ,a2=bk+1 ,a n=bk+n-1 ),则称表 A 包含在表B 中。设 ha,hb 为带头结点的单链表,分别表示有序表A 和 B,下面的函数用于判别表A 是否包含在表B 中,若是,则返回true,否则返回 false。(提示:用递归实现)#define true 1 #define false 0 #define NULL 0 typedef struct node int inclusion(linklisttype *ha, linklisttype *hb) linkl
5、isttype *pa, *pb;pa = ha-pb = hb- (1) ;while( (2) ) if(pa-data=pb-data) (3) ; else(4) ; (5) ;参考答案:(1) if(pa=NULL) return(true) (2) pb!=NULL & pa-=pb-data (3) return(inclusion(pa, pb) (4) pb = pb- (5) return(false) 10. 在本题的程序中,函数 create_link_list(n)建立一个具有 n 个结点的循环链表;函数josephus(n,I,m)对由 create_link_li
6、st(n)所建立的具有 n 个结点的循环链表按一定的次序逐个输出,并删除链表中的所有结点。参数 n(n0)指明循环链表的结点个数,参数 I(1In)指明起始结点,参数m(m0 是步长),指明从起始结点或前次被删除并输出的结点之后的第m 个结点作为本次被输出并删除的结点。例如,对于下图所示的具有6 个结点的循环链表,在调用josephus(6,3,2)后,将输出 5,1,3,6,4,2。请在空框处填上适当内容,每框只填一个语句。linklisttype *create_link_list(int n) linklisttype *head, *p, *q;int I;head = NULL; i
7、f(n0) head = (linklisttype *)malloc(sizeof(linklisttype); p = head;for(I=1;Idata = I;q = (linklisttype *)malloc(sizeof(linklistttype); (1) ; (2) ;data = n; (3) ;/*建立从尾链到首的环形结构*/ return(head);void Josephus(int n, int j, int m) linklisttype *p, *q;int j;p = create_link_list(n); for(;I1;I-) p = p- (4)
8、;while(j printf(“%8d”,q-data);free(q); j=j+1;(1) p-next = q; (2) p = q;(3) p-next = head (4) j=0 (5) q=p-(6) p-next = q-11. 在下列程序中,函数 difference(A,B)用于求两集合之差C=A-B,即当且仅当 e 是A 中的一个元素,且不是B 中的元素时,e 是 C 中的一个元素。集合用有序链表实现,用一个空链表表示一个空集合,表示非空集合的链表根据元素之值按递增排列,执行 C=A-B 之后,表示集合A 和 B 的链表不变,若结果集合C 非空,则表示它的链表应根据元素
9、之值按递增序排列。函数 append()用于在链表中添加结点。#include #define NULL 0 typedef struct node NODE;NODE *append(NODE *last, int x) last-next=(NODE *)malloc(sizeof(NODE); last-next-data=x;return(last-next);NODE *difference(NODE *A ,NODE *B) NODE *C,*last;C=last=(NODE *)malloc(sizeof(NODE);while( (1) ) if(A-data data) l
10、ast=append(last,A- A=A- else if( (2) ) A=A- B=B-while( (4) ) last=append(last,A- last=C;C=C- free(last); return(C);(1) A! B!=NULL (2) A-data=B-data (3) B=B-(4) A!(5) last-next=NULL;12. 阅读以下算法,填充空格,使其成为完整的算法。其功能是在一个非递减的顺序存储线性表中(从下标 1 处开始存储),删除所有值相等的多余元素。#define MAXSIZE 30 typedef struct int elemMAXSI
11、ZE; int length;/*表长*/ sqlisttype;void exam21(sqlisttype *L) int I,j;I=2,j=1;while( (1) ) if(L-elemIL-elemj) I+; (4) ;(1) ilength (2) (3) j+; (4) 13. 用单链表表示的链式队列的队头在链表的 A位置。A. 链头B. 链尾C. 链中14. 若用单链表表示队列,则应该选用 B。A. 带尾指针的非循环链表B. 带尾指针的循环链表C. 带头指针的非循环链表D. 带头指针的循环链表15. 在解决计算机主机与打印机之间速度不匹配问题时,通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则从该缓冲区中取出数据打印,先放入打印缓冲区的数据先被打印。该缓冲区应该是一个 B结构。A. 堆栈B. 队列C.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1