计算机软件技术基础试题答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《计算机软件技术基础》试题
1•线性表的链式存储结构与顺序存储结构相比优点是 CD 。
A.
所有的操作算法实现简单 B.便于随机存取 C. 便于插入和删除 D.便于利用零散的存储器空间 2•线性表是具有n 个 C 的有限序列。 A. 表元素
B.字符
C.数据元素
D. 数据项
E.信息项
3•若长度为n 的线性表采用顺序存储结构,在其第
I 个位置插入一个新元素的算法的时间复
杂度为 _______ C 。(1 < K n+1) A. 0(0) B. 0(1) C. 0( n)
D. 0(n 2) 4.设A 是一个线性表(a i ,a 2,…n a ,采用顺序存储结构,则在等概率的前提下,平均每插入一 个元素需
要移动的元素个数为
B
,平均每删除一个元素需要移动的元素个数为
n
B. -
2 3n 1
D.
4
时的无穷大阶数,最大的是 _
B. nlogn
D. n!
s 所指结点加到p 所指的结点之后,其语句应为: A. s->n ext=p+1; p->n ext=s; B. (*p). next=s; (*s). next=(*p). next; C. s->n ext=p->n ext; p->n ext=s->n ext; D. s->n ext=p->n ext; p->n ext=s;
7. 将两个各有n 个元素的有序表归并为一个有序表时,其最少的比较次数是 A 。
A. n
B. 2n-1
C. n-1
D. 2n
8.
下面的程序段是合并两个无头结点链表 (ha 和hb)为一个无头结点链表
ha 的过程,作为参
数的两个链表都是按结点的 data 域由大到小链接的。合并后新链表的结点仍按此方式链接。
请填写下述空框,使程序能正确运行。
1.
;若兀素插在
a i 与a i+1之间(0 w K n-1)的概率为 空一,则平均每插入一个
n(n 1)
元素所要移动的元素个数为 n 1 A.
2
2n 1 C.
3
5.
下列函数中,按它们在 n A. log n C.严
n ext
n ext
n ext
#defi ne NULL 0 typedef struct no de{
int data;
struct node *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
;
⑶ ;
} else{
p->n ext = _____ (4) p = ______ (5)
(61
;
#defi ne true 1 #defi ne false 0 #defi ne NULL 0
typedef struct no de{ int data;
struct node *n ext; }no de, li nklisttype;
int in clusi on (I in klisttype *ha, li nklisttype *hb){ lin klisttype *pa, *pb;
pa = ha->n ext;
/*较大的元素先插入*/
} if(ha==NULL) if(hb==NULL) ha = h->n ext; free(h); } 参考答案:
(7) 18
(2) p->
next
(5)
(1) ha
⑷hb
(7) p->n ext=hb
中所有元素 (a 1,a 2,…角与表
9.如果丰
a 1=
b k ,a 2=b k+1,…a b k+n-1 ),则称表A 包含在表 示有序表A 和B ,下面的函数用于判别表 A 是否包含在表B 中,
回false o (提示:用递归实现) (3) ha=ha->next (6) hb=hb-> next (8) p->n ext=ha 的一个顺序子表
(b k ,b k+1, •••b +n-1)完全相同(即
B 中。设ha , hb 为带头结点的单链表,分别表 若是,则返回true ,否则返
pb = hb->n ext;
(1) ;
while( ⑵)
if(pa->data=pb->data) _______ (3) ____ ;
else _____ (4) _____ ;
_____ (5) ____ ;
}
参考答案:
(1) if(pa==NULL) return(true)
⑵ pb!=NULL && pa->data>=pb->data
(3) retur n(i nclusi on( pa, pb))
(4) pb = pb->n ext;
(5) return(false)
10. 在本题的程序中,函数
create_link_list(n)建立一个具有n个结点的循环链表;函数josephus(n,l,m)对由create_link_list(n)所建立的具有n个结点的循环链表按一定的次序逐个输出,并删除链表中的所有结点。参数n(n>0)指明循环链表的结点个数,参数1(1 w K n)指明起始结点,参数m ( m>0是步长),指明从起始结点或前次被删除并输出的结点之后的第m 个结点作为本次被输出并删除的结点。例如,对于下图所示的具有6个结点的循环链表,在
调用josephus(6,3,2)后,将输出5,1,3,6,4,2。请在空框处填上适当内容,每框只填一个语句。
#defi ne NULL 0 typedef struct no de{
int data;
struct node *n ext;
}no de, li nklisttype;
lin 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;I<=n-1;l++){ /*此循环用于建立一个链表,链表的内容从1至n-1*/ p->data = I;
q = (li nklisttype *)malloc(sizeof(li nklistttype));
m ;
-------- (2 --------- ;
}
p->data = n;
______ (3) ____ ; /*建立从尾链到首的环形结构*/
retur n( head);
}