1、n ext=s;B.(*p). next=s; (*s). next=(*p). next;C.s-n ext=p-n ext;n ext=s-D.s-7.将两个各有n个元素的有序表归并为一个有序表时,其最少的比较次数是 A 。A. n B. 2n-1C.n-1 D. 2n8. 下面的程序段是合并两个无头结点链表 (ha和hb)为一个无头结点链表 ha的过程,作为参数的两个链表都是按结点的 data域由大到小链接的。合并后新链表的结点仍按此方式链接。请填写下述空框,使程序能正确运行。1.#defi ne NULL 0typedef struct no deint data;struct nod
2、e *n ext;no de, li nklisttype;void combine(linklisttype *ha, linklisttype *hb)lin klisttype *h, *p;h = (li nklisttype *)malloc(sizeof(li nklisttype); h-next = NULL;p = h;/*较大的元素先插入*/while(ha != NULL & hb != NULL) if(ha-data=hb-data)p-n ext = (1)p = (21 ; ;elsen ext = (4)p = (5) if(ha=NULL) if(hb=NUL
3、L) ha = h- free(h); 参考答案:(7)18(2) p- next(5) p_next(1) hahb(7) p-n ext=hb中所有元素 (a1,a2,角与表9.如果丰a1=bk,a2=bk+1,abk+n-1 ),则称表A包含在表示有序表A和B,下面的函数用于判别表 A是否包含在表B中,回falseo (提示:用递归实现)(3) ha=ha-(6) hb=hb-(8) p-n ext=ha的一个顺序子表 (bk,bk+1, b+n-1)完全相同(即B中。设ha, hb为带头结点的单链表,分别表若是,则返回true,否则返(61 ;#defi ne true 1 #defi
4、 ne false 0typedef struct no de int data;int in clusi on (I in klisttype *ha, li nklisttype *hb) lin klisttype *pa, *pb;pa = ha-pb = hb-(1);while( )if(pa-data=pb-data) (3) ;else (4) ; (5) ;参考答案:(1) if(pa=NULL) return(true) pb!=NULL & pa-=pb-data(3)retur n(i nclusi on( pa, pb)(4)pb = pb-(5)return(fal
5、se)10.在本题的程序中,函数 create_link_list(n)建立一个具有 n个结点的循环链表;函数josephus(n,l,m)对由create_link_list(n)所建立的具有n个结点的循环链表按一定的次序逐个输 出,并删除链表中的所有结点。参数 n(n0)指明循环链表的结点个数,参数 1(1 w K n)指明起始结点,参数 m ( m0是步长),指明从起始结点或前次被删除并输出的结点之后的第 m个结点作为本次被输出并删除的结点。 例如,对于下图所示的具有 6个结点的循环链表,在调用josephus(6,3,2)后,将输出5,1,3,6,4,2。请在空框处填上适当内容,每框只
6、填一个语句。#defi ne NULL 0 typedef struct no delin klisttype *create _lin k_list(i nt n)lin klisttype *head, *p, *q;int I;head = NULL;if(n 0)head = (li nklisttype *)malloc(sizeof(li nklisttype);p = head;for(I=1;Idata = I;q = (li nklisttype *)malloc(sizeof(li nklistttype);m ; (2 ;data = n; (3) ; /*建立从尾链到首
7、的环形结构 */retur n( head);void Josephus(i nt n, int j, i nt m) lin klisttype *p, *q;int j;p = createnk_list( n);for(;l1;l-) p = p-(4)_ ;while(jnext;丄 ;printf( “ 8”ata); ;free(q);j=j+1;(1) p_n ext = q; p = q;(3)p-n ext = headj=0(5)q=p-(6)p-n ext = q-n ext11.在下列程序中,函数 difference(A,B)用于求两集合之差 C=A-B,即当且仅当e
8、是A中的一个元素,且不是 B中的元素时,e是C中的一个元素。集合用有序链表实现,用一个空链表 表示一个空集合,表示非空集合的链表根据元素之值按递增排列, 执行C=A-B之后,表示集合A和B的链表不变,若结果集合 C非空,则表示它的链表应根据元素之值按递增序排列。函数append()用于在链表中添加结点。#in elude NODE;NODE *appe nd(NODE *last, i nt x)last- n ext=(NODE *)malloc(sizeof(NODE); last- n ext-data=x;retur n(last- n ext);NODE *differe nce(N
9、ODE *A ,NODE *B)NODE *C,*last;C=last=(NODE *)malloc(sizeof(NODE);while( (1) )if(A-data last=appe nd(last,A-data);A=A-elseif( (2) )B=B_ next;while( )A=A- last=C;C=C-free(last);return(C);(1)A! B!=NULL(2)A-data=B- B=B-(4)A!(5)last- next=NULL;12阅读以下算法,填充空格,使其成为完整的算法。其功能是在一个非递减的顺序存储线 性表中(从下标1处开始存储),删除所有值
10、相等的多余元素。#defi ne MAXSIZE 30typedef structint elemMAXSIZE;int length;/* 表长 */sqlisttype;void exam21(sqlisttype *L)int I,j;I=2,j=1;while( (1) )if(L-elemIelemj)I+; ;(1) ile ngth j+;13.用单链表表示的链式队列的队头在链表的 A 位置。A.链头 B.链尾 C.链中14.若用单链表表示队列,则应该选用 B 。A.带尾指针的非循环链表 B.带尾指针的循环链表C.带头指针的非循环链表 D.带头指针的循环链表15.在解决计算机主机
11、与打印机之间速度不匹配问题时,通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区, 而打印机则从该缓冲区中取出数据打印, 先放入打印缓冲区的数据先被打印。该缓冲区应该是一个 B 结构。A.堆栈 B.队列C.数组 D.线性表16.若用一个大小为6的数组来实现循环队列,且当前 rear和front的值分别为0和3。当从队列中删除一个元素,再加入两个元素后, rear和front的值分别为 B 。A. 1 和 5 B. 2 和 4C. 4 和 2 D. 5 和 117.设栈的输入序列为1,2,10输出序列为a1,a2,1a,若a5=10,贝U a7为 C 。A. 4 B. 8 C不确定18.设栈的输入序列是1,2,3,4,则 D 不可能是其出栈序列。A. 1243 B.2134 C.1432 D.431219.以下 D 是C语言中” abcd321ABC的子串。A. abcd B. 321AB C “ abcABC” D. “ 21AB”20.若串S=” software,其子串的数目是 C 。A. 8 B. 37 C. 36 D. 921. 将一个 A1:100,1:100的三对角矩阵,按行优先存入一维数组 B1:298中,A中元素A66,65(
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1